X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=copy.c;h=45eba0a344e3b45d7b7ef411896c5b208db9c7a2;hp=55a3f4fc165f503cd6080fe2134d19cb41413076;hb=a19e0acbcbc4a8d4238cda051ca702653450c1cb;hpb=688ac22f746f785c27ac99ac86aa85a3035a3638 diff --git a/copy.c b/copy.c index 55a3f4f..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) && - mutt_matches_ignore (buf, Ignore) && - !mutt_matches_ignore (buf, UnIgnore)) - 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); @@ -826,85 +853,42 @@ static void format_address_header (char **h, address_t * a) m_strcat(*h, buflen, "\n"); } -static int address_header_decode (char **h) +static int address_header_decode(char **h) { - char *s = *h; - int l; + address_t *a; + char *p, *s = *h; - address_t *a = NULL; + p = strchr(s, ':'); + if (!p) + return 0; - switch (tolower ((unsigned char) *s)) { - case 'r': - { - if (ascii_strncasecmp (s, "return-path:", 12) == 0) { - l = 12; - break; - } - else if (ascii_strncasecmp (s, "reply-to:", 9) == 0) { - l = 9; + switch (mime_which_token(s, p - s)) { + case MIME_RETURN_PATH: + case MIME_REPLY_TO: + case MIME_FROM: + case MIME_CC: + case MIME_BCC: + case MIME_SENDER: + case MIME_TO: + case MIME_MAIL_FOLLOWUP_TO: + p++; break; - } - return 0; - } - case 'f': - { - if (ascii_strncasecmp (s, "from:", 5)) - return 0; - l = 5; - break; - } - case 'c': - { - if (ascii_strncasecmp (s, "cc:", 3)) - return 0; - l = 3; - break; - } - case 'b': - { - if (ascii_strncasecmp (s, "bcc:", 4)) + default: return 0; - l = 4; - break; - } - case 's': - { - if (ascii_strncasecmp (s, "sender:", 7)) - return 0; - l = 7; - break; } - case 't': - { - if (ascii_strncasecmp (s, "to:", 3)) - return 0; - l = 3; - break; - } - case 'm': - { - if (ascii_strncasecmp (s, "mail-followup-to:", 17)) - return 0; - l = 17; - break; - } - default: - return 0; - } - if ((a = rfc822_parse_adrlist (a, s + l)) == NULL) - return 0; - - mutt_addrlist_to_local (a); - rfc2047_decode_adrlist (a); - - *h = p_dupstr(s, l + 1); + a = rfc822_parse_adrlist(NULL, p); + if (!a) + return 0; - format_address_header (h, a); + mutt_addrlist_to_local(a); + rfc2047_decode_adrlist(a); - address_list_wipe(&a); + *h = p_dupstr(s, p - s); + format_address_header(h, a); + address_list_wipe(&a); - p_delete(&s); - return 1; + p_delete(&s); + return 1; }