diff.c: move line ending check into emit_hunk_header
authorStefan Beller <sbeller@google.com>
Fri, 30 Jun 2017 00:06:47 +0000 (17:06 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 30 Jun 2017 20:13:01 +0000 (13:13 -0700)
The emit_hunk_header() function is responsible for assembling a
hunk header and calling emit_line() to send the hunk header
to the output file. Its only caller fn_out_consume() needs
to prepare for a case where the function emits an incomplete
line and add the terminating LF.

Instead make sure emit_hunk_header() to always send a
completed line to emit_line().

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c
diff --git a/diff.c b/diff.c
index 2874dfc6fc85aebf876217078e84bed8c6db488b..94fdb57927edd269a00e9e359c1d2d98b5e3e929 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -678,6 +678,8 @@ static void emit_hunk_header(struct emit_callback *ecbdata,
        }
 
        strbuf_add(&msgbuf, line + len, org_len - len);
        }
 
        strbuf_add(&msgbuf, line + len, org_len - len);
+       strbuf_complete_line(&msgbuf);
+
        emit_line(ecbdata->opt, "", "", msgbuf.buf, msgbuf.len);
        strbuf_release(&msgbuf);
 }
        emit_line(ecbdata->opt, "", "", msgbuf.buf, msgbuf.len);
        strbuf_release(&msgbuf);
 }
@@ -1315,8 +1317,6 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
                len = sane_truncate_line(ecbdata, line, len);
                find_lno(line, ecbdata);
                emit_hunk_header(ecbdata, line, len);
                len = sane_truncate_line(ecbdata, line, len);
                find_lno(line, ecbdata);
                emit_hunk_header(ecbdata, line, len);
-               if (line[len-1] != '\n')
-                       putc('\n', o->file);
                return;
        }
 
                return;
        }