patch 9.1.1135: 'suffixesadd' doesn't work with multiple items Commit: https://github.com/vim/vim/commit/bf595ae4ac9ecc1e0620664177072926ed3679ff Author: zeertzjq <zeert...@outlook.com> Date: Sat Feb 22 09:13:17 2025 +0100
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 <zeert...@outlook.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/src/findfile.c b/src/findfile.c index ccb3ef885..2bd1e7eb9 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 c974c4014..a7c3dc26d 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 cc12b3618..4dc01c925 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\<C-W>f" + call assert_equal('foo.c', expand('%:t')) + close + exe "normal! 2gg\<C-W>f" + call assert_equal('bar.cpp', expand('%:t')) + close + call assert_fails('exe "normal! 3gg\<C-W>f"', 'E447:') + setlocal suffixesadd+=.cc + exe "normal! 3gg\<C-W>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 620e7b26f..4a9af920b 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, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1tlkf9-0060pP-Gd%40256bit.org.