* patch #3967: Create a mh_xrealloc function to prevent mistakes when
[mmh] / uip / flist.c
index bced89f..758d308 100644 (file)
@@ -17,6 +17,7 @@
  */
 
 #include <h/mh.h>
+#include <h/utils.h>
 
 #define FALSE   0
 #define TRUE    1
@@ -58,7 +59,7 @@ static struct swit switches[] = {
 #define VERSIONSW      13
     { "version", 0 },
 #define HELPSW          14
-    { "help", 4 },
+    { "help", 0 },
     { NULL, 0 }
 };
 
@@ -148,8 +149,7 @@ main(int argc, char **argv)
     /* allocate the initial space to record the folder names */
     numfolders = 0;
     maxfolders = MAXFOLDERS;
-    if (!(foldersToDo = (char **) malloc ((size_t) (maxfolders * sizeof(*foldersToDo)))))
-       adios (NULL, "unable to allocate folder storage");
+    foldersToDo = (char **) mh_xmalloc ((size_t) (maxfolders * sizeof(*foldersToDo)));
 
     /* no sequences yet */
     numsequences = 0;
@@ -228,9 +228,8 @@ main(int argc, char **argv)
             */
            if (numfolders >= maxfolders) {
                maxfolders += MAXFOLDERS;
-               if (!(foldersToDo = (char **) realloc (foldersToDo,
-                       (size_t) (maxfolders * sizeof(*foldersToDo)))))
-                   adios (NULL, "unable to reallocate folder name storage");
+               foldersToDo = (char **) mh_xrealloc (foldersToDo,
+                   (size_t) (maxfolders * sizeof(*foldersToDo)));
            }
            if (*cp == '+' || *cp == '@') {
                foldersToDo[numfolders++] =
@@ -278,7 +277,7 @@ main(int argc, char **argv)
     ScanFolders();
     qsort(folders, nFolders, sizeof(struct Folder), (qsort_comp) CompareFolders);
     PrintFolders();
-    done (0);
+    return done (0);
 }
 
 /*
@@ -306,7 +305,7 @@ GetFolderOrder(void)
            AllocFolders(&orders, &nOrdersAlloced, nOrders + 1);
            o = &orders[nOrders++];
            o->priority = priority++;
-           o->name = (char *) malloc(p - s + 1);
+           o->name = (char *) mh_xmalloc(p - s + 1);
            strncpy(o->name, s, p - s);
            o->name[p - s] = 0;
        } else
@@ -401,7 +400,7 @@ BuildFolderList(char *dirName, int searchdepth)
 void
 BuildFolderListRecurse(char *dirName, struct stat *s, int searchdepth)
 {
-    char *base, name[PATH_MAX];
+    char *base, *n, name[PATH_MAX];
     int nlinks;
     DIR *dir;
     struct dirent *dp;
@@ -432,6 +431,12 @@ BuildFolderListRecurse(char *dirName, struct stat *s, int searchdepth)
        }
        if (dp->d_name[0] == '.')
            continue;
+       /* Check to see if the name of the file is a number
+        * if it is, we assume it's a mail file and skip it
+        */
+       for (n = dp->d_name; *n && isdigit(*n); n++);
+       if (!*n)
+           continue;
        strncpy (name, base, sizeof(name) - 2);
        if (*base)
            strcat(name, "/");
@@ -646,10 +651,10 @@ AllocFolders(struct Folder **f, int *nfa, int n)
        return;
     if (*f == NULL) {
        *nfa = 10;
-       *f = (struct Folder *) malloc (*nfa * (sizeof(struct Folder)));
+       *f = (struct Folder *) mh_xmalloc (*nfa * (sizeof(struct Folder)));
     } else {
        *nfa *= 2;
-       *f = (struct Folder *) realloc (*f, *nfa * (sizeof(struct Folder)));
+       *f = (struct Folder *) mh_xrealloc (*f, *nfa * (sizeof(struct Folder)));
     }
 }
 
@@ -697,10 +702,6 @@ do_readonly_folders (void)
     char atrcur[BUFSIZ];
     register struct node *np;
 
-    /* sanity check - check that context has been read */
-    if (defpath == NULL)
-       adios (NULL, "oops, context hasn't been read yet");
-
     snprintf (atrcur, sizeof(atrcur), "atr-%s-", current);
     atrlen = strlen (atrcur);