]> Sergey Matveev's repositories - nnn.git/commitdiff
Handle the root path case correctly
authorlostd <lostd@2f30.org>
Fri, 10 Oct 2014 10:14:55 +0000 (13:14 +0300)
committerlostd <lostd@2f30.org>
Fri, 10 Oct 2014 10:14:55 +0000 (13:14 +0300)
noice.c

diff --git a/noice.c b/noice.c
index 4c88701e823bbaae88f6f0a1a0bf94c8f95fa7c1..d03400e984d06cf8b10ad14179d774d438701413 100644 (file)
--- a/noice.c
+++ b/noice.c
@@ -374,8 +374,12 @@ begin:
                dents[n].name = strdup(dp->d_name);
                if (dents[n].name == NULL)
                        printerr(1, "strdup");
+               /* Handle root case */
+               if (strcmp(path, "/") == 0)
+                       asprintf(&name, "/%s", dents[n].name);
+               else
+                       asprintf(&name, "%s/%s", path, dents[n].name);
                /* Get mode flags */
-               asprintf(&name, "%s/%s", path, dents[n].name);
                r = lstat(name, &sb);
                free(name);
                if (r == -1)
@@ -406,7 +410,7 @@ redraw:
                erase();
 
                /* Strip trailing slashes */
-               for (i = strlen(path) - 1; i > -1; i--)
+               for (i = strlen(path) - 1; i > 0; i--)
                        if (path[i] == '/')
                                path[i] = '\0';
                        else
@@ -420,12 +424,7 @@ redraw:
                strlcpy(cwd, path, COLS * sizeof(char));
                cwd[COLS - strlen(CWD) - 1] = '\0';
 
-               /* Print cwd.  If empty we are on the root.  We store it
-                * as an empty string so that when we navigate in /mnt
-                * is doesn't come up as //mnt. */
-               printw(CWD "%s%s\n\n",
-                   strcmp(cwd, "") == 0 ? "/" : "",
-                   cwd);
+               printw(CWD "%s\n\n", cwd);
 
                /* Print listing */
                odd = ISODD(nlines);
@@ -449,8 +448,8 @@ nochange:
                        free(filter);
                        return;
                case SEL_BACK:
-                       /* Handle root case */
-                       if (strcmp(path, "") == 0) {
+                       /* There is no going back */
+                       if (strcmp(path, "/") == 0) {
                                goto nochange;
                        } else {
                                dir = dirname(path);