]> diplodocus.org Git - nmh/blobdiff - uip/mhmisc.c
m_getfld: Shuffle `delim' assignments slightly.
[nmh] / uip / mhmisc.c
index f4b89168f7f1cbc314a819a7390006cca14239c5..0f466c42273904795a54eae0b05181dae18a7817 100644 (file)
@@ -30,26 +30,54 @@ static char *errs = NULL;
 /*
  * prototypes
  */
-int part_ok (CT, int);
+int part_ok (CT);
+int part_exact(CT ct);
 int type_ok (CT, int);
 void content_error (char *, CT, char *, ...);
 void flush_errors (void);
 
 
 int
-part_ok (CT ct, int sP)
+part_ok (CT ct)
 {
     char **ap;
     int len;
 
-    if (npart == 0 || (ct->c_type == CT_MULTIPART && (sP || ct->c_subtype)))
+    /* a part is "ok", i.e., should be processed, if:
+       - there were no -part arguments
+       - this part is a multipart
+     */
+    if (npart == 0 || ct->c_type == CT_MULTIPART) {
        return 1;
+    }
 
+    /* or if:
+       - this part is a an exact match for any -part option
+       - this part is a sub-part of any -part option
+     */
     for (ap = parts; *ap; ap++) {
         len = strlen(*ap);
         if (!strncmp (*ap, ct->c_partno, len) &&
-                (!ct->c_partno[len] || ct->c_partno[len] == '.' ))
+                (!ct->c_partno[len] || ct->c_partno[len] == '.' )) {
+            return 1;
+       }
+    }
+
+    return 0;
+}
+
+int
+part_exact(CT ct)
+{
+    char **ap;
+
+    if (!ct->c_partno)
+       return 0;
+
+    for (ap = parts; *ap; ap++) {
+        if (!strcmp (*ap, ct->c_partno)) {
             return 1;
+       }
     }
 
     return 0;
@@ -94,8 +122,7 @@ is_inline(CT ct)
 
     if (! ct->c_dispo_type || strcasecmp(ct->c_dispo_type, "inline") == 0)
        return 1;
-    else
-       return 0;
+    return 0;
 }
 
 int
@@ -118,7 +145,7 @@ losing_directory:
            }
 
            ep = concat ("Create directory \"", file, "\"? ", NULL);
-           answer = getanswer (ep);
+           answer = read_yes_or_no_if_tty (ep);
            free (ep);
 
            if (!answer)
@@ -233,7 +260,7 @@ flush_errors (void)
 {
     if (errs) {
        fflush (stdout);
-       fprintf (stderr, "%s", errs);
+       fputs(errs, stderr);
        free (errs);
        errs = NULL;
     }