less: allow use of last column of terminal

When read_lines tests whether a character will fit on the current
line it checks the *next* character but in case of overflow doesn't
display the *current* one.  This results in the last column of the
terminal never being used.

The test in re_wrap (used when the terminal width changes or line
numbers are enabled/disabled) is different:  it does allow the use
of the final column.

function                                             old     new   delta
read_lines                                           764     770      +6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 6/0)                 Total: 6 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Ron Yorston 2015-07-24 14:29:45 +01:00 committed by Denys Vlasenko
parent d542d183e1
commit 1ecb996fd2

View File

@ -512,16 +512,6 @@ static void read_lines(void)
*--p = '\0';
continue;
}
{
size_t new_last_line_pos = last_line_pos + 1;
if (c == '\t') {
new_last_line_pos += 7;
new_last_line_pos &= (~7);
}
if ((int)new_last_line_pos >= w)
break;
last_line_pos = new_last_line_pos;
}
/* ok, we will eat this char */
readpos++;
if (c == '\n') {
@ -533,6 +523,16 @@ static void read_lines(void)
if (c == '\0') c = '\n';
*p++ = c;
*p = '\0';
{
size_t new_last_line_pos = last_line_pos + 1;
if (c == '\t') {
new_last_line_pos += 7;
new_last_line_pos &= (~7);
}
if ((int)new_last_line_pos >= w)
break;
last_line_pos = new_last_line_pos;
}
} /* end of "read chars until we have a line" loop */
#if 0
//BUG: also triggers on this: