nmh-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Nmh-commits] nmh ChangeLog uip/folder.c


From: Peter Maydell
Subject: [Nmh-commits] nmh ChangeLog uip/folder.c
Date: Tue, 05 Aug 2008 19:05:23 +0000

CVSROOT:        /sources/nmh
Module name:    nmh
Changes by:     Peter Maydell <pm215>   08/08/05 19:05:23

Modified files:
        .              : ChangeLog 
        uip            : folder.c 

Log message:
        Simplify dodir/addir/addfold (patch from Eric Gillespie)

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/nmh/ChangeLog?cvsroot=nmh&r1=1.283&r2=1.284
http://cvs.savannah.gnu.org/viewcvs/nmh/uip/folder.c?cvsroot=nmh&r1=1.13&r2=1.14

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/nmh/nmh/ChangeLog,v
retrieving revision 1.283
retrieving revision 1.284
diff -u -b -r1.283 -r1.284
--- ChangeLog   3 Aug 2008 18:47:56 -0000       1.283
+++ ChangeLog   5 Aug 2008 19:05:23 -0000       1.284
@@ -1,3 +1,7 @@
+2008-08-04  Eric Gillespie  <address@hidden>
+
+       * uip/folder.c: Simplify dodir/addir/addfold.
+
 2008-08-03  Peter Maydell  <address@hidden>
 
        * test/setup-test: use 'set -e' so we stop on compile failure.

Index: uip/folder.c
===================================================================
RCS file: /sources/nmh/nmh/uip/folder.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- uip/folder.c        4 Nov 2007 11:54:33 -0000       1.13
+++ uip/folder.c        5 Aug 2008 19:05:23 -0000       1.14
@@ -4,7 +4,7 @@
  *             -- push/pop a folder onto/from the folder stack
  *             -- list the folder stack
  *
- * $Id: folder.c,v 1.13 2007/11/04 11:54:33 jjr Exp $
+ * $Id: folder.c,v 1.14 2008/08/05 19:05:23 pm215 Exp $
  *
  * This code is Copyright (c) 2002, by the authors of nmh.  See the
  * COPYRIGHT file in the root directory of the nmh distribution for
@@ -419,7 +419,6 @@
     int i;
     int os = start;
     int of = foldp;
-    char buffer[BUFSIZ];
 
     start = foldp;
 
@@ -427,7 +426,7 @@
     if (chdir (nmhdir) == NOTOK)
        adios (nmhdir, "unable to change directory to");
 
-    addir (strncpy (buffer, dir, sizeof(buffer)));
+    addir (dir);
 
     for (i = start; i < foldp; i++) {
        get_folder_info (folds[i], NULL);
@@ -667,21 +666,11 @@
 addir (char *name)
 {
     int nlink;
-    char *base, *cp;
+    char *prefix, *child;
     struct stat st;
     struct dirent *dp;
     DIR * dd;
 
-    cp = name + strlen (name);
-    *cp++ = '/';
-    *cp = '\0';
-
-    /*
-     * A hack to skip over a leading
-     * "./" in folder names.
-     */
-    base = strcmp (name, "./") ? name : name + 2;
-
    /* short-cut to see if directory has any sub-directories */
     if (stat (name, &st) != -1 && st.st_nlink == 2)
         return;
@@ -691,6 +680,12 @@
        return;
     }
 
+    if (strcmp (name, ".") == 0) {
+       prefix = getcpy ("");
+    } else {
+       prefix = concat (name, "/", (void *)NULL);
+    }
+
     /*
      * Keep track of the number of directories we've seen
      * so we can quit stat'ing early, if we've seen them all.
@@ -702,22 +697,23 @@
            nlink--;
            continue;
        }
-       if (cp + NLENGTH(dp) + 2 >= name + BUFSIZ)
-           continue;
-       strcpy (cp, dp->d_name);
-       if (stat (name, &st) != -1 && S_ISDIR(st.st_mode)) {
+       child = concat (prefix, dp->d_name, (void *)NULL);
+       if (stat (child, &st) != -1 && S_ISDIR(st.st_mode)) {
            /*
             * Check if this was really a symbolic link pointing at
             * a directory.  If not, then decrement link count.
             */
-           if (lstat (name, &st) == -1)
+           if (lstat (child, &st) == -1)
                nlink--;
-           addfold (base);
+           /* addfold saves child in the list, don't free it */
+           addfold (child);
+       } else {
+           free (child);
        }
     }
 
     closedir (dd);
-    *--cp = '\0';
+    free(prefix);
 }
 
 /*
@@ -729,7 +725,6 @@
 addfold (char *fold)
 {
     register int i, j;
-    register char *cp;
 
     /* if necessary, reallocate the space for folder names */
     if (foldp >= maxfolders) {
@@ -737,17 +732,16 @@
        folds = mh_xrealloc (folds, maxfolders * sizeof(char *));
     }
 
-    cp = getcpy (fold);
     for (i = start; i < foldp; i++)
-       if (compare (cp, folds[i]) < 0) {
+       if (compare (fold, folds[i]) < 0) {
            for (j = foldp - 1; j >= i; j--)
                folds[j + 1] = folds[j];
            foldp++;
-           folds[i] = cp;
+           folds[i] = fold;
            return;
        }
 
-    folds[foldp++] = cp;
+    folds[foldp++] = fold;
 }
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]