From 42dd6b0b902baa0a288405ec36c17a7f32a8bdae Mon Sep 17 00:00:00 2001 From: "Andrew V. Samoilov" Date: Tue, 24 Apr 2001 14:39:38 +0000 Subject: [PATCH] * view.c (get_line_at): previous newline is right condition for regexp '^' pattern also, fixed (search) [HAVE_GNOME]: gnome_message_box_new don't expand printf pattern, so g_strdup_printf used * find.c (find_parameters): don't use stat structure if mc_stat failed --- src/ChangeLog | 10 ++++++++++ src/find.c | 17 ++++++---------- src/view.c | 54 ++++++++++++++++++++++++++------------------------- 3 files changed, 44 insertions(+), 37 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 9c1f875ba..721efed8f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2001-04-24 Andrew V. Samoilov + + * view.c (get_line_at): previous newline is right condition + for regexp '^' pattern also, fixed + + (search) [HAVE_GNOME]: gnome_message_box_new don't expand printf + pattern, so g_strdup_printf used + + * find.c (find_parameters): don't use stat structure if mc_stat failed + 2001-04-17 Pavel Roskin * subshell.c (init_raw_mode): New function, separated from ... diff --git a/src/find.c b/src/find.c index 112cdb61d..5b48f0ee4 100644 --- a/src/find.c +++ b/src/find.c @@ -433,15 +433,11 @@ search_content (Dlg_head *h, char *directory, char *filename) fname = concat_dir_and_file (directory, filename); - if (mc_stat (fname, &s) != 0 && !S_ISREG (s.st_mode)){ + if (mc_stat (fname, &s) != 0 || !S_ISREG (s.st_mode)){ g_free (fname); return; } - if (!S_ISREG (s.st_mode)){ - g_free (fname); - return; - } - + file_fd = mc_open (fname, O_RDONLY); g_free (fname); @@ -471,15 +467,14 @@ search_content (Dlg_head *h, char *directory, char *filename) enable_interrupt_key (); got_interrupt (); - while (1){ - i = read (pipe, &c, 1); - if (i != 1) - break; + + while ((i = read (pipe, &c, 1)) == 0){ if (c == '\n'){ p = buffer; ignoring = 0; } + if (ignoring) continue; @@ -756,7 +751,7 @@ find_do_edit (void) static void setup_gui (void) { - GtkWidget *sw, *b1, *b2, *b3; + GtkWidget *sw, *b1, *b2; GtkWidget *box, *box2; g_find_dlg = gnome_dialog_new ( diff --git a/src/view.c b/src/view.c index cf559d77f..bacb4f6bb 100644 --- a/src/view.c +++ b/src/view.c @@ -1403,49 +1403,48 @@ static char * get_line_at (WView *view, unsigned long *p, unsigned long *skipped) { char *buffer = 0; - int buffer_size, usable_size; - int ch = 0; - int direction; + int buffer_size = 0; + int usable_size = 0; + int ch; + int direction = view->direction; unsigned long pos = *p; long i = 0; - int prev; + int prev = 0; - direction = view->direction; - buffer_size = usable_size = 0; - - prev = (pos) ? ((prev = get_byte (view, pos - 1) == -1) ? 0 : prev) : 0; - *skipped = 0; - while ((ch = get_byte (view, pos)) != -1){ + /* skip over all the possible zeros in the file */ + while ((ch = get_byte (view, pos)) == 0) { + pos += direction; i++; + } + *skipped = i; + + if (pos) { + prev = get_byte (view, pos - 1); + if ((prev == -1) || (prev == '\n')) + prev = 0; + } + + for (i = 0; ch > 0; ch = get_byte (view, pos)){ - /* skip over all the possible zeros in the file */ - if (ch == 0 && i == 0){ - do { - pos += direction; i++; - } while ((ch = get_byte (view, pos)) == 0); - *skipped = i; - i = 0; - if (ch == -1) - break; - } if (i == usable_size){ buffer = grow_string_buffer (buffer, &buffer_size); usable_size = buffer_size - 2; } pos += direction; i++; - buffer [i] = ch; - if (ch == '\n' || !ch){ + if (ch == '\n'){ break; } + buffer [i] = ch; } if (buffer){ buffer [0] = prev; buffer [i] = 0; - + /* If we are searching backwards, reverse the string */ - if (view->direction < 0) - reverse_string (buffer); + if (direction < 0) { + reverse_string (buffer + 1); + } } *p = pos; @@ -1492,6 +1491,7 @@ search (WView *view, char *text, int (*search)(WView *, char *, char *, int)) Dlg_head *d = 0; int search_status; #ifdef HAVE_GNOME + char *msg; int abort; GtkWidget *gd; #endif @@ -1507,10 +1507,12 @@ search (WView *view, char *text, int (*search)(WView *, char *, char *, int)) #ifdef HAVE_GNOME abort = 0; - gd = gnome_message_box_new (_("Searching for `%s'"), + msg = g_strdup_printf (_("Searching for `%s'"), text); + gd = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_INFO, GNOME_STOCK_BUTTON_CANCEL, NULL); + g_free (msg); gnome_dialog_button_connect (GNOME_DIALOG (gd), 0, GTK_SIGNAL_FUNC (cancel_pressed), &abort); gtk_widget_show (gd); #else