From 3f35b8874fb10587ce43e2853a1ef95573222015 Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Sun, 3 Dec 2006 16:41:30 +0100 Subject: [PATCH] oops, I did it again: simplify a lot of code :] Signed-off-by: Pierre Habouzit --- attach.c | 5 +- copy.c | 119 ++++++++++++++++++++++++---------------- lib-mime/mime-token.def | 3 + 3 files changed, 79 insertions(+), 48 deletions(-) diff --git a/attach.c b/attach.c index 99b1aa9..2b9fb0f 100644 --- a/attach.c +++ b/attach.c @@ -851,6 +851,7 @@ int mutt_print_attachment (FILE * fp, BODY * a) pid_t thepid; FILE *ifp, *fpout; short unlink_newfile = 0; + int tok; snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype); @@ -922,8 +923,8 @@ int mutt_print_attachment (FILE * fp, BODY * a) return (1); } - if (!ascii_strcasecmp ("text/plain", type) || - !ascii_strcasecmp ("application/postscript", type)) { + tok = mime_which_token(type, -1); + if (tok == MIME_TEXT_PLAIN || tok == MIME_APPLICATION_POSTSCRIPT) { return (mutt_pipe_attachment (fp, a, NONULL (PrintCmd), NULL)); } else if (mutt_can_decode (a)) { diff --git a/copy.c b/copy.c index 55dd192..45eba0a 100644 --- a/copy.c +++ b/copy.c @@ -76,20 +76,32 @@ mutt_copy_hdr (FILE* in, FILE* out, off_t off_start, off_t off_end, else if (buf[0] == '\n' || (buf[0] == '\r' && buf[1] == '\n')) break; /* end of header */ - if ((flags & (CH_UPDATE | CH_XMIT | CH_NOSTATUS)) && - (ascii_strncasecmp ("Status:", buf, 7) == 0 || - ascii_strncasecmp ("X-Status:", buf, 9) == 0)) - continue; - if ((flags & (CH_UPDATE_LEN | CH_XMIT | CH_NOLEN)) && - (ascii_strncasecmp ("Content-Length:", buf, 15) == 0 || - ascii_strncasecmp ("Lines:", buf, 6) == 0)) - continue; - if ((flags & CH_UPDATE_REFS) && - ascii_strncasecmp ("References:", buf, 11) == 0) - continue; - if ((flags & CH_UPDATE_IRT) && - ascii_strncasecmp ("In-Reply-To:", buf, 12) == 0) - continue; + switch (mime_which_token(buf, (strchr(buf, ':') ?: buf) - buf)) { + case MIME_STATUS: + case MIME_X_STATUS: + if (flags & (CH_UPDATE | CH_XMIT | CH_NOSTATUS)) + continue; + break; + + case MIME_CONTENT_LENGTH: + case MIME_LINES: + if (flags & (CH_UPDATE_LEN | CH_XMIT | CH_NOLEN)) + continue; + break; + + case MIME_REFERENCES: + if (flags & CH_UPDATE_REFS) + continue; + break; + + case MIME_IN_REPLY_TO: + if (flags & CH_UPDATE_IRT) + continue; + break; + + default: + break; + } ignore = 0; } @@ -162,34 +174,49 @@ mutt_copy_hdr (FILE* in, FILE* out, off_t off_start, off_t off_end, /* note: CH_FROM takes precedence over header weeding. */ if (!((flags & CH_FROM) && (flags & CH_FORCE_FROM) && this_is_from) && - (flags & CH_WEED) && - string_list_contains(Ignore, buf, "*") && - !string_list_contains(UnIgnore, buf, "*")) - continue; - if ((flags & CH_WEED_DELIVERED) && - ascii_strncasecmp ("Delivered-To:", buf, 13) == 0) - continue; - if ((flags & (CH_UPDATE | CH_XMIT | CH_NOSTATUS)) && - (ascii_strncasecmp ("Status:", buf, 7) == 0 || - ascii_strncasecmp ("X-Status:", buf, 9) == 0)) - continue; - if ((flags & (CH_UPDATE_LEN | CH_XMIT | CH_NOLEN)) && - (ascii_strncasecmp ("Content-Length:", buf, 15) == 0 || - ascii_strncasecmp ("Lines:", buf, 6) == 0)) - continue; - if ((flags & CH_MIME) && - ((ascii_strncasecmp ("content-", buf, 8) == 0 && - (ascii_strncasecmp ("transfer-encoding:", buf + 8, 18) == 0 || - ascii_strncasecmp ("type:", buf + 8, 5) == 0)) || - ascii_strncasecmp ("mime-version:", buf, 13) == 0)) - continue; - if ((flags & CH_UPDATE_REFS) && - ascii_strncasecmp ("References:", buf, 11) == 0) - continue; - if ((flags & CH_UPDATE_IRT) && - ascii_strncasecmp ("In-Reply-To:", buf, 12) == 0) + (flags & CH_WEED) && string_list_contains(Ignore, buf, "*") + && !string_list_contains(UnIgnore, buf, "*")) continue; + switch (mime_which_token(buf, (strchr(buf, ':') ?: buf) - buf)) { + case MIME_DELIVERED_TO: + if (flags & CH_WEED_DELIVERED) + continue; + break; + + case MIME_STATUS: + case MIME_X_STATUS: + if (flags & (CH_UPDATE | CH_XMIT | CH_NOSTATUS)) + continue; + break; + + case MIME_CONTENT_LENGTH: + case MIME_LINES: + if (flags & (CH_UPDATE_LEN | CH_XMIT | CH_NOLEN)) + continue; + break; + + case MIME_CONTENT_TRANSFER_ENCODING: + case MIME_CONTENT_TYPE: + case MIME_MIME_VERSION: + if (flags & CH_MIME) + continue; + break; + + case MIME_REFERENCES: + if (flags & CH_UPDATE_REFS) + continue; + break; + + case MIME_IN_REPLY_TO: + if (flags & CH_UPDATE_IRT) + continue; + break; + + default: + break; + } + /* Find x -- the array entry where this header is to be saved */ if (flags & CH_REORDER) { for (t = HeaderOrderList, x = 0; (t); t = t->next, x++) { @@ -658,12 +685,12 @@ mutt_copy_message (FILE * fpout, CONTEXT * src, HEADER * hdr, int flags, MESSAGE *msg; int r; - if ((msg = mx_open_message (src, hdr->msgno)) == NULL) + if (!(msg = mx_open_message (src, hdr->msgno))) return -1; - if ((r = - _mutt_copy_message (fpout, msg->fp, hdr, hdr->content, flags, - chflags)) == 0 && (ferror (fpout) - || feof (fpout))) { + + r = _mutt_copy_message(fpout, msg->fp, hdr, hdr->content, flags, + chflags); + if (!r && (ferror(fpout) || feof (fpout))) { r = -1; } mx_close_message (&msg); @@ -851,7 +878,7 @@ static int address_header_decode(char **h) return 0; } - a = rfc822_parse_adrlist(a, p); + a = rfc822_parse_adrlist(NULL, p); if (!a) return 0; diff --git a/lib-mime/mime-token.def b/lib-mime/mime-token.def index c995e50..5a638ba 100644 --- a/lib-mime/mime-token.def +++ b/lib-mime/mime-token.def @@ -4,6 +4,7 @@ alternative apparently-from apparently-to application +application/postscript application/pgp-encrypted application/pgp-signature application/pkcs7-signature @@ -23,6 +24,7 @@ content-transfer-encoding content-type copiousoutput date +delivered-to delivery-status digest edit @@ -79,6 +81,7 @@ supercedes supersedes test text +text/plain to unknown us-ascii -- 2.20.1