X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/a78fd0cd5c88c35e2611cff4d937cbe00afa47e3..ab1b16d2e7d450da5f5a1ec57dbaa1bc6517258d:/uip/mhfixmsg.c?ds=sidebyside diff --git a/uip/mhfixmsg.c b/uip/mhfixmsg.c index 7fd69f50..2a705114 100644 --- a/uip/mhfixmsg.c +++ b/uip/mhfixmsg.c @@ -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, 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, 1, 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; } @@ -1196,7 +1174,7 @@ build_multipart_alt (CT first_alt, CT new_part, int type, int subtype) { c_cefile, c_encoding, c_digested, c_digest[16], c_ctexbody, c_ctinitfnx, c_ceopenfnx, c_ceclosefnx, c_cesizefnx, - c_umask, c_pid, c_rfc934, + c_umask, c_rfc934, c_showproc, c_termproc, c_storeproc, c_storage, c_folder */ @@ -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);