]> diplodocus.org Git - nmh/blobdiff - uip/mhlist.c
Just show relevant portion of invalid encoded string.
[nmh] / uip / mhlist.c
index f37041c38f1cb07d01b52a4595296535e3c479c7..13439c6271d4f3cb1e093165aaa4e3519d8d6764 100644 (file)
     X("norealsize", 0, NSIZESW) \
     X("verbose", 0, VERBSW) \
     X("noverbose", 0, NVERBSW) \
+    X("disposition", 0, DISPOSW) \
+    X("nodisposition", 0, NDISPOSW) \
     X("file file", 0, FILESW) \
     X("part number", 0, PARTSW) \
     X("type content", 0, TYPESW) \
+    X("prefer content", 0, PREFERSW) \
     X("rcache policy", 0, RCACHESW) \
     X("wcache policy", 0, WCACHESW) \
     X("changecur", 0, CHGSW) \
@@ -60,14 +63,16 @@ extern char *parts[NPARTS + 1];
 extern char *types[NTYPES + 1];
 extern int userrs;
 
+/* mhparse.c */
+extern char *preferred_types[];
+extern  char *preferred_subtypes[];
+extern int npreferred;
+
 /*
  * This is currently needed to keep mhparse happy.
  * This needs to be changed.
  */
-pid_t xpid  = 0;
-
 int debugsw = 0;
-int verbosw = 0;
 
 #define        quitser pipeser
 
@@ -75,13 +80,10 @@ int verbosw = 0;
 CT parse_mime (char *);
 
 /* mhmisc.c */
-int part_ok (CT, int);
+int part_ok (CT);
 int type_ok (CT, int);
 void flush_errors (void);
 
-/* mhlistsbr.c */
-void list_all_messages (CT *, int, int, int, int);
-
 /* mhfree.c */
 extern CT *cts;
 void freects_done (int) NORETURN;
@@ -95,7 +97,7 @@ static void pipeser (int);
 int
 main (int argc, char **argv)
 {
-    int sizesw = 1, headsw = 1, chgflag = 1;
+    int sizesw = 1, headsw = 1, chgflag = 1, verbosw = 0, dispo = 0;
     int msgnum, *icachesw;
     char *cp, *file = NULL, *folder = NULL;
     char *maildir, buf[100], **argp;
@@ -190,6 +192,18 @@ do_cache:
                types[ntype++] = cp;
                continue;
 
+           case PREFERSW:
+               if (!(cp = *argp++) || *cp == '-')
+                   adios (NULL, "missing argument to %s", argp[-2]);
+               if (npreferred >= NPREFS)
+                   adios (NULL, "too many preferred types (starting with %s), %d max",
+                          cp, NPREFS);
+               preferred_types[npreferred] = cp;
+               cp = strchr(cp, '/');
+               if (cp) *cp++ = '\0';
+               preferred_subtypes[npreferred++] = cp;
+               continue;
+
            case FILESW:
                if (!(cp = *argp++) || (*cp == '-' && cp[1]))
                    adios (NULL, "missing argument to %s", argp[-2]);
@@ -209,6 +223,12 @@ do_cache:
            case NVERBSW: 
                verbosw = 0;
                continue;
+           case DISPOSW:
+               dispo = 1;
+               continue;
+           case NDISPOSW:
+               dispo = 0;
+               continue;
            case DEBUGSW:
                debugsw = 1;
                continue;
@@ -246,8 +266,7 @@ do_cache:
      * check if message is coming from file
      */
     if (file) {
-       if (!(cts = (CT *) calloc ((size_t) 2, sizeof(*cts))))
-           adios (NULL, "out of memory");
+       cts = mh_xcalloc(2, sizeof *cts);
        ctp = cts;
 
        if ((ct = parse_mime (file)))
@@ -279,8 +298,7 @@ do_cache:
                done (1);
        seq_setprev (mp);       /* set the previous-sequence */
 
-       if (!(cts = (CT *) calloc ((size_t) (mp->numsel + 1), sizeof(*cts))))
-           adios (NULL, "out of memory");
+       cts = mh_xcalloc(mp->numsel + 1, sizeof *cts);
        ctp = cts;
 
        for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
@@ -319,13 +337,13 @@ do_cache:
     /*
      * List the message content
      */
-    list_all_messages (cts, headsw, sizesw, verbosw, debugsw);
+    list_all_messages (cts, headsw, sizesw, verbosw, debugsw, dispo);
 
     /* Now free all the structures for the content */
     for (ctp = cts; *ctp; ctp++)
        free_content (*ctp);
 
-    free ((char *) cts);
+    free(cts);
     cts = NULL;
 
     /* If reading from a folder, do some updating */