]> diplodocus.org Git - nmh/blobdiff - sbr/folder_read.c
Added const to filename args of cpydata(). Then added const to some
[nmh] / sbr / folder_read.c
index 170946b41ec351696a686da18bff73a2ae71869f..73ffe43172eddf6ceb4db6fa93c271816e620ac9 100644 (file)
@@ -27,7 +27,6 @@ folder_read (char *name, int lockflag)
 {
     int msgnum, prefix_len, len, *mi;
     struct msgs *mp;
 {
     int msgnum, prefix_len, len, *mi;
     struct msgs *mp;
-    struct stat st;
     struct dirent *dp;
     DIR *dd;
     bvector_t *v;
     struct dirent *dp;
     DIR *dd;
     bvector_t *v;
@@ -39,11 +38,6 @@ folder_read (char *name, int lockflag)
        return NULL;
     }
 
        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));
 
     /* Allocate the main structure for folder information */
     mp = (struct msgs *) mh_xmalloc ((size_t) sizeof(*mp));
 
@@ -130,6 +124,16 @@ folder_read (char *name, int lockflag)
     /* for testing, allocate minimal necessary space */
     /* mp->hghoff = max (mp->hghmsg, 1); */
 
     /* 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.
      */
     /*
      * Allocate space for status of each message.
      */
@@ -161,7 +165,15 @@ folder_read (char *name, int lockflag)
     /*
      * Read and initialize the sequence information.
      */
     /*
      * Read and initialize the sequence information.
      */
-    seq_read (mp, lockflag);
+    if (seq_read (mp, lockflag) == NOTOK) {
+        char seqfile[PATH_MAX];
+
+        /* Failed to lock sequence file. */
+        snprintf (seqfile, sizeof(seqfile), "%s/%s", mp->foldpath, mh_seq);
+        advise (seqfile, "failed to lock");
+
+        return NULL;
+    }
 
     return mp;
 }
 
     return mp;
 }