From 3808dde64162455d349ca1075ccbbeb1184a078f Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 21 Oct 2014 15:52:59 +0100 Subject: Always use realpath() and properly chdir() so relative changes via 'c' work --- noice.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/noice.c b/noice.c index 9088c83..e288f92 100644 --- a/noice.c +++ b/noice.c @@ -375,7 +375,7 @@ browse(const char *ipath, const char *ifilter) struct entry *dents; int i, n, cur; int r, ret; - char *path = strdup(ipath); + char *path = realpath(ipath, NULL); char *filter = strdup(ifilter); regex_t filter_re; char *cwd; @@ -391,6 +391,9 @@ begin: if (dirp == NULL) { printwarn(); goto nochange; + } else { + if (chdir(path) == -1) + printwarn(); } /* Search filter */ @@ -607,13 +610,9 @@ nochange: cur = 0; goto out; case SEL_SH: - if (chdir(path) == -1) - printwarn(); exitcurses(); spawn("/bin/sh", NULL); initcurses(); - if (chdir(ipath) == -1) - printwarn(); break; case SEL_CD: /* Read target dir */ @@ -630,7 +629,8 @@ nochange: goto nochange; } else { free(path); - path = tmp; + path = realpath(tmp, NULL); + free(tmp); free(filter); filter = strdup(ifilter); /* Reset filter */ DPRINTF_S(path); -- cgit v1.2.3-70-g09d2