less: fix somewhat elusive case when less gets stuck in search mode

function                                             old     new   delta
read_lines                                           719     730     +11
goto_match                                           141     116     -25
This commit is contained in:
Denis Vlasenko 2008-04-13 08:32:51 +00:00
parent ffa4499c9f
commit 24f824edb3

View File

@ -384,6 +384,10 @@ static void read_lines(void)
linepos = 0; linepos = 0;
} /* end of "read lines until we reach cur_fline" loop */ } /* end of "read lines until we reach cur_fline" loop */
fill_match_lines(old_max_fline); fill_match_lines(old_max_fline);
#if ENABLE_FEATURE_LESS_REGEXP
/* prevent us from being stuck in search for a match */
wanted_match = -1;
#endif
#undef readbuf #undef readbuf
} }
@ -904,13 +908,8 @@ static void goto_match(int match)
match = 0; match = 0;
/* Try to find next match if eof isn't reached yet */ /* Try to find next match if eof isn't reached yet */
if (match >= num_matches && eof_error > 0) { if (match >= num_matches && eof_error > 0) {
wanted_match = match; wanted_match = match; /* "I want to read until I see N'th match" */
read_lines(); read_lines();
if (wanted_match >= num_matches) {
/* We still failed to find it. Prevent future
* read_lines() from trying... */
wanted_match = num_matches - 1;
}
} }
if (num_matches) { if (num_matches) {
normalize_match_pos(match); normalize_match_pos(match);