#include <lib-lib/lib-lib.h>
#include <lib-mime/mime.h>
+#include <lib-ui/lib-ui.h>
#include <lib-mx/mx.h>
#include "mutt.h"
#include "handler.h"
#include "copy.h"
-#include <lib-crypt/crypt.h>
-#include <lib-ui/curses.h>
+#include "crypt.h"
#include "mutt_idna.h"
static int address_header_decode (char **str);
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;
}
if (!ignore && fputs (buf, out) == EOF)
- return (-1);
+ return -1;
}
return 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++) {
p_delete(&headers[x]);
p_delete(&headers);
- if (error)
- return (-1);
- return (0);
+ return error ? -1 : 0;
}
/* flags
if (mutt_copy_hdr (in, out, h->offset, h->content->offset, flags, prefix) ==
-1)
- return (-1);
+ return -1;
if (flags & CH_TXTPLAIN) {
char chsbuf[STRING];
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);
string_list_t *listp = h->env->in_reply_to;
if (fputs ("In-Reply-To: ", out) == EOF)
- return (-1);
+ return -1;
for (; listp; listp = listp->next)
if ((fputs (listp->data, out) == EOF) || (fputc (' ', out) == EOF))
- return (-1);
+ return -1;
if (fputc ('\n', out) == EOF)
- return (-1);
+ return -1;
}
if (h->env->refs_changed && h->env->references) {
string_list_t *listp = h->env->references, *refs = NULL, *t;
if (fputs ("References: ", out) == EOF)
- return (-1);
+ return -1;
/* Mutt stores references in reverse order, thus we create
* a reordered refs list that we can put in the headers */
for (; refs; refs = refs->next)
if ((fputs (refs->data, out) == EOF) || (fputc (' ', out) == EOF))
- return (-1);
+ return -1;
/* clearing refs from memory */
for (t = refs; refs; refs = t->next, t = refs)
p_delete(&refs);
if (fputc ('\n', out) == EOF)
- return (-1);
+ return -1;
}
if (h->old || h->read) {
if (fputs ("Status: ", out) == EOF)
- return (-1);
+ return -1;
if (h->read) {
if (fputs ("RO", out) == EOF)
- return (-1);
+ return -1;
}
else if (h->old) {
if (fputc ('O', out) == EOF)
- return (-1);
+ return -1;
}
if (fputc ('\n', out) == EOF)
- return (-1);
+ return -1;
}
if (h->flagged || h->replied) {
if (fputs ("X-Status: ", out) == EOF)
- return (-1);
+ return -1;
if (h->replied) {
if (fputc ('A', out) == EOF)
- return (-1);
+ return -1;
}
if (h->flagged) {
if (fputc ('F', out) == EOF)
- return (-1);
+ return -1;
}
if (fputc ('\n', out) == EOF)
- return (-1);
+ return -1;
}
}
}
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);
}
if (flags & CH_PREFIX)
fputs (prefix, out);
if (fputc ('\n', out) == EOF) /* add header terminator */
- return (-1);
+ return -1;
}
if (ferror (out) || feof (out))
return -1;
- return (0);
+ return 0;
}
/* Count the number of lines and bytes to be deleted in this 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
if ((flags & M_CM_DECODE_PGP) && (hdr->security & APPLICATION_PGP) &&
hdr->content->type == TYPEMULTIPART) {
if (crypt_pgp_decrypt_mime (fpin, &fp, hdr->content, &cur))
- return (-1);
+ return -1;
fputs ("MIME-Version: 1.0\n", fpout);
}
if ((flags & M_CM_DECODE_SMIME) && (hdr->security & APPLICATION_SMIME)
&& hdr->content->type == TYPEAPPLICATION) {
if (crypt_smime_decrypt_mime (fpin, &fp, hdr->content, &cur))
- return (-1);
+ return -1;
}
mutt_write_mime_header (cur, fpout);
if (mutt_copy_bytes (fp, fpout, cur->length) == -1) {
m_fclose(&fp);
body_list_wipe(&cur);
- return (-1);
+ return -1;
}
body_list_wipe(&cur);
m_fclose(&fp);
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);
fseeko(fpin, hdr->offset, 0);
if (fgets (buf, sizeof (buf), fpin) == NULL)
- return (-1);
+ 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)
+ return -1;
+ 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);
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;
return 0;
}
- a = rfc822_parse_adrlist(a, p);
+ a = rfc822_parse_adrlist(NULL, p);
if (!a)
return 0;