From 178628e67f5c82e09c07aaf038fc423142fc3310 Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Thu, 4 May 2017 10:23:05 +0300 Subject: [PATCH] Ticket #3819: mcview: search doesn't grow file as much as needed. (mcview_do_search): * In main search loop: don't break in case of MC_SEARCH_E_NOTFOUND error. Make next iteration until buffer can be grown. * Make search in the last data chunk. Signed-off-by: Andrew Borodin --- src/viewer/search.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/viewer/search.c b/src/viewer/search.c index d34cce348..f2e2431b1 100644 --- a/src/viewer/search.c +++ b/src/viewer/search.c @@ -366,13 +366,25 @@ mcview_do_search (WView * view, off_t want_search_start) break; } - if (view->search->error == MC_SEARCH_E_ABORT || view->search->error == MC_SEARCH_E_NOTFOUND) + /* Search error is here. + * MC_SEARCH_E_NOTFOUND: continue search + * others: stop + */ + if (view->search->error != MC_SEARCH_E_NOTFOUND) break; search_start = growbufsize - view->search->original_len; } while (search_start > 0 && mcview_may_still_grow (view)); + /* After mcview_may_still_grow (view) == FALSE we have remained last chunk. Search there. */ + if (!found && view->search->error == MC_SEARCH_E_NOTFOUND && !mcview_search_options.backwards + && mcview_find (&vsm, search_start, mcview_get_filesize (view), &match_len)) + { + mcview_search_show_result (view, match_len); + found = TRUE; + } + status_msg_deinit (STATUS_MSG (&vsm)); if (orig_search_start != 0 && (!found && view->search->error == MC_SEARCH_E_NOTFOUND)