patch 9.0.1614: strlen() called too often for :spellrepall
Problem: strlen() called too often for :spellrepall. Solution: Store the result in a variable. (closes #12497)
This commit is contained in:
13
src/spell.c
13
src/spell.c
@ -2890,7 +2890,6 @@ ex_spellrepall(exarg_T *eap UNUSED)
|
|||||||
{
|
{
|
||||||
pos_T pos = curwin->w_cursor;
|
pos_T pos = curwin->w_cursor;
|
||||||
char_u *frompat;
|
char_u *frompat;
|
||||||
int addlen;
|
|
||||||
char_u *line;
|
char_u *line;
|
||||||
char_u *p;
|
char_u *p;
|
||||||
int save_ws = p_ws;
|
int save_ws = p_ws;
|
||||||
@ -2901,9 +2900,11 @@ ex_spellrepall(exarg_T *eap UNUSED)
|
|||||||
emsg(_(e_no_previous_spell_replacement));
|
emsg(_(e_no_previous_spell_replacement));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addlen = (int)(STRLEN(repl_to) - STRLEN(repl_from));
|
size_t repl_from_len = STRLEN(repl_from);
|
||||||
|
size_t repl_to_len = STRLEN(repl_to);
|
||||||
|
int addlen = (int)(repl_to_len - repl_from_len);
|
||||||
|
|
||||||
frompat = alloc(STRLEN(repl_from) + 7);
|
frompat = alloc(repl_from_len + 7);
|
||||||
if (frompat == NULL)
|
if (frompat == NULL)
|
||||||
return;
|
return;
|
||||||
sprintf((char *)frompat, "\\V\\<%s\\>", repl_from);
|
sprintf((char *)frompat, "\\V\\<%s\\>", repl_from);
|
||||||
@ -2922,14 +2923,14 @@ ex_spellrepall(exarg_T *eap UNUSED)
|
|||||||
// when changing "etc" to "etc.".
|
// when changing "etc" to "etc.".
|
||||||
line = ml_get_curline();
|
line = ml_get_curline();
|
||||||
if (addlen <= 0 || STRNCMP(line + curwin->w_cursor.col,
|
if (addlen <= 0 || STRNCMP(line + curwin->w_cursor.col,
|
||||||
repl_to, STRLEN(repl_to)) != 0)
|
repl_to, repl_to_len) != 0)
|
||||||
{
|
{
|
||||||
p = alloc(STRLEN(line) + addlen + 1);
|
p = alloc(STRLEN(line) + addlen + 1);
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
break;
|
break;
|
||||||
mch_memmove(p, line, curwin->w_cursor.col);
|
mch_memmove(p, line, curwin->w_cursor.col);
|
||||||
STRCPY(p + curwin->w_cursor.col, repl_to);
|
STRCPY(p + curwin->w_cursor.col, repl_to);
|
||||||
STRCAT(p, line + curwin->w_cursor.col + STRLEN(repl_from));
|
STRCAT(p, line + curwin->w_cursor.col + repl_from_len);
|
||||||
ml_replace(curwin->w_cursor.lnum, p, FALSE);
|
ml_replace(curwin->w_cursor.lnum, p, FALSE);
|
||||||
changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col);
|
changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col);
|
||||||
#if defined(FEAT_PROP_POPUP)
|
#if defined(FEAT_PROP_POPUP)
|
||||||
@ -2945,7 +2946,7 @@ ex_spellrepall(exarg_T *eap UNUSED)
|
|||||||
}
|
}
|
||||||
++sub_nsubs;
|
++sub_nsubs;
|
||||||
}
|
}
|
||||||
curwin->w_cursor.col += (colnr_T)STRLEN(repl_to);
|
curwin->w_cursor.col += (colnr_T)repl_to_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
p_ws = save_ws;
|
p_ws = save_ws;
|
||||||
|
|||||||
@ -281,7 +281,7 @@ func Test_compl_with_CTRL_X_CTRL_K_using_spell()
|
|||||||
set spell& spelllang& dictionary& ignorecase&
|
set spell& spelllang& dictionary& ignorecase&
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_spellreall()
|
func Test_spellrepall()
|
||||||
new
|
new
|
||||||
set spell
|
set spell
|
||||||
call assert_fails('spellrepall', 'E752:')
|
call assert_fails('spellrepall', 'E752:')
|
||||||
|
|||||||
@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1614,
|
||||||
/**/
|
/**/
|
||||||
1613,
|
1613,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user