]> diplodocus.org Git - nmh/blobdiff - sbr/folder_read.c
No longer add -g or -s to LDFLAGS. autoconf handles -g. And "make
[nmh] / sbr / folder_read.c
index 8e3a3ffa7e6648cbc3c917a2fc5aef867e675214..5c52abde3a005a8a17b8b144fd674e5be0ec0100 100644 (file)
@@ -2,8 +2,6 @@
 /*
  * folder_read.c -- initialize folder structure and read folder
  *
- * $Id$
- *
  * This code is Copyright (c) 2002, by the authors of nmh.  See the
  * COPYRIGHT file in the root directory of the nmh distribution for
  * complete copyright information.
  */
 
 struct msgs *
-folder_read (char *name)
+folder_read (char *name, int lockflag)
 {
     int msgnum, prefix_len, len, *mi;
     struct msgs *mp;
-    struct stat st;
     struct dirent *dp;
     DIR *dd;
+    bvector_t *v;
+    size_t i;
 
     name = m_mailpath (name);
     if (!(dd = opendir (name))) {
@@ -39,11 +38,6 @@ folder_read (char *name)
        return NULL;
     }
 
-    if (stat (name, &st) == -1) {
-       free (name);
-       return NULL;
-    }
-
     /* Allocate the main structure for folder information */
     mp = (struct msgs *) mh_xmalloc ((size_t) sizeof(*mp));
 
@@ -56,6 +50,8 @@ folder_read (char *name)
     mp->hghsel = 0;
     mp->numsel = 0;
     mp->nummsg = 0;
+    mp->seqhandle = NULL;
+    mp->seqname = NULL;
 
     if (access (name, W_OK) == -1)
        set_readonly (mp);
@@ -76,10 +72,7 @@ folder_read (char *name)
             */
            if (mp->nummsg >= len) {
                len += NUMMSGS;
-               if (!(mi = (int *) realloc (mi,
-                       (size_t) (len * sizeof(*mi))))) {
-                   adios (NULL, "unable to allocate storage");
-               }
+               mi = (int *) mh_xrealloc (mi, (size_t) (len * sizeof(*mi)));
            }
 
            /* Check if this is the first message we've seen */
@@ -104,9 +97,6 @@ folder_read (char *name)
            switch (dp->d_name[0]) {
                case '.': 
                case ',': 
-#ifdef MHE
-               case '+': 
-#endif /* MHE */
                    continue;
 
                default: 
@@ -134,10 +124,26 @@ folder_read (char *name)
     /* for testing, allocate minimal necessary space */
     /* mp->hghoff = max (mp->hghmsg, 1); */
 
+    /*
+     * If for some reason hghoff < lowoff (like we got an integer overflow)
+     * the complain about this now.
+     */
+
+    if (mp->hghoff < mp->lowoff) {
+       adios(NULL, "Internal failure: high message limit < low message "
+             "limit; possible overflow?");
+    }
+
     /*
      * Allocate space for status of each message.
      */
-    mp->msgstats = mh_xmalloc (MSGSTATSIZE(mp, mp->lowoff, mp->hghoff));
+    mp->num_msgstats = MSGSTATNUM (mp->lowoff, mp->hghoff);
+    mp->msgstats = mh_xmalloc (MSGSTATSIZE(mp));
+    for (i = 0, v = mp->msgstats; i < mp->num_msgstats; ++i, ++v) {
+       *v = bvector_create (0);
+    }
+
+    mp->msgattrs = svector_create (0);
 
     /*
      * Clear all the flag bits for all the message
@@ -159,7 +165,7 @@ folder_read (char *name)
     /*
      * Read and initialize the sequence information.
      */
-    seq_read (mp);
+    seq_read (mp, lockflag);
 
     return mp;
 }