static gboolean mcview_find (mcview_search_status_msg_t * ssm, off_t search_start, off_t search_end, gsize * len) { WView *view = ssm->view; view->search_numNeedSkipChar = 0; search_cb_char_curr_index = -1; if (mcview_search_options.backwards) { search_end = mcview_get_filesize (view); while (search_start >= 0) { gboolean ok; view->search_nroff_seq->index = search_start; mcview_nroff_seq_info (view->search_nroff_seq); if (search_end > search_start + (off_t) view->search->original_len && mc_search_is_fixed_search_str (view->search)) search_end = search_start + view->search->original_len; ok = mc_search_run (view->search, (void *) ssm, search_start, search_end, len); if (ok && view->search->normal_offset == search_start) { if (view->text_nroff_mode) view->search->normal_offset++; return TRUE; } /* We abort the search in case of a pattern error, or if the user aborts the search. In other words: in all cases except "string not found". */ if (!ok && view->search->error != MC_SEARCH_E_NOTFOUND) return FALSE; search_start--; } mc_search_set_error (view->search, MC_SEARCH_E_NOTFOUND, "%s", _(STR_E_NOTFOUND)); return FALSE; } view->search_nroff_seq->index = search_start; mcview_nroff_seq_info (view->search_nroff_seq); return mc_search_run (view->search, (void *) ssm, search_start, search_end, len); }
static gboolean mcview_find (mcview_t * view, gsize search_start, gsize * len) { gsize search_end; view->search_numNeedSkipChar = 0; search_cb_char_curr_index = -1; if (mcview_search_options.backwards) { search_end = mcview_get_filesize (view); while ((int) search_start >= 0) { view->search_nroff_seq->index = search_start; mcview_nroff_seq_info (view->search_nroff_seq); if (search_end > search_start + view->search->original_len && mc_search_is_fixed_search_str (view->search)) search_end = search_start + view->search->original_len; if (mc_search_run (view->search, (void *) view, search_start, search_end, len) && view->search->normal_offset == (off_t) search_start) { if (view->text_nroff_mode) view->search->normal_offset++; return TRUE; } search_start--; } view->search->error_str = g_strdup (_("Search string not found")); return FALSE; } view->search_nroff_seq->index = search_start; mcview_nroff_seq_info (view->search_nroff_seq); return mc_search_run (view->search, (void *) view, search_start, mcview_get_filesize (view), len); }