]> Sergey Matveev's repositories - nnn.git/commitdiff
Simplified dirname()
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 12 Apr 2020 12:14:29 +0000 (17:44 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 12 Apr 2020 12:14:29 +0000 (17:44 +0530)
src/nnn.c

index 0ac2da7e32134425be0de69696b5b5d6901649f6..397358dbb3f15a91db8e1bf781b5df0343cc1781 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -1084,6 +1084,19 @@ static char *abspath(const char *path, const char *cwd)
        return resolved_path;
 }
 
+/* A very simplified implementation, changes path */
+static char *xdirname(char *path)
+{
+       char *base = xmemrchr((uchar *)path, '/', strlen(path));
+
+       if (base == path)
+               path[1] = '\0';
+       else
+               *base = '\0';
+
+       return path;
+}
+
 static char *xbasename(char *path)
 {
        char *base = xmemrchr((uchar *)path, '/', strlen(path)); // NOLINT
@@ -3705,13 +3718,13 @@ static char *visit_parent(char *path, char *newpath, int *presel)
                return NULL;
        }
 
-       /* Use a copy as dirname() may change the string passed */
+       /* Use a copy as xdirname() may change the string passed */
        if (newpath)
                xstrsncpy(newpath, path, PATH_MAX);
        else
                newpath = path;
 
-       dir = dirname(newpath);
+       dir = xdirname(newpath);
        if (access(dir, R_OK) == -1) {
                printwarn(presel);
                return NULL;
@@ -3950,7 +3963,7 @@ static bool unmount(char *name, char *newpath, int *presel, char *currentpath)
        if (tmp && strcmp(cfgdir, currentpath) == 0) {
                mkpath(cfgdir, tmp, newpath);
                child = lstat(newpath, &sb) != -1;
-               parent = lstat(dirname(newpath), &psb) != -1;
+               parent = lstat(xdirname(newpath), &psb) != -1;
                if (!child && !parent) {
                        *presel = MSGWAIT;
                        return FALSE;
@@ -6486,7 +6499,7 @@ static char *load_input()
                DPRINTF_S(paths[i]);
 
                xstrsncpy(g_buf, paths[i], PATH_MAX);
-               if (!common_prefix(dirname(g_buf), prefixpath)) {
+               if (!common_prefix(xdirname(g_buf), prefixpath)) {
                        entries = i + 1; // free from the current entry
                        goto malloc_2;
                }