]> diplodocus.org Git - nmh/blobdiff - uip/mhfixmsg.c
Add missing variable initializations on fmt_scan().
[nmh] / uip / mhfixmsg.c
index 97cbab07905f32998e392a2a3830474451cae134..2a705114e0fe8cb95e3e5db7c31ec457c3f47d82 100644 (file)
@@ -53,15 +53,11 @@ int debugsw; /* Needed by mhparse.c. */
 extern int skip_mp_cte_check;                 /* flag to InitMultiPart */
 extern int suppress_bogus_mp_content_warning; /* flag to InitMultiPart */
 extern int bogus_mp_content;                  /* flag from InitMultiPart */
-CT parse_mime (char *);
 void reverse_parts (CT);
 
 /* mhoutsbr.c */
 int output_message (CT, char *);
 
-/* mhshowsbr.c */
-int show_content_aux (CT, int, char *, char *);
-
 /* mhmisc.c */
 void flush_errors (void);
 
@@ -105,7 +101,7 @@ static int strip_crs (CT, int *);
 static int convert_charsets (CT, char *, int *);
 static int write_content (CT, char *, char *, int, int);
 static int remove_file (char *);
-static void report (char *, char *, char *, ...);
+static void report (char *, char *, char *, char *, ...);
 static void pipeser (int);
 
 
