mailinfo: move transfer_encoding to struct mailinfo

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2015-10-14 16:16:05 -07:00
parent 28c6bfe94c
commit ab50e38b5d

View file

@ -23,14 +23,14 @@ struct mailinfo {
const char *metainfo_charset; const char *metainfo_charset;
char *message_id; char *message_id;
enum {
TE_DONTCARE, TE_QP, TE_BASE64
} transfer_encoding;
int patch_lines; int patch_lines;
int filter_stage; /* still reading log or are we copying patch? */ int filter_stage; /* still reading log or are we copying patch? */
int header_stage; /* still checking in-body headers? */ int header_stage; /* still checking in-body headers? */
}; };
static enum {
TE_DONTCARE, TE_QP, TE_BASE64
} transfer_encoding;
static struct strbuf charset = STRBUF_INIT; static struct strbuf charset = STRBUF_INIT;
static struct strbuf **p_hdr_data, **s_hdr_data; static struct strbuf **p_hdr_data, **s_hdr_data;
@ -221,14 +221,15 @@ static void handle_message_id(struct mailinfo *mi, const struct strbuf *line)
mi->message_id = strdup(line->buf); mi->message_id = strdup(line->buf);
} }
static void handle_content_transfer_encoding(const struct strbuf *line) static void handle_content_transfer_encoding(struct mailinfo *mi,
const struct strbuf *line)
{ {
if (strcasestr(line->buf, "base64")) if (strcasestr(line->buf, "base64"))
transfer_encoding = TE_BASE64; mi->transfer_encoding = TE_BASE64;
else if (strcasestr(line->buf, "quoted-printable")) else if (strcasestr(line->buf, "quoted-printable"))
transfer_encoding = TE_QP; mi->transfer_encoding = TE_QP;
else else
transfer_encoding = TE_DONTCARE; mi->transfer_encoding = TE_DONTCARE;
} }
static int is_multipart_boundary(const struct strbuf *line) static int is_multipart_boundary(const struct strbuf *line)
@ -511,7 +512,7 @@ static int check_header(struct mailinfo *mi,
len = strlen("Content-Transfer-Encoding: "); len = strlen("Content-Transfer-Encoding: ");
strbuf_add(&sb, line->buf + len, line->len - len); strbuf_add(&sb, line->buf + len, line->len - len);
decode_header(mi, &sb); decode_header(mi, &sb);
handle_content_transfer_encoding(&sb); handle_content_transfer_encoding(mi, &sb);
ret = 1; ret = 1;
goto check_header_out; goto check_header_out;
} }
@ -544,11 +545,11 @@ static int check_header(struct mailinfo *mi,
return ret; return ret;
} }
static void decode_transfer_encoding(struct strbuf *line) static void decode_transfer_encoding(struct mailinfo *mi, struct strbuf *line)
{ {
struct strbuf *ret; struct strbuf *ret;
switch (transfer_encoding) { switch (mi->transfer_encoding) {
case TE_QP: case TE_QP:
ret = decode_q_segment(line, 0); ret = decode_q_segment(line, 0);
break; break;
@ -835,7 +836,7 @@ static int handle_boundary(struct mailinfo *mi, struct strbuf *line)
} }
/* set some defaults */ /* set some defaults */
transfer_encoding = TE_DONTCARE; mi->transfer_encoding = TE_DONTCARE;
strbuf_reset(&charset); strbuf_reset(&charset);
/* slurp in this section's info */ /* slurp in this section's info */
@ -873,9 +874,9 @@ static void handle_body(struct mailinfo *mi, struct strbuf *line)
} }
/* Unwrap transfer encoding */ /* Unwrap transfer encoding */
decode_transfer_encoding(line); decode_transfer_encoding(mi, line);
switch (transfer_encoding) { switch (mi->transfer_encoding) {
case TE_BASE64: case TE_BASE64:
case TE_QP: case TE_QP:
{ {