Applied, thanks!
On Sat, Jul 18, 2015 at 5:20 PM, Ron Yorston <[email protected]> wrote: > Line numbers are displayed incorrectly on lines that have a search > pattern highlighted. The problem can be fixed by moving the call to > lineno_str in print_found above the while loop that alters the value > of the line pointer. However, a more substantial rewrite results in > savings. > > function old new delta > buffer_print 688 697 +9 > .rodata 156077 156045 -32 > lineno_str 85 - -85 > ------------------------------------------------------------------------------ > (add/remove: 0/1 grow/shrink: 1/1 up/down: 9/-117) Total: -108 bytes > > Signed-off-by: Ron Yorston <[email protected]> > --- > miscutils/less.c | 35 +++++++++++------------------------ > 1 file changed, 11 insertions(+), 24 deletions(-) > > diff --git a/miscutils/less.c b/miscutils/less.c > index d5a68d1..87cff40 100644 > --- a/miscutils/less.c > +++ b/miscutils/less.c > @@ -665,27 +665,21 @@ static const char ctrlconv[] ALIGN1 = > "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x40\x4b\x4c\x4d\x4e\x4f" > "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"; > > -static void lineno_str(char *nbuf9, const char *line) > +static void print_lineno(const char *line) > { > - nbuf9[0] = '\0'; > - if (option_mask32 & FLAG_N) { > - const char *fmt; > - unsigned n; > - > - if (line == empty_line_marker) { > - memset(nbuf9, ' ', 8); > - nbuf9[8] = '\0'; > - return; > - } > + const char *fmt = " "; > + unsigned n = n; /* for compiler */ > + > + if (line != empty_line_marker) { > /* Width of 7 preserves tab spacing in the text */ > fmt = "%7u "; > n = LINENO(line) + 1; > - if (n > 9999999) { > + if (n > 9999999 && MAXLINES > 9999999) { > n %= 10000000; > fmt = "%07u "; > } > - sprintf(nbuf9, fmt, n); > } > + printf(fmt, n); > } > > > @@ -698,7 +692,6 @@ static void print_found(const char *line) > regmatch_t match_structs; > > char buf[width]; > - char nbuf9[9]; > const char *str = line; > char *p = buf; > size_t n; > @@ -748,12 +741,7 @@ static void print_found(const char *line) > match_status = 1; > } > > - lineno_str(nbuf9, line); > - if (!growline) { > - printf(CLEAR_2_EOL"%s%s\n", nbuf9, str); > - return; > - } > - printf(CLEAR_2_EOL"%s%s%s\n", nbuf9, growline, str); > + printf("%s%s\n", growline ? growline : "", str); > free(growline); > } > #else > @@ -763,13 +751,9 @@ void print_found(const char *line); > static void print_ascii(const char *str) > { > char buf[width]; > - char nbuf9[9]; > char *p; > size_t n; > > - lineno_str(nbuf9, str); > - printf(CLEAR_2_EOL"%s", nbuf9); > - > while (*str) { > n = strcspn(str, controls); > if (n) { > @@ -803,6 +787,9 @@ static void buffer_print(void) > > move_cursor(0, 0); > for (i = 0; i <= max_displayed_line; i++) { > + printf(CLEAR_2_EOL); > + if (option_mask32 & FLAG_N) > + print_lineno(buffer[i]); > if (pattern_valid) > print_found(buffer[i]); > else > -- > 2.4.3 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
