From: sin Date: Tue, 21 Oct 2014 14:52:59 +0000 (+0100) Subject: Always use realpath() and properly chdir() so relative changes via 'c' work X-Git-Tag: v1.0~92^2~196 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=3808dde64162455d349ca1075ccbbeb1184a078f;p=nnn.git Always use realpath() and properly chdir() so relative changes via 'c' work --- diff --git a/noice.c b/noice.c index 9088c83a..e288f92d 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);