mailinfo: do not let handle_boundary() touch global "line" directly

This function has a single caller, and called with the global "line"
holding the multi-part boundary line the caller saw while processing
the e-mail body.  The function then goes into a loop to process each
line of the input, and fills the same global "line" variable from
the input as it needs to read more lines to process the multi-part
headers.

Let the caller explicitly pass a pointer to this global "line"
variable as an argument, and have the function itself use that
strbuf throughout, instead of referring to the global "line" itself.

There still is a helper function that this function calls that still
touches the global directly; it will be updated as the series progresses.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2015-10-18 15:40:06 -07:00
parent fde00d50f6
commit 69e24defd6

View file

@ -795,14 +795,14 @@ static int find_boundary(void)
return 0; return 0;
} }
static int handle_boundary(int *filter_stage, int *header_stage) static int handle_boundary(struct strbuf *line, int *filter_stage, int *header_stage)
{ {
struct strbuf newline = STRBUF_INIT; struct strbuf newline = STRBUF_INIT;
strbuf_addch(&newline, '\n'); strbuf_addch(&newline, '\n');
again: again:
if (line.len >= (*content_top)->len + 2 && if (line->len >= (*content_top)->len + 2 &&
!memcmp(line.buf + (*content_top)->len, "--", 2)) { !memcmp(line->buf + (*content_top)->len, "--", 2)) {
/* we hit an end boundary */ /* we hit an end boundary */
/* pop the current boundary off the stack */ /* pop the current boundary off the stack */
strbuf_release(*content_top); strbuf_release(*content_top);
@ -831,14 +831,14 @@ static int handle_boundary(int *filter_stage, int *header_stage)
strbuf_reset(&charset); strbuf_reset(&charset);
/* slurp in this section's info */ /* slurp in this section's info */
while (read_one_header_line(&line, fin)) while (read_one_header_line(line, fin))
check_header(&line, p_hdr_data, 0); check_header(line, p_hdr_data, 0);
strbuf_release(&newline); strbuf_release(&newline);
/* replenish line */ /* replenish line */
if (strbuf_getline(&line, fin, '\n')) if (strbuf_getline(line, fin, '\n'))
return 0; return 0;
strbuf_addch(&line, '\n'); strbuf_addch(line, '\n');
return 1; return 1;
} }
@ -862,7 +862,7 @@ static void handle_body(struct strbuf *line)
handle_filter(&prev, &filter_stage, &header_stage); handle_filter(&prev, &filter_stage, &header_stage);
strbuf_reset(&prev); strbuf_reset(&prev);
} }
if (!handle_boundary(&filter_stage, &header_stage)) if (!handle_boundary(line, &filter_stage, &header_stage))
goto handle_body_out; goto handle_body_out;
} }