From: zeertzjq Date: Sat, 22 Feb 2025 08:13:17 +0000 (+0100) Subject: patch 9.1.1135: 'suffixesadd' doesn't work with multiple items X-Git-Tag: v9.1.1135^0 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bf595ae4ac9ecc1e0620664177072926ed3679ff;p=thirdparty%2Fvim.git patch 9.1.1135: 'suffixesadd' doesn't work with multiple items Problem: 'suffixesadd' doesn't work with multiple items (after 9.1.1122). Solution: Don't concat multiple suffixes together. (zeertzjq) fixes: #16694 closes: #16699 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- diff --git a/src/findfile.c b/src/findfile.c index ccb3ef8853..2bd1e7eb99 100644 --- a/src/findfile.c +++ b/src/findfile.c @@ -1082,6 +1082,7 @@ vim_findfile(void *search_ctx_arg) * Try without extra suffix and then with suffixes * from 'suffixesadd'. */ + len = file_path.length; if (search_ctx->ffsc_tagfile) suf = (char_u *)""; else @@ -1164,8 +1165,8 @@ vim_findfile(void *search_ctx_arg) // Not found or found already, try next suffix. if (*suf == NUL) break; - file_path.length += copy_option_part(&suf, file_path.string + file_path.length, - MAXPATHL - file_path.length, ","); + file_path.length = len + copy_option_part(&suf, + file_path.string + len, MAXPATHL - len, ","); } } } @@ -1872,6 +1873,7 @@ find_file_in_path_option( if (first == TRUE) { int l; + int NameBufflen; int run; size_t rel_fnamelen = 0; char_u *suffix; @@ -1912,6 +1914,7 @@ find_file_in_path_option( // When the file doesn't exist, try adding parts of // 'suffixesadd'. + NameBufflen = l; suffix = suffixes; for (;;) { @@ -1920,12 +1923,13 @@ find_file_in_path_option( || ((find_what == FINDFILE_DIR) == mch_isdir(NameBuff)))) { - file_name = vim_strnsave(NameBuff, l); + file_name = vim_strnsave(NameBuff, NameBufflen); goto theend; } if (*suffix == NUL) break; - l += copy_option_part(&suffix, NameBuff + l, MAXPATHL - l, ","); + NameBufflen = l + copy_option_part(&suffix, NameBuff + l, + MAXPATHL - l, ","); } } } diff --git a/src/testdir/test_findfile.vim b/src/testdir/test_findfile.vim index c974c40147..a7c3dc26de 100644 --- a/src/testdir/test_findfile.vim +++ b/src/testdir/test_findfile.vim @@ -222,6 +222,36 @@ func Test_finddir_error() call assert_fails('call finddir("x", repeat("x", 5000))', 'E854:') endfunc +func Test_findfile_with_suffixesadd() + let save_path = &path + let save_dir = getcwd() + set path=,, + call mkdir('Xfinddir1', 'pR') + cd Xfinddir1 + + call writefile([], 'foo.c', 'D') + call writefile([], 'bar.cpp', 'D') + call writefile([], 'baz.cc', 'D') + call writefile([], 'foo.o', 'D') + call writefile([], 'bar.o', 'D') + call writefile([], 'baz.o', 'D') + + set suffixesadd=.c,.cpp + call assert_equal('foo.c', findfile('foo')) + call assert_equal('./foo.c', findfile('./foo')) + call assert_equal('bar.cpp', findfile('bar')) + call assert_equal('./bar.cpp', findfile('./bar')) + call assert_equal('', findfile('baz')) + call assert_equal('', findfile('./baz')) + set suffixesadd+=.cc + call assert_equal('baz.cc', findfile('baz')) + call assert_equal('./baz.cc', findfile('./baz')) + + set suffixesadd& + call chdir(save_dir) + let &path = save_path +endfunc + " Test for the :find, :sfind and :tabfind commands func Test_find_cmd() new diff --git a/src/testdir/test_gf.vim b/src/testdir/test_gf.vim index cc12b3618f..4dc01c925b 100644 --- a/src/testdir/test_gf.vim +++ b/src/testdir/test_gf.vim @@ -353,4 +353,36 @@ func Test_gf_switchbuf() %bw! endfunc +func Test_gf_with_suffixesadd() + let cwd = getcwd() + let dir = 'Xtestgf_sua_dir' + call mkdir(dir, 'R') + call chdir(dir) + + call writefile([], 'foo.c', 'D') + call writefile([], 'bar.cpp', 'D') + call writefile([], 'baz.cc', 'D') + call writefile([], 'foo.o', 'D') + call writefile([], 'bar.o', 'D') + call writefile([], 'baz.o', 'D') + + new + setlocal path=,, suffixesadd=.c,.cpp + call setline(1, ['./foo', './bar', './baz']) + exe "normal! gg\f" + call assert_equal('foo.c', expand('%:t')) + close + exe "normal! 2gg\f" + call assert_equal('bar.cpp', expand('%:t')) + close + call assert_fails('exe "normal! 3gg\f"', 'E447:') + setlocal suffixesadd+=.cc + exe "normal! 3gg\f" + call assert_equal('baz.cc', expand('%:t')) + close + + %bwipe! + call chdir(cwd) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 620e7b26f5..4a9af920b2 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1135, /**/ 1134, /**/