Stefan Beller <stefanbel...@gmail.com> writes:

> 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.




Reply via email to