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;
}
/* 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++) {
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);
return 0;
}
- a = rfc822_parse_adrlist(a, p);
+ a = rfc822_parse_adrlist(NULL, p);
if (!a)
return 0;