@@ -516,7 +512,7 @@ fix_boundary (CT *ct, int *message_mods) {
 
                             ++*message_mods;
                             if (verbosw) {
-                                report (NULL, filename,
+                                report (NULL, NULL, filename,
                                         "fix multipart boundary");
                             }
                         }
@@ -759,7 +755,7 @@ fix_multipart_cte (CT ct, int *message_mods) {
                     ++*message_mods;
                     if (verbosw) {
                         char *encoding = cpytrim (hf->value);
-                        report (ct->c_partno, ct->c_file,
+                        report (NULL, ct->c_partno, ct->c_file,
                                 "replace Content-Transfer-Encoding of %s "
                                 "with 8 bit", encoding);
                         free (encoding);
@@ -873,7 +869,7 @@ ensure_text_plain (CT *ct, CT parent, int *message_mods, int replacetextplain) {
                             prev->mp_next = part->mp_next;
                         }
                         if (verbosw) {
-                            report (parent->c_partno, parent->c_file,
+                            report (NULL, parent->c_partno, parent->c_file,
                                     "remove text/plain part %s",
                                     old_part->mp_part->c_partno);
                         }
@@ -904,7 +900,7 @@ ensure_text_plain (CT *ct, CT parent, int *message_mods, int replacetextplain) {
 
                     ++*message_mods;
                     if (verbosw) {
-                        report (parent->c_partno, parent->c_file,
+                        report (NULL, parent->c_partno, parent->c_file,
                                 "insert text/plain part");
                     }
                 } else {
@@ -931,7 +927,7 @@ ensure_text_plain (CT *ct, CT parent, int *message_mods, int replacetextplain) {
 
                         ++*message_mods;
                         if (verbosw) {
-                            report ((*ct)->c_partno, (*ct)->c_file,
+                            report (NULL, (*ct)->c_partno, (*ct)->c_file,
                                     "insert text/plain part");
                         }
                     } else {
@@ -1095,40 +1091,25 @@ reformat_part (CT ct, char *file, char *type, char *subtype, int c_type) {
        Could show_multi() in mhshowsbr.c avoid this? */
 
     /* Check for invo_name-format-type/subtype. */
-    cp = concat (invo_name, "-format-", type, "/", subtype, NULL);
-    if ((cf = context_find (cp))  &&  *cf != '\0') {
+    if ((cf = context_find_by_type ("format", type, subtype)) == NULL) {
+        if (verbosw) {
+            advise (NULL, "Don't know how to convert %s, there is no "
+                    "%s-format-%s/%s profile entry",
+                    ct->c_file, invo_name, type, subtype);
+        }
+        return NOTOK;
+    } else {
         if (strchr (cf, '>')) {
-            free (cp);
             advise (NULL, "'>' prohibited in \"%s\",\nplease fix your "
                     "%s-format-%s/%s profile entry", cf, invo_name, type,
-                    subtype);
-            return NOTOK;
-        }
-    } else {
-        free (cp);
-
-        /* Check for invo_name-format-type. */
-        cp = concat (invo_name, "-format-", type, NULL);
-        if (! (cf = context_find (cp))  ||  *cf == '\0') {
-            free (cp);
-            if (verbosw) {
-                advise (NULL, "Don't know how to convert %s, there is no "
-                        "%s-format-%s/%s profile entry",
-                        ct->c_file, invo_name, type, subtype);
-            }
-            return NOTOK;
-        }
+                    subtype ? subtype : "");
 
-        if (strchr (cf, '>')) {
-            free (cp);
-            advise (NULL, "'>' prohibited in \"%s\"", cf);
             return NOTOK;
         }
     }
-    free (cp);
 
     cp = concat (cf, " >", file, NULL);
-    status = show_content_aux (ct, 0, cp, NULL);
+    status = show_content_aux (ct, 0, cp, NULL, NULL);
     free (cp);
 
     /* Unlink decoded content tmp file and free its filename to avoid
@@ -1163,12 +1144,9 @@ reformat_part (CT ct, char *file, char *type, char *subtype, int c_type) {
 /* Identifies 7bit or 8bit content based on charset. */
 static int
 charset_encoding (CT ct) {
-    /* norm_charmap() is case sensitive. */
-    char *charset = upcase (content_charset (ct));
     int encoding =
-        strcmp (norm_charmap (charset), "US-ASCII")  ?  CE_8BIT  :  CE_7BIT;
+        strcasecmp (content_charset (ct), "US-ASCII")  ?  CE_8BIT  :  CE_7BIT;
 
-    free (charset);
     return encoding;
 }
 
@@ -1446,7 +1424,7 @@ decode_text_parts (CT ct, int encoding, int *message_mods) {
                     /* The decoding isn't acceptable so discard it.
                        Leave status as OK to allow other transformations. */
                     if (verbosw) {
-                        report (ct->c_partno, ct->c_file,
+                        report (NULL, ct->c_partno, ct->c_file,
                                 "will not decode%s because it is binary (%s)",
                                 ct->c_partno  ?  ""
                                               :  ct->c_ctline  ?  ct->c_ctline
@@ -1461,7 +1439,7 @@ decode_text_parts (CT ct, int encoding, int *message_mods) {
                     /* The decoding isn't acceptable so discard it.
                        Leave status as OK to allow other transformations. */
                     if (verbosw) {
-                        report (ct->c_partno, ct->c_file,
+                        report (NULL, ct->c_partno, ct->c_file,
                                 "will not decode%s because it is 8bit",
                                 ct->c_partno  ?  ""
                                               :  ct->c_ctline  ?  ct->c_ctline
@@ -1481,7 +1459,7 @@ decode_text_parts (CT ct, int encoding, int *message_mods) {
                     if (set_ce (ct, enc) == OK) {
                         ++*message_mods;
                         if (verbosw) {
-                            report (ct->c_partno, ct->c_file, "decode%s",
+                            report (NULL, ct->c_partno, ct->c_file, "decode%s",
                                     ct->c_ctline ? ct->c_ctline : "");
                         }
                         strip_crs (ct, message_mods);
@@ -1594,8 +1572,7 @@ content_encoding (CT ct, const char **reason) {
 
 static int
 strip_crs (CT ct, int *message_mods) {
-    /* norm_charmap() is case sensitive. */
-    char *charset = upcase (content_charset (ct));
+    char *charset = content_charset (ct);
     int status = OK;
 
     /* Only strip carriage returns if content is ASCII or another
@@ -1603,10 +1580,10 @@ strip_crs (CT ct, int *message_mods) {
        LF.  We can include UTF-8 here because if the high-order bit of
        a UTF-8 byte is 0, then it must be a single-byte ASCII
        character. */
-    if (! strcmp (norm_charmap (charset), "US-ASCII")  ||
-        ! strncmp (norm_charmap (charset), "ISO-8859-", 9)  ||
-        ! strncmp (norm_charmap (charset), "UTF-8", 5)  ||
-        ! strncmp (norm_charmap (charset), "WINDOWS-12", 10)) {
+    if (! strcasecmp (charset, "US-ASCII")  ||
+        ! strcasecmp (charset, "UTF-8")  ||
+        ! strncasecmp (charset, "ISO-8859-", 9)  ||
+        ! strncasecmp (charset, "WINDOWS-12", 10)) {
         char **file = NULL;
         FILE **fp = NULL;
         size_t begin;
@@ -1716,7 +1693,7 @@ strip_crs (CT ct, int *message_mods) {
 
                     ++*message_mods;
                     if (verbosw) {
-                        report (ct->c_partno,
+                        report (NULL, ct->c_partno,
                                 begin == 0 && end == 0  ?  ""  :  *file,
                                 "stripped CRs");
                     }
@@ -1730,7 +1707,6 @@ strip_crs (CT ct, int *message_mods) {
         }
     }
 
-    free (charset);
     return status;
 }
 
@@ -1743,9 +1719,16 @@ convert_charsets (CT ct, char *dest_charset, int *message_mods) {
     case CT_TEXT:
         if (ct->c_subtype == TEXT_PLAIN) {
             status = convert_charset (ct, dest_charset, message_mods);
-            if (verbosw  &&  status == OK) {
-               report (ct->c_partno, ct->c_file, "convert %s to %s",
-                       content_charset(ct), dest_charset);
+            if (status == OK) {
+                if (verbosw) {
+                    report (NULL, ct->c_partno, ct->c_file,
+                            "convert %s to %s",
+                            content_charset(ct), dest_charset);
+                }
+            } else {
+                report ("iconv", ct->c_partno, ct->c_file,
+                        "failed to convert %s to %s",
+                        content_charset(ct), dest_charset);
             }
         }
         break;
@@ -1877,7 +1860,7 @@ remove_file (char *file) {
 
 
 static void
-report (char *partno, char *filename, char *message, ...) {
+report (char *what, char *partno, char *filename, char *message, ...) {
     va_list args;
     char *fmt;
 
@@ -1886,7 +1869,7 @@ report (char *partno, char *filename, char *message, ...) {
         fmt = concat (filename, partno ? " part " : ", ",
                       partno ? partno : "", partno ? ", " : "", message, NULL);
 
-        advertise (NULL, NULL, fmt, args);
+        advertise (what, NULL, fmt, args);
 
         free (fmt);
         va_end (args);