diff --git a/ChangeLog b/ChangeLog index 5ff94c9e53f7c2a42f343708eedb0a23854c7353..5c0559f22f624bb9a1773e546837ccea8e72632a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -83,8 +83,11 @@ CVS code - certain zero-length regex replacements ("^", "$", and "^$"). Add a no_sameline parameter to findnextstr(), and set it in the calls in do_replace_loop() when such regexes are found, so - that such regexes are only found once per line. (DLR; found by - Mike Frysinger and DLR) + that such regexes are only found once per line. Also change + length_change from a long to an int; size_t is unsuitable due + to its being unsigned. (DLR; found by Mike Frysinger and DLR) + David Benbennick: Add a few minor cleanups to + do_replace_loop(). - winio.c: get_kbinput(), get_accepted_kbinput() - Don't pass in the value of the REBIND_DELETE flag anymore. diff --git a/src/search.c b/src/search.c index 8b1c9f76b1faec959ed0602b8f75ff96a9bdf9b0..53c05208c39ec31a234384765602976cb29db133 100644 --- a/src/search.c +++ b/src/search.c @@ -622,7 +622,6 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin, int beginline = 0, caretdollar = 0; #endif filestruct *fileptr = NULL; - char *copy; switch (*i) { case -1: /* Aborted enter. */ @@ -716,6 +715,9 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin, do_replace_highlight(FALSE, exp_word); free(exp_word); curs_set(1); + + if (*i == -1) /* We canceled the replace. */ + break; } #ifdef HAVE_REGEX_H @@ -726,8 +728,8 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin, #endif if (*i > 0 || replaceall) { /* Yes, replace it!!!! */ - long length_change; - size_t match_len; + char *copy; + int length_change; if (*i == 2) replaceall = 1; @@ -741,13 +743,6 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin, length_change = strlen(copy) - strlen(current->data); -#ifdef HAVE_REGEX_H - if (ISSET(USE_REGEXP)) - match_len = regmatches[0].rm_eo - regmatches[0].rm_so; - else -#endif - match_len = strlen(prevanswer); - #ifndef NANO_SMALL if (current == mark_beginbuf && mark_beginx > current_x) { if (mark_beginx < current_x + match_len) @@ -780,10 +775,7 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin, edit_refresh(); set_modified(); numreplaced++; - - } else if (*i == -1) /* Break out of the loop, else do - * nothing and continue loop. */ - break; + } } /* If text has been added to the magicline, make a new magicline. */