mirror of
https://github.com/vim/vim.git
synced 2025-09-30 04:44:14 -04:00
patch 9.1.0567: Cannot use relative paths as findfile() stop directories
Problem: Cannot use relative paths as findfile() stop directories. Solution: Change a relative path to an absolute path. (zeertzjq) related: #15200 closes: #15202 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
e6ab23bd4a
commit
764526e279
@@ -418,6 +418,7 @@ vim_findfile_init(
|
|||||||
{
|
{
|
||||||
char_u *helper;
|
char_u *helper;
|
||||||
void *ptr;
|
void *ptr;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
helper = walker;
|
helper = walker;
|
||||||
ptr = vim_realloc(search_ctx->ffsc_stopdirs_v,
|
ptr = vim_realloc(search_ctx->ffsc_stopdirs_v,
|
||||||
@@ -428,18 +429,21 @@ vim_findfile_init(
|
|||||||
// ignore, keep what we have and continue
|
// ignore, keep what we have and continue
|
||||||
break;
|
break;
|
||||||
walker = vim_strchr(walker, ';');
|
walker = vim_strchr(walker, ';');
|
||||||
if (walker)
|
len = walker ? (size_t)(walker - helper) : STRLEN(helper);
|
||||||
|
// "" means ascent till top of directory tree.
|
||||||
|
if (*helper != NUL && !vim_isAbsName(helper)
|
||||||
|
&& len + 1 < MAXPATHL)
|
||||||
{
|
{
|
||||||
|
// Make the stop dir an absolute path name.
|
||||||
|
vim_strncpy(ff_expand_buffer, helper, len);
|
||||||
search_ctx->ffsc_stopdirs_v[dircount-1] =
|
search_ctx->ffsc_stopdirs_v[dircount-1] =
|
||||||
vim_strnsave(helper, walker - helper);
|
FullName_save(ff_expand_buffer, FALSE);
|
||||||
walker++;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
// this might be "", which means ascent till top
|
|
||||||
// of directory tree.
|
|
||||||
search_ctx->ffsc_stopdirs_v[dircount-1] =
|
search_ctx->ffsc_stopdirs_v[dircount-1] =
|
||||||
vim_strsave(helper);
|
vim_strnsave(helper, len);
|
||||||
|
if (walker)
|
||||||
|
walker++;
|
||||||
dircount++;
|
dircount++;
|
||||||
|
|
||||||
} while (walker != NULL);
|
} while (walker != NULL);
|
||||||
|
@@ -98,12 +98,25 @@ func Test_findfile()
|
|||||||
|
|
||||||
" Test upwards search with stop-directory.
|
" Test upwards search with stop-directory.
|
||||||
cd Xdir2
|
cd Xdir2
|
||||||
|
let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/Xdir3/', -1)
|
||||||
|
call assert_equal(1, len(l))
|
||||||
|
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
||||||
|
let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/Xdir3', -1)
|
||||||
|
call assert_equal(1, len(l))
|
||||||
|
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
||||||
|
let l = findfile('bar', ';../', -1)
|
||||||
|
call assert_equal(1, len(l))
|
||||||
|
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
||||||
|
|
||||||
let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/', -1)
|
let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/', -1)
|
||||||
call assert_equal(1, len(l))
|
call assert_equal(1, len(l))
|
||||||
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
||||||
let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2', -1)
|
let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2', -1)
|
||||||
call assert_equal(1, len(l))
|
call assert_equal(1, len(l))
|
||||||
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
||||||
|
let l = findfile('bar', ';../../', -1)
|
||||||
|
call assert_equal(1, len(l))
|
||||||
|
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
||||||
|
|
||||||
let l = findfile('bar', ';' . save_dir . '/Xfinddir1/', -1)
|
let l = findfile('bar', ';' . save_dir . '/Xfinddir1/', -1)
|
||||||
call assert_equal(2, len(l))
|
call assert_equal(2, len(l))
|
||||||
@@ -113,6 +126,10 @@ func Test_findfile()
|
|||||||
call assert_equal(2, len(l))
|
call assert_equal(2, len(l))
|
||||||
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
||||||
call assert_match('.*/Xfinddir1/bar', l[1])
|
call assert_match('.*/Xfinddir1/bar', l[1])
|
||||||
|
let l = findfile('bar', ';../../../', -1)
|
||||||
|
call assert_equal(2, len(l))
|
||||||
|
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
|
||||||
|
call assert_match('.*/Xfinddir1/bar', l[1])
|
||||||
|
|
||||||
" Test combined downwards and upwards search from Xdir2/.
|
" Test combined downwards and upwards search from Xdir2/.
|
||||||
cd ../..
|
cd ../..
|
||||||
|
@@ -146,6 +146,15 @@ func Test_tagfiles_stopdir()
|
|||||||
let &tags = './Xtags;' .. fnamemodify('./..', ':p')
|
let &tags = './Xtags;' .. fnamemodify('./..', ':p')
|
||||||
call assert_equal(0, len(tagfiles()))
|
call assert_equal(0, len(tagfiles()))
|
||||||
|
|
||||||
|
let &tags = './Xtags;../'
|
||||||
|
call assert_equal(0, len(tagfiles()))
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
call assert_equal(1, len(tagfiles()))
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
call assert_equal(1, len(tagfiles()))
|
||||||
|
|
||||||
set tags&
|
set tags&
|
||||||
call chdir(save_cwd)
|
call chdir(save_cwd)
|
||||||
endfunc
|
endfunc
|
||||||
|
@@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
567,
|
||||||
/**/
|
/**/
|
||||||
566,
|
566,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user