aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/spell.c71
1 files changed, 35 insertions, 36 deletions
diff --git a/src/nvim/spell.c b/src/nvim/spell.c
index 38762b1692..8214d95c00 100644
--- a/src/nvim/spell.c
+++ b/src/nvim/spell.c
@@ -1553,7 +1553,7 @@ static void find_word(matchinf_T *mip, int mode)
if (ptr == mip->mi_word)
(void)spell_casefold(ptr, wlen, fword, MAXWLEN);
else
- vim_strncpy(fword, ptr, endlen[endidxcnt]);
+ STRLCPY(fword, ptr, endlen[endidxcnt] + 1);
}
if (!can_compound(slang, fword, mip->mi_compflags))
continue;
@@ -2274,7 +2274,7 @@ void spell_cat_line(char_u *buf, char_u *line, int maxlen)
n = (int)(p - line) + 1;
if (n < maxlen - 1) {
memset(buf, ' ', n);
- vim_strncpy(buf + n, p, maxlen - 1 - n);
+ STRLCPY(buf + n, p, maxlen - n);
}
}
}
@@ -3064,7 +3064,7 @@ count_common_word (
if (len == -1)
p = word;
else {
- vim_strncpy(buf, word, len);
+ STRLCPY(buf, word, len + 1);
p = buf;
}
@@ -3354,7 +3354,7 @@ static int init_syl_tab(slang_T *slang)
ga_grow(&slang->sl_syl_items, 1);
syl = ((syl_item_T *)slang->sl_syl_items.ga_data)
+ slang->sl_syl_items.ga_len++;
- vim_strncpy(syl->sy_chars, s, l);
+ STRLCPY(syl->sy_chars, s, l + 1);
syl->sy_len = l;
}
return OK;
@@ -3761,7 +3761,7 @@ char_u *did_set_spelllang(win_T *wp)
p = vim_strchr(path_tail(lang), '_');
if (p != NULL && ASCII_ISALPHA(p[1]) && ASCII_ISALPHA(p[2])
&& !ASCII_ISALPHA(p[3])) {
- vim_strncpy(region_cp, p + 1, 2);
+ STRLCPY(region_cp, p + 1, 3);
memmove(p, p + 3, len - (p - lang) - 2);
len -= 3;
region = region_cp;
@@ -3883,7 +3883,7 @@ char_u *did_set_spelllang(win_T *wp)
if (round == 0)
STRCPY(lang, "internal wordlist");
else {
- vim_strncpy(lang, path_tail(spf_name), MAXWLEN);
+ STRLCPY(lang, path_tail(spf_name), MAXWLEN + 1);
p = vim_strchr(lang, '.');
if (p != NULL)
*p = NUL; // truncate at ".encoding.add"
@@ -4004,7 +4004,7 @@ static void use_midword(slang_T *lp, win_T *wp)
bp = vim_strnsave(wp->w_s->b_spell_ismw_mb, n + l);
free(wp->w_s->b_spell_ismw_mb);
wp->w_s->b_spell_ismw_mb = bp;
- vim_strncpy(bp + n, p, l);
+ STRLCPY(bp + n, p, l + 1);
}
p += l;
} else
@@ -4652,7 +4652,7 @@ static afffile_T *spell_read_aff(spellinfo_T *spin, char_u *fname)
// times. The affix files that do this have an undocumented
// "S" flag on all but the last block, thus we check for that
// and store it in ah_follows.
- vim_strncpy(key, items[1], AH_KEY_LEN - 1);
+ STRLCPY(key, items[1], AH_KEY_LEN);
hi = hash_find(tp, key);
if (!HASHITEM_EMPTY(hi)) {
cur_aff = HI2AH(hi);
@@ -5223,7 +5223,7 @@ static void process_compflags(spellinfo_T *spin, afffile_T *aff, char_u *compfla
if (flag != 0) {
// Find the flag in the hashtable. If it was used before, use
// the existing ID. Otherwise add a new entry.
- vim_strncpy(key, prevp, p - prevp);
+ STRLCPY(key, prevp, p - prevp + 1);
hi = hash_find(&aff->af_comp, key);
if (!HASHITEM_EMPTY(hi))
id = HI2CI(hi)->ci_newID;
@@ -5612,7 +5612,7 @@ static int get_pfxlist(afffile_T *affile, char_u *afflist, char_u *store_afflist
if (get_affitem(affile->af_flagtype, &p) != 0) {
// A flag is a postponed prefix flag if it appears in "af_pref"
// and it's ID is not zero.
- vim_strncpy(key, prevp, p - prevp);
+ STRLCPY(key, prevp, p - prevp + 1);
hi = hash_find(&affile->af_pref, key);
if (!HASHITEM_EMPTY(hi)) {
id = HI2AH(hi)->ah_newID;
@@ -5643,7 +5643,7 @@ static void get_compflags(afffile_T *affile, char_u *afflist, char_u *store_affl
prevp = p;
if (get_affitem(affile->af_flagtype, &p) != 0) {
// A flag is a compound flag if it appears in "af_comp".
- vim_strncpy(key, prevp, p - prevp);
+ STRLCPY(key, prevp, p - prevp + 1);
hi = hash_find(&affile->af_comp, key);
if (!HASHITEM_EMPTY(hi))
store_afflist[cnt++] = HI2CI(hi)->ci_newID;
@@ -5738,7 +5738,7 @@ store_aff_word (
if (ae->ae_add == NULL)
*newword = NUL;
else
- vim_strncpy(newword, ae->ae_add, MAXWLEN - 1);
+ STRLCPY(newword, ae->ae_add, MAXWLEN);
p = word;
if (ae->ae_chop != NULL) {
// Skip chop string.
@@ -5752,7 +5752,7 @@ store_aff_word (
STRCAT(newword, p);
} else {
// suffix: chop/add at the end of the word
- vim_strncpy(newword, word, MAXWLEN - 1);
+ STRLCPY(newword, word, MAXWLEN);
if (ae->ae_chop != NULL) {
// Remove chop string.
p = newword + STRLEN(newword);
@@ -5834,7 +5834,7 @@ store_aff_word (
// Obey a "COMPOUNDFORBIDFLAG" of the affix: don't
// use the compound flags.
if (use_pfxlist != NULL && ae->ae_compforbid) {
- vim_strncpy(pfx_pfxlist, use_pfxlist, use_pfxlen);
+ STRLCPY(pfx_pfxlist, use_pfxlist, use_pfxlen + 1);
use_pfxlist = pfx_pfxlist;
}
@@ -7188,7 +7188,7 @@ static void spell_make_sugfile(spellinfo_T *spin, char_u *wfname)
// Write the .sug file.
// Make the file name by changing ".spl" to ".sug".
fname = xmalloc(MAXPATHL);
- vim_strncpy(fname, wfname, MAXPATHL - 1);
+ STRLCPY(fname, wfname, MAXPATHL);
len = (int)STRLEN(fname);
fname[len - 2] = 'u';
fname[len - 1] = 'g';
@@ -7612,7 +7612,7 @@ mkspell (
fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
} else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0) {
// Name ends in ".spl", use as the file name.
- vim_strncpy(wfname, fnames[0], MAXPATHL - 1);
+ STRLCPY(wfname, fnames[0], MAXPATHL);
} else
// Name should be language, make the file name from it.
vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
@@ -7974,8 +7974,8 @@ static void init_spellfile(void)
if (aspath)
// Use directory of an entry with path, e.g., for
// "/dir/lg.utf-8.spl" use "/dir".
- vim_strncpy(buf, curbuf->b_s.b_p_spl,
- lstart - curbuf->b_s.b_p_spl - 1);
+ STRLCPY(buf, curbuf->b_s.b_p_spl,
+ lstart - curbuf->b_s.b_p_spl);
else
// Copy the path from 'runtimepath' to buf[].
copy_option_part(&rtp, buf, MAXPATHL, ",");
@@ -7983,8 +7983,8 @@ static void init_spellfile(void)
// Use the first language name from 'spelllang' and the
// encoding used in the first loaded .spl file.
if (aspath)
- vim_strncpy(buf, curbuf->b_s.b_p_spl,
- lend - curbuf->b_s.b_p_spl);
+ STRLCPY(buf, curbuf->b_s.b_p_spl,
+ lend - curbuf->b_s.b_p_spl + 1);
else {
// Create the "spell" directory if it doesn't exist yet.
l = (int)STRLEN(buf);
@@ -8530,11 +8530,11 @@ void spell_suggest(int count)
// The suggested word may replace only part of the bad word, add
// the not replaced part.
- vim_strncpy(wcopy, stp->st_word, MAXWLEN);
+ STRLCPY(wcopy, stp->st_word, MAXWLEN + 1);
if (sug.su_badlen > stp->st_orglen)
- vim_strncpy(wcopy + stp->st_wordlen,
+ STRLCPY(wcopy + stp->st_wordlen,
sug.su_badptr + stp->st_orglen,
- sug.su_badlen - stp->st_orglen);
+ sug.su_badlen - stp->st_orglen + 1);
vim_snprintf((char *)IObuff, IOSIZE, "%2d", i + 1);
if (cmdmsg_rl)
rl_mirror(IObuff);
@@ -8816,7 +8816,7 @@ spell_find_suggest (
if (su->su_badlen >= MAXWLEN)
su->su_badlen = MAXWLEN - 1; // just in case
- vim_strncpy(su->su_badword, su->su_badptr, su->su_badlen);
+ STRLCPY(su->su_badword, su->su_badptr, su->su_badlen + 1);
(void)spell_casefold(su->su_badptr, su->su_badlen,
su->su_fbadword, MAXWLEN);
// get caps flags for bad word
@@ -9259,7 +9259,7 @@ onecap_copy (
l = 1;
wcopy[0] = c;
}
- vim_strncpy(wcopy + l, p, MAXWLEN - l - 1);
+ STRLCPY(wcopy + l, p, MAXWLEN - l);
}
// Make a copy of "word" with all the letters upper cased into
@@ -9625,9 +9625,9 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, int sou
compflags[sp->ts_complen] = ((unsigned)flags >> 24);
compflags[sp->ts_complen + 1] = NUL;
- vim_strncpy(preword + sp->ts_prewordlen,
+ STRLCPY(preword + sp->ts_prewordlen,
tword + sp->ts_splitoff,
- sp->ts_twordlen - sp->ts_splitoff);
+ sp->ts_twordlen - sp->ts_splitoff + 1);
// Verify CHECKCOMPOUNDPATTERN rules.
if (match_checkcompoundpattern(preword, sp->ts_prewordlen,
@@ -10968,8 +10968,8 @@ stp_sal_score (
// Add part of the bad word to the good word, so that we soundfold
// what replaces the bad word.
STRCPY(goodword, stp->st_word);
- vim_strncpy(goodword + stp->st_wordlen,
- su->su_badptr + su->su_badlen - lendiff, lendiff);
+ STRLCPY(goodword + stp->st_wordlen,
+ su->su_badptr + su->su_badlen - lendiff, lendiff + 1);
pgood = goodword;
} else
pgood = stp->st_word;
@@ -11545,10 +11545,10 @@ check_suggestions (
stp = &SUG(*gap, 0);
for (int i = gap->ga_len - 1; i >= 0; --i) {
// Need to append what follows to check for "the the".
- vim_strncpy(longword, stp[i].st_word, MAXWLEN);
+ STRLCPY(longword, stp[i].st_word, MAXWLEN + 1);
len = stp[i].st_wordlen;
- vim_strncpy(longword + len, su->su_badptr + stp[i].st_orglen,
- MAXWLEN - len);
+ STRLCPY(longword + len, su->su_badptr + stp[i].st_orglen,
+ MAXWLEN - len + 1);
attr = HLF_COUNT;
(void)spell_check(curwin, longword, &attr, NULL, FALSE);
if (attr != HLF_COUNT) {
@@ -11815,7 +11815,7 @@ static void spell_soundfold_sal(slang_T *slang, char_u *inword, char_u *res)
}
*t = NUL;
} else
- vim_strncpy(word, s, MAXWLEN - 1);
+ STRLCPY(word, s, MAXWLEN);
smp = (salitem_T *)slang->sl_sal.ga_data;
@@ -13269,7 +13269,7 @@ dump_prefixes (
c = valid_word_prefix(i, n, flags, word, slang, FALSE);
if (c != 0) {
- vim_strncpy(prefix + depth, word, MAXWLEN - depth - 1);
+ STRLCPY(prefix + depth, word, MAXWLEN - depth);
dump_word(slang, prefix, pat, dir, dumpflags,
(c & WF_RAREPFX) ? (flags | WF_RARE)
: flags, lnum);
@@ -13284,8 +13284,7 @@ dump_prefixes (
c = valid_word_prefix(i, n, flags, word_up, slang,
TRUE);
if (c != 0) {
- vim_strncpy(prefix + depth, word_up,
- MAXWLEN - depth - 1);
+ STRLCPY(prefix + depth, word_up, MAXWLEN - depth);
dump_word(slang, prefix, pat, dir, dumpflags,
(c & WF_RAREPFX) ? (flags | WF_RARE)
: flags, lnum);