* patch #3967: Create a mh_xrealloc function to prevent mistakes when
[mmh] / uip / pick.c
index 72d97d6..8cdfa58 100644 (file)
@@ -3,11 +3,16 @@
  * pick.c -- search for messages by content
  *
  * $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.
  */
 
 #include <h/mh.h>
 #include <h/tws.h>
 #include <h/picksbr.h>
+#include <h/utils.h>
 
 /*
  * We allocate space for messages (msgs array)
@@ -68,7 +73,7 @@ static struct swit switches[] = {
     { NULL, 0 }
 };
 
-static int listsw = 0;
+static int listsw = -1;
 
 
 int
@@ -99,8 +104,7 @@ main (int argc, char **argv)
      */
     nummsgs = 0;
     maxmsgs = MAXMSGS;
-    if (!(msgs = (char **) malloc ((size_t) (maxmsgs * sizeof(*msgs)))))
-       adios (NULL, "unable to allocate storage");
+    msgs = (char **) mh_xmalloc ((size_t) (maxmsgs * sizeof(*msgs)));
 
     while ((cp = *argp++)) {
        if (*cp == '-') {
@@ -111,6 +115,7 @@ main (int argc, char **argv)
            switch (smatch (cp, switches)) {
            case AMBIGSW: 
                ambigsw (cp, switches);
+               listsw = 0;     /* HACK */
                done (1);
            case UNKWNSW: 
                adios (NULL, "-%s unknown", cp);
@@ -123,6 +128,7 @@ main (int argc, char **argv)
                done (1);
            case VERSIONSW:
                print_version(invo_name);
+               listsw = 0;     /* HACK */
                done (1);
 
            case CCSW: 
@@ -159,7 +165,6 @@ main (int argc, char **argv)
                if (seqp >= NUMATTRS)
                    adios (NULL, "too many sequences (more than %d) specified", NUMATTRS);
                seqs[seqp++] = cp;
-               listsw = 0;
                continue;
            case PUBLSW: 
                publicsw = 1;
@@ -175,7 +180,7 @@ main (int argc, char **argv)
                continue;
 
            case LISTSW: 
-               listsw++;
+               listsw = 1;
                continue;
            case NLISTSW: 
                listsw = 0;
@@ -194,9 +199,8 @@ main (int argc, char **argv)
             */
            if (nummsgs >= maxmsgs) {
                maxmsgs += MAXMSGS;
-               if (!(msgs = (char **) realloc (msgs,
-                                               (size_t) (maxmsgs * sizeof(*msgs)))))
-                   adios (NULL, "unable to reallocate msgs storage");
+               msgs = (char **) mh_xrealloc (msgs,
+                   (size_t) (maxmsgs * sizeof(*msgs)));
            }
            msgs[nummsgs++] = cp;
        }
@@ -236,10 +240,10 @@ main (int argc, char **argv)
 
     /*
      * If we aren't saving the results to a sequence,
-     * we need to list the results.
+     * we default to list the results.
      */
-    if (seqp == 0)
-       listsw++;
+    if (listsw == -1)
+       listsw = !seqp;
 
     if (publicsw == 1 && is_readonly(mp))
        adios (NULL, "folder %s is read-only, so -public not allowed", folder);