mirror of
https://github.com/neovim/neovim.git
synced 2024-12-31 17:13:26 -07:00
vim-patch:8.2.3219: :find searches non-existing directories
Problem: :find searches non-existing directories. Solution: Check the path is not "..". Update help. (Christian Brabandt, closes vim/vim#8612, closes vim/vim#8533)7a4ca32175
Change STRNCAT to STRLCAT as clint doesn't like the former. Include a typo fix from2f0936cb9a (diff-7e9292cae1f2ba70dd5b17d2d162693a91044ada6ac99e9c3e8917f32878c097)
This commit is contained in:
parent
a562b5771e
commit
7d72076a6f
@ -1569,6 +1569,12 @@ There are three different types of searching:
|
|||||||
/u/user_x/work/include
|
/u/user_x/work/include
|
||||||
/u/user_x/include
|
/u/user_x/include
|
||||||
|
|
||||||
|
< Note: If your 'path' setting includes a non-existing directory, Vim will
|
||||||
|
skip the non-existing directory, but continues searching in the parent of
|
||||||
|
the non-existing directory if upwards searching is used. E.g. when
|
||||||
|
searching "../include" and that doesn't exist, and upward searching is
|
||||||
|
used, also searches in "..".
|
||||||
|
|
||||||
3) Combined up/downward search:
|
3) Combined up/downward search:
|
||||||
If Vim's current path is /u/user_x/work/release and you do >
|
If Vim's current path is /u/user_x/work/release and you do >
|
||||||
set path=**;/u/user_x
|
set path=**;/u/user_x
|
||||||
|
@ -483,8 +483,14 @@ void *vim_findfile_init(char_u *path, char_u *filename, char_u *stopdirs, int le
|
|||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
if (p > search_ctx->ffsc_fix_path) {
|
if (p > search_ctx->ffsc_fix_path) {
|
||||||
|
// do not add '..' to the path and start upwards searching
|
||||||
len = (int)(p - search_ctx->ffsc_fix_path) - 1;
|
len = (int)(p - search_ctx->ffsc_fix_path) - 1;
|
||||||
STRNCAT(ff_expand_buffer, search_ctx->ffsc_fix_path, len);
|
if ((len >= 2 && STRNCMP(search_ctx->ffsc_fix_path, "..", 2) == 0)
|
||||||
|
&& (len == 2 || search_ctx->ffsc_fix_path[2] == PATHSEP)) {
|
||||||
|
xfree(buf);
|
||||||
|
goto error_return;
|
||||||
|
}
|
||||||
|
STRLCAT(ff_expand_buffer, search_ctx->ffsc_fix_path, eb_len + (size_t)len + 1);
|
||||||
add_pathsep((char *)ff_expand_buffer);
|
add_pathsep((char *)ff_expand_buffer);
|
||||||
} else {
|
} else {
|
||||||
len = (int)STRLEN(search_ctx->ffsc_fix_path);
|
len = (int)STRLEN(search_ctx->ffsc_fix_path);
|
||||||
|
@ -226,4 +226,26 @@ func Test_find_cmd()
|
|||||||
call assert_fails('tabfind', 'E471:')
|
call assert_fails('tabfind', 'E471:')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_find_non_existing_path()
|
||||||
|
new
|
||||||
|
let save_path = &path
|
||||||
|
let save_dir = getcwd()
|
||||||
|
call mkdir('dir1/dir2', 'p')
|
||||||
|
call writefile([], 'dir1/file.txt')
|
||||||
|
call writefile([], 'dir1/dir2/base.txt')
|
||||||
|
call chdir('dir1/dir2')
|
||||||
|
e base.txt
|
||||||
|
set path=../include
|
||||||
|
|
||||||
|
call assert_fails(':find file.txt', 'E345:')
|
||||||
|
|
||||||
|
call chdir(save_dir)
|
||||||
|
bw!
|
||||||
|
call delete('dir1/dir2/base.txt', 'rf')
|
||||||
|
call delete('dir1/dir2', 'rf')
|
||||||
|
call delete('dir1/file.txt', 'rf')
|
||||||
|
call delete('dir1', 'rf')
|
||||||
|
let &path = save_path
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Loading…
Reference in New Issue
Block a user