diff options
Diffstat (limited to 'third_party/git/t/t4256/1/patch')
-rw-r--r-- | third_party/git/t/t4256/1/patch | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/third_party/git/t/t4256/1/patch b/third_party/git/t/t4256/1/patch deleted file mode 100644 index bd0d8b025145..000000000000 --- a/third_party/git/t/t4256/1/patch +++ /dev/null @@ -1,129 +0,0 @@ -From: A <author@example.com> -Subject: [PATCH] mailinfo: support format=flowed -Message-ID: <aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa@example.com> -Date: Sat, 25 Aug 2018 22:04:50 +0200 -User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 - Thunderbird/60.0 -MIME-Version: 1.0 -Content-Type: text/plain; charset=utf-8; format=flowed -Content-Language: en-US -Content-Transfer-Encoding: 7bit - ---- - mailinfo.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 62 insertions(+), 2 deletions(-) - -diff --git a/mailinfo.c b/mailinfo.c -index 3281a37d51..b395adbdf2 100644 ---- a/mailinfo.c -+++ b/mailinfo.c -@@ -237,11 +237,22 @@ static int slurp_attr(const char *line, const char -*name, struct strbuf *attr) - return 1; - } - -+static int has_attr_value(const char *line, const char *name, const -char *value) -+{ -+ struct strbuf sb = STRBUF_INIT; -+ int rc = slurp_attr(line, name, &sb) && !strcasecmp(sb.buf, value); -+ strbuf_release(&sb); -+ return rc; -+} -+ - static void handle_content_type(struct mailinfo *mi, struct strbuf *line) - { - struct strbuf *boundary = xmalloc(sizeof(struct strbuf)); - strbuf_init(boundary, line->len); - -+ mi->format_flowed = has_attr_value(line->buf, "format=", "flowed"); -+ mi->delsp = has_attr_value(line->buf, "delsp=", "yes"); -+ - if (slurp_attr(line->buf, "boundary=", boundary)) { - strbuf_insert(boundary, 0, "--", 2); - if (++mi->content_top >= &mi->content[MAX_BOUNDARIES]) { -@@ -964,6 +975,52 @@ static int handle_boundary(struct mailinfo *mi, -struct strbuf *line) - return 1; - } - -+static void handle_filter_flowed(struct mailinfo *mi, struct strbuf *line, -+ struct strbuf *prev) -+{ -+ size_t len = line->len; -+ const char *rest; -+ -+ if (!mi->format_flowed) { -+ handle_filter(mi, line); -+ return; -+ } -+ -+ if (line->buf[len - 1] == '\n') { -+ len--; -+ if (len && line->buf[len - 1] == '\r') -+ len--; -+ } -+ -+ /* Keep signature separator as-is. */ -+ if (skip_prefix(line->buf, "-- ", &rest) && rest - line->buf == len) { -+ if (prev->len) { -+ handle_filter(mi, prev); -+ strbuf_reset(prev); -+ } -+ handle_filter(mi, line); -+ return; -+ } -+ -+ /* Unstuff space-stuffed line. */ -+ if (len && line->buf[0] == ' ') { -+ strbuf_remove(line, 0, 1); -+ len--; -+ } -+ -+ /* Save flowed line for later, but without the soft line break. */ -+ if (len && line->buf[len - 1] == ' ') { -+ strbuf_add(prev, line->buf, len - !!mi->delsp); -+ return; -+ } -+ -+ /* Prepend any previous partial lines */ -+ strbuf_insert(line, 0, prev->buf, prev->len); -+ strbuf_reset(prev); -+ -+ handle_filter(mi, line); -+} -+ - static void handle_body(struct mailinfo *mi, struct strbuf *line) - { - struct strbuf prev = STRBUF_INIT; -@@ -1012,7 +1069,7 @@ static void handle_body(struct mailinfo *mi, -struct strbuf *line) - strbuf_addbuf(&prev, sb); - break; - } -- handle_filter(mi, sb); -+ handle_filter_flowed(mi, sb, &prev); - } - /* - * The partial chunk is saved in "prev" and will be -@@ -1022,13 +1079,16 @@ static void handle_body(struct mailinfo *mi, -struct strbuf *line) - break; - } - default: -- handle_filter(mi, line); -+ handle_filter_flowed(mi, line, &prev); - } - - if (mi->input_error) - break; - } while (!strbuf_getwholeline(line, mi->input, '\n')); - -+ if (prev.len) -+ handle_filter(mi, &prev); -+ - flush_inbody_header_accum(mi); - - handle_body_out: --- -2.18.0 |