mailinfo: move add_message_id and message_id to struct mailinfo
authorJunio C Hamano <gitster@pobox.com>
Mon, 19 Oct 2015 05:27:56 +0000 (22:27 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 21 Oct 2015 22:42:57 +0000 (15:42 -0700)
This requires us to pass the structure into check_header() codepath.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/mailinfo.c
index a104c5cbeb8a3c0e0f6e306cb57bc11ebc907c48..0287e932496fa19f846a0503b8110d65d5a6bca8 100644 (file)
@@ -19,12 +19,13 @@ struct mailinfo {
        struct strbuf email;
        int keep_subject;
        int keep_non_patch_brackets_in_subject;
+       int add_message_id;
 
+       char *message_id;
        int patch_lines;
        int filter_stage; /* still reading log or are we copying patch? */
        int header_stage; /* still checking in-body headers? */
 };
-static char *message_id;
 
 static enum  {
        TE_DONTCARE, TE_QP, TE_BASE64
@@ -33,7 +34,6 @@ static enum  {
 static struct strbuf charset = STRBUF_INIT;
 static struct strbuf **p_hdr_data, **s_hdr_data;
 static int use_scissors;
-static int add_message_id;
 static int use_inbody_headers = 1;
 
 #define MAX_BOUNDARIES 5
@@ -216,10 +216,10 @@ static void handle_content_type(struct strbuf *line)
        }
 }
 
-static void handle_message_id(const struct strbuf *line)
+static void handle_message_id(struct mailinfo *mi, const struct strbuf *line)
 {
-       if (add_message_id)
-               message_id = strdup(line->buf);
+       if (mi->add_message_id)
+               mi->message_id = strdup(line->buf);
 }
 
 static void handle_content_transfer_encoding(const struct strbuf *line)
@@ -476,11 +476,13 @@ static void decode_header(struct strbuf *it)
        strbuf_release(&piecebuf);
 }
 
-static int check_header(const struct strbuf *line,
-                               struct strbuf *hdr_data[], int overwrite)
+static int check_header(struct mailinfo *mi,
+                       const struct strbuf *line,
+                       struct strbuf *hdr_data[], int overwrite)
 {
        int i, ret = 0, len;
        struct strbuf sb = STRBUF_INIT;
+
        /* search for the interesting parts */
        for (i = 0; header[i]; i++) {
                int len = strlen(header[i]);
@@ -518,7 +520,7 @@ static int check_header(const struct strbuf *line,
                len = strlen("Message-Id: ");
                strbuf_add(&sb, line->buf + len, line->len - len);
                decode_header(&sb);
-               handle_message_id(&sb);
+               handle_message_id(mi, &sb);
                ret = 1;
                goto check_header_out;
        }
@@ -662,7 +664,7 @@ static int handle_commit_msg(struct mailinfo *mi, struct strbuf *line)
        }
 
        if (use_inbody_headers && mi->header_stage) {
-               mi->header_stage = check_header(line, s_hdr_data, 0);
+               mi->header_stage = check_header(mi, line, s_hdr_data, 0);
                if (mi->header_stage)
                        return 0;
        } else
@@ -696,8 +698,8 @@ static int handle_commit_msg(struct mailinfo *mi, struct strbuf *line)
        }
 
        if (patchbreak(line)) {
-               if (message_id)
-                       fprintf(cmitmsg, "Message-Id: %s\n", message_id);
+               if (mi->message_id)
+                       fprintf(cmitmsg, "Message-Id: %s\n", mi->message_id);
                fclose(cmitmsg);
                cmitmsg = NULL;
                return 1;
@@ -840,7 +842,7 @@ static int handle_boundary(struct mailinfo *mi, struct strbuf *line)
 
        /* slurp in this section's info */
        while (read_one_header_line(line, mi->input))
-               check_header(line, p_hdr_data, 0);
+               check_header(mi, line, p_hdr_data, 0);
 
        strbuf_release(&newline);
        /* replenish line */
@@ -994,7 +996,7 @@ static int mailinfo(struct mailinfo *mi, const char *msg, const char *patch)
 
        /* process the email header */
        while (read_one_header_line(&line, mi->input))
-               check_header(&line, p_hdr_data, 1);
+               check_header(mi, &line, p_hdr_data, 1);
 
        handle_body(mi, &line);
        fclose(patchfile);
@@ -1029,6 +1031,7 @@ static void clear_mailinfo(struct mailinfo *mi)
 {
        strbuf_release(&mi->name);
        strbuf_release(&mi->email);
+       free(mi->message_id);
 }
 
 static const char mailinfo_usage[] =
@@ -1054,7 +1057,7 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix)
                else if (!strcmp(argv[1], "-b"))
                        mi.keep_non_patch_brackets_in_subject = 1;
                else if (!strcmp(argv[1], "-m") || !strcmp(argv[1], "--message-id"))
-                       add_message_id = 1;
+                       mi.add_message_id = 1;
                else if (!strcmp(argv[1], "-u"))
                        metainfo_charset = def_charset;
                else if (!strcmp(argv[1], "-n"))