git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 03/10] diff.c: drop tautologous condition in emit_line_0

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 12, 2016, 23:53 UTC
Message-ID
<xmqq1t0oy8t8.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1473572530-25764-4-git-send-email-stefanbeller@gmail.com>
Stefan Beller <stefanbeller@gmail.com> writes:
Show 14 quoted lines
> diff --git a/diff.c b/diff.c
> index 156c2aa..9d2e704 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -460,8 +460,7 @@ static void emit_line_0(struct diff_options *o, const char *set, const char *res
>  
>  	if (len == 0) {
>  		has_trailing_newline = (first == '\n');
> -		has_trailing_carriage_return = (!has_trailing_newline &&
> -						(first == '\r'));
> +		has_trailing_carriage_return = (first == '\r');
>  		nofirst = has_trailing_newline || has_trailing_carriage_return;
>  	} else {
>  		has_trailing_newline = (len > 0 && line[len-1] == '\n');
Interesting.

This may be a mis-conversion at 250f7993 ("diff.c: split emit_line() from the first char and the rest of the line", 2009-09-14), I suspect. The original took line[] with length and peeked for '\n', and when it saw one, it decremented length before checking line[len-1] for '\r'.

But of course if there is only one byte on the line (i.e. len == 0 after first is stripped off), it cannot be both '\n' or '\r' at the same time.

Thanks for spotting.
Previous: Stefan BellerNext: Stefan Beller
Message 7 of 21 in “Another preparatory series for rename detection”
  1. 00/10 Another preparatory series for rename detectionStefan Beller, Sep 11, 2016
  2. 01/10 diff: move line ending check into emit_hunk_headerStefan Beller, Sep 11, 2016
  3. Junio C HamanoSep 12, 2016
  4. 02/10 diff: emit_{add, del, context}_line to increase {pre,post}image line countStefan Beller, Sep 11, 2016
  5. Junio C HamanoSep 12, 2016
  6. 03/10 diff.c: drop tautologous condition in emit_line_0Stefan Beller, Sep 11, 2016
  7. Junio C HamanoSep 12, 2016
  8. Stefan BellerSep 16, 2016
  9. 05/10 diff.c: reintroduce diff_flush_patch for all filesStefan Beller, Sep 11, 2016
  10. Junio C HamanoSep 13, 2016
  11. 04/10 diff.c: rename diff_flush_patch to diff_flush_patch_filepairStefan Beller, Sep 11, 2016
  12. Junio C HamanoSep 12, 2016
  13. 07/10 diff.c: convert fn_out_consume to use emit_line_*Stefan Beller, Sep 11, 2016
  14. Junio C HamanoSep 13, 2016
  15. Stefan BellerSep 13, 2016
  16. 10/10 submodule.c: convert show_submodule_summary to use emit_line_fmtStefan Beller, Sep 11, 2016
  17. 09/10 diff.c: convert emit_rewrite_lines to use emit_line_0Stefan Beller, Sep 11, 2016
  18. 08/10 diff.c: convert emit_rewrite_diff to use emit_line_*Stefan Beller, Sep 11, 2016
  19. 06/10 diff.c: emit_line_0 can handle no colorStefan Beller, Sep 11, 2016
  20. Junio C HamanoSep 13, 2016
  21. Stefan BellerSep 13, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.