]> git.wh0rd.org Git - nano.git/commitdiff
in striponedir(), return the stripped path instead of modifying path
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 30 Jun 2006 14:14:40 +0000 (14:14 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 30 Jun 2006 14:14:40 +0000 (14:14 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3704 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/browser.c
src/proto.h

index 6b39019cfc5ac4b20fd1f86ecd3737ba96b23ba3..e6a3662e21b470ff978a62479ac2a74404721b03 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -30,7 +30,8 @@ CVS code -
   striponedir()
        - Since all the strings passed to this are dynamically
          allocated, use null_at() to strip the directory from the
-         string. (DLR)
+         string.  Also, return the stripped path instead of modifying
+         path. (DLR)
 - doc/syntax/c.nanorc:
        - Since .i and .ii are preprocessed C and C++ output, colorize
          them here. (Mike Frysinger)
index 051d25125561d7c1f3ebe59a766255f7b2a2153c..6caa4764f0f82d8f3ddafff2405666938e426fda 100644 (file)
@@ -333,7 +333,7 @@ char *do_browser(char *path, DIR *dir)
                } else if (strcmp(tail(filelist[selected]),
                        "..") == 0) {
                    prev_dir = mallocstrcpy(NULL, filelist[selected]);
-                   striponedir(prev_dir);
+                   prev_dir = striponedir(prev_dir);
                }
 
                dir = opendir(filelist[selected]);
@@ -401,7 +401,7 @@ char *do_browse_from(const char *inpath)
      * at all.  If so, we'll just pass the current directory to
      * do_browser(). */
     if (stat(path, &st) == -1 || !S_ISDIR(st.st_mode)) {
-       striponedir(path);
+       path = striponedir(path);
        if (stat(path, &st) == -1 || !S_ISDIR(st.st_mode)) {
            free(path);
 
@@ -966,18 +966,23 @@ void do_last_file(void)
     selected = filelist_len - 1;
 }
 
-/* Strip one directory from the end of path, which should be
- * dynamically allocated. */
-void striponedir(char *path)
+/* Strip one directory from the end of path, and return the stripped
+ * path.  The returned string is dynamically allocated, and should be
+ * freed. */
+char *striponedir(const char *path)
 {
-    char *tmp;
+    char *retval, *tmp;
 
     assert(path != NULL);
 
-    tmp = strrchr(path, '/');
+    retval = mallocstrcpy(NULL, path);
+
+    tmp = strrchr(retval, '/');
 
     if (tmp != NULL)
-       null_at(&path, tmp - path);
+       null_at(&retval, tmp - retval);
+
+    return retval;
 }
 
 #endif /* !DISABLE_BROWSER */
index c746ef1b6bdb76c8daa7b5bfb236f352faee8e38..21c3696969e81bd37bf9772c361687fd6fd3a971 100644 (file)
@@ -157,7 +157,7 @@ void do_filesearch(void);
 void do_fileresearch(void);
 void do_first_file(void);
 void do_last_file(void);
-void striponedir(char *path);
+char *striponedir(const char *path);
 #endif
 
 /* Public functions in chars.c. */