]> diplodocus.org Git - nmh/blobdiff - uip/rcvstore.c
Added check to get_file_info() in attach.c for failed fgets() call.
[nmh] / uip / rcvstore.c
index 3afe12e3dcd789f82e0f248d1f8a1a50d78fa90d..2822093e57f851e1b207f82de24512f7effa0093 100644 (file)
@@ -10,8 +10,6 @@
 #include <h/mh.h>
 #include <fcntl.h>
 #include <h/signals.h>
-#include <errno.h>
-#include <signal.h>
 #include <h/mts.h>
 
 #define RCVSTORE_SWITCHES \
@@ -51,7 +49,8 @@ main (int argc, char **argv)
     int fd, msgnum;
     size_t seqp = 0;
     char *cp, *maildir, *folder = NULL, buf[BUFSIZ];
-    char **argp, **arguments, *seqs[NUMATTRS+1];
+    char **argp, **arguments;
+    svector_t seqs = svector_create (0);
     struct msgs *mp;
     struct stat st;
 
@@ -92,10 +91,8 @@ main (int argc, char **argv)
                if (!(cp = *argp++) || *cp == '-')
                    adios (NULL, "missing argument name to %s", argp[-2]);
 
-               /* check if too many sequences specified */
-               if (seqp >= NUMATTRS)
-                   adios (NULL, "too many sequences (more than %d) specified", NUMATTRS);
-               seqs[seqp++] = cp;
+               svector_push_back (seqs, cp);
+               seqp++;
                continue;
 
            case UNSEENSW:
@@ -137,8 +134,6 @@ main (int argc, char **argv)
        }
     }
 
-    seqs[seqp] = NULL; /* NULL terminate list of sequences */
-
     if (!context_find ("path"))
        free (path ("./", TFOLDER));
 
@@ -193,7 +188,7 @@ main (int argc, char **argv)
     /*
      * read folder and create message structure
      */
-    if (!(mp = folder_read (folder)))
+    if (!(mp = folder_read (folder, 1)))
        adios (NULL, "unable to read folder %s", folder);
 
     /*
@@ -207,11 +202,17 @@ main (int argc, char **argv)
      * Add the message to any extra sequences
      * that have been specified.
      */
-    for (seqp = 0; seqs[seqp]; seqp++) {
-       if (!seq_addmsg (mp, seqs[seqp], msgnum, publicsw, zerosw))
-           done (1);
+    if (seqp) {
+       /* The only reason that seqp was checked to be non-zero is in
+          case a -nosequence switch is added. */
+       for (seqp = 0; seqp < svector_size (seqs); seqp++) {
+           if (!seq_addmsg (mp, svector_at (seqs, seqp), msgnum, publicsw,
+                            zerosw))
+               done (1);
+       }
     }
 
+    svector_free (seqs);
     seq_setunseen (mp, 0);     /* synchronize any Unseen-Sequence's      */
     seq_save (mp);             /* synchronize and save message sequences */
     folder_free (mp);          /* free folder/message structure          */