Ticket #2320: 2320_regexp_replace.patch

File 2320_regexp_replace.patch, 2.6 KB (added by andrew_b, 9 years ago)
  • src/editor/editcmd.c

    diff --git a/src/editor/editcmd.c b/src/editor/editcmd.c
    index 8e53f05..0851ffc 100644
    a b edit_replace_cmd (WEdit * edit, int again) 
    16881688    char *disp2 = NULL; 
    16891689    long times_replaced = 0; 
    16901690    gboolean once_found = FALSE; 
    1691     GString *repl_str = NULL, *tmp_str = NULL; 
    16921691 
    16931692    if (!edit) 
    16941693    { 
    edit_replace_cmd (WEdit * edit, int again) 
    17871786        if ((edit->search_start >= 0) && (edit->search_start < edit->last_byte)) 
    17881787        { 
    17891788            gsize i; 
     1789            GString *tmp_str, *repl_str; 
    17901790 
    17911791            edit->found_start = edit->search_start; 
    17921792            i = edit->found_len = len; 
    edit_replace_cmd (WEdit * edit, int again) 
    18361836            } 
    18371837 
    18381838            /* don't process string each time */ 
    1839             if (tmp_str == NULL) 
    1840             { 
    1841                 tmp_str = g_string_new (input2); 
    1842                 repl_str = mc_search_prepare_replace_str (edit->search, tmp_str); 
     1839            tmp_str = g_string_new (input2); 
     1840            repl_str = mc_search_prepare_replace_str (edit->search, tmp_str); 
     1841            g_string_free (tmp_str, TRUE); 
    18431842 
    1844                 if (edit->search->error != MC_SEARCH_E_OK) 
    1845                 { 
    1846                     edit_error_dialog (_("Replace"), edit->search->error_str); 
    1847                     break; 
    1848                 } 
     1843            if (edit->search->error != MC_SEARCH_E_OK) 
     1844            { 
     1845                edit_error_dialog (_("Replace"), edit->search->error_str); 
     1846                g_string_free (repl_str, TRUE); 
     1847                break; 
    18491848            } 
    18501849 
    18511850              /* delete then insert new */ 
    edit_replace_cmd (WEdit * edit, int again) 
    18561855                edit_insert (edit, repl_str->str[i]); 
    18571856 
    18581857            edit->found_len = repl_str->len; 
     1858            g_string_free (repl_str, TRUE); 
    18591859            times_replaced++; 
    18601860 
    18611861            /* so that we don't find the same string again */ 
    edit_replace_cmd (WEdit * edit, int again) 
    18631863                edit->search_start--; 
    18641864            else 
    18651865            { 
    1866                 edit->search_start += repl_str->len; 
     1866                edit->search_start += edit->found_len; 
    18671867 
    18681868                if (edit->search_start >= edit->last_byte) 
    18691869                    break; 
    edit_replace_cmd (WEdit * edit, int again) 
    18871887    } 
    18881888    while (edit->replace_mode >= 0); 
    18891889 
    1890     if (tmp_str != NULL) 
    1891         g_string_free (tmp_str, TRUE); 
    1892     if (repl_str != NULL) 
    1893         g_string_free (repl_str, TRUE); 
    1894  
    18951890    edit_scroll_screen_over_cursor (edit); 
    18961891    edit->force |= REDRAW_COMPLETELY; 
    18971892    edit_render_keypress (edit);