X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=copy.c;h=a52a4ebde2f581ce24b50d357ff5d863802a0d01;hp=55dd1921df560205d31eef6b853e3c731c9d0c23;hb=3438f31945bb94bc4f4b9603ac47fcde03d5c073;hpb=13ad0e21ee797ddff613aa47a448fb1b5915bf0c diff --git a/copy.c b/copy.c index 55dd192..a52a4eb 100644 --- a/copy.c +++ b/copy.c @@ -10,13 +10,13 @@ #include #include +#include #include #include "mutt.h" #include "handler.h" #include "copy.h" -#include -#include +#include "crypt.h" #include "mutt_idna.h" static int address_header_decode (char **str); @@ -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++) { @@ -334,7 +361,7 @@ mutt_copy_header (FILE * in, HEADER * h, FILE * out, int flags, fputs ("MIME-Version: 1.0\n", out); fputs ("Content-Transfer-Encoding: 8bit\n", out); fputs ("Content-Type: text/plain; charset=", out); - charset_canonicalize(chsbuf, sizeof (chsbuf), Charset); + charset_canonicalize(chsbuf, sizeof (chsbuf), mod_cset.charset); rfc822_strcpy(buffer, sizeof(buffer), chsbuf, MimeSpecials); fputs (buffer, out); fputc ('\n', out); @@ -424,7 +451,7 @@ mutt_copy_header (FILE * in, HEADER * h, FILE * out, int flags, } if (flags & CH_UPDATE_LEN && (flags & CH_NOLEN) == 0) { - fprintf (out, "Content-Length: %lld\n", h->content->length); + fprintf (out, "Content-Length: %zu\n", h->content->length); if (h->lines != 0 || h->content->length == 0) fprintf (out, "Lines: %d\n", h->lines); } @@ -528,7 +555,7 @@ _mutt_copy_message (FILE * fpout, FILE * fpin, HEADER * hdr, BODY * body, if (mutt_copy_header (fpin, hdr, fpout, chflags | CH_NOLEN | CH_NONEWLINE, NULL)) return -1; - fprintf (fpout, "Content-Length: %lld\n", new_length); + fprintf (fpout, "Content-Length: %zu\n", new_length); if (new_lines <= 0) new_lines = 0; else @@ -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); @@ -693,7 +720,7 @@ _mutt_append_message (CONTEXT * dest, FILE * fpin, CONTEXT * src __attribute__ ( return (-1); if ((msg = mx_open_new_message (dest, hdr, is_from (buf, NULL, 0, NULL) ? 0 : M_ADD_FROM)) == NULL) return (-1); - if (dest->magic == M_MBOX || dest->magic == M_MMDF) + if (dest->magic == M_MBOX) chflags |= CH_FROM | CH_FORCE_FROM; chflags |= (dest->magic == M_MAILDIR ? CH_NOSTATUS : CH_UPDATE); r = _mutt_copy_message (msg->fp, fpin, hdr, body, flags, chflags); @@ -741,7 +768,7 @@ static int copy_delete_attach (BODY * b, FILE * fpin, FILE * fpout, if (part->deleted) { fprintf (fpout, "Content-Type: message/external-body; access-type=x-mutt-deleted;\n" - "\texpiration=%s; length=%lld\n" + "\texpiration=%s; length=%zu\n" "\n", date + 5, part->length); if (ferror (fpout)) return -1; @@ -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;