diff options
-rw-r--r-- | src/misc2.c | 54 | ||||
-rw-r--r-- | src/testdir/test89.in | 18 | ||||
-rw-r--r-- | src/testdir/test89.ok | 6 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 75 insertions, 5 deletions
diff --git a/src/misc2.c b/src/misc2.c index 196641fad..c63344f0d 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -4679,8 +4679,58 @@ vim_findfile_init(path, filename, stopdirs, level, free_visited, find_what, } STRCPY(ff_expand_buffer, search_ctx->ffsc_start_dir); add_pathsep(ff_expand_buffer); - STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path); - add_pathsep(ff_expand_buffer); + { + char_u *buf = alloc(STRLEN(ff_expand_buffer) + + STRLEN(search_ctx->ffsc_fix_path)); + + STRCPY(buf, ff_expand_buffer); + STRCAT(buf, search_ctx->ffsc_fix_path); + if (mch_isdir(buf)) + { + STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path); + add_pathsep(ff_expand_buffer); + } +#ifdef FEAT_PATH_EXTRA + else + { + char_u *p = vim_strrchr(search_ctx->ffsc_fix_path, PATHSEP); + char_u *wc_path = NUL; + char_u *temp = NUL; + int len = 0; + + if (p != NULL) + { + len = p - search_ctx->ffsc_fix_path; + STRNCAT(ff_expand_buffer, search_ctx->ffsc_fix_path, len); + add_pathsep(ff_expand_buffer); + } + else + len = STRLEN(search_ctx->ffsc_fix_path); + + if (search_ctx->ffsc_wc_path != NULL) + { + wc_path = vim_strsave(search_ctx->ffsc_wc_path); + temp = alloc(STRLEN(search_ctx->ffsc_wc_path) + + (STRLEN(search_ctx->ffsc_fix_path) - len)); + } + + if (temp == NULL || wc_path == NULL) + { + vim_free(buf); + vim_free(temp); + vim_free(wc_path); + goto error_return; + } + + STRCPY(temp, search_ctx->ffsc_fix_path + len); + STRCAT(temp, search_ctx->ffsc_wc_path); + vim_free(search_ctx->ffsc_wc_path); + vim_free(wc_path); + search_ctx->ffsc_wc_path = temp; + } +#endif + vim_free(buf); + } sptr = ff_create_stack_element(ff_expand_buffer, #ifdef FEAT_PATH_EXTRA diff --git a/src/testdir/test89.in b/src/testdir/test89.in index 8e53c9176..fc3a9a29b 100644 --- a/src/testdir/test89.in +++ b/src/testdir/test89.in @@ -1,6 +1,7 @@ -Some tests for setting 'number' and 'relativenumber' -This is not all that useful now that the options are no longer reset when -setting the other. +- Some tests for setting 'number' and 'relativenumber' + This is not all that useful now that the options are no longer reset when + setting the other. +- Some tests for findfile() function STARTTEST :so small.vim @@ -49,6 +50,17 @@ STARTTEST :$put g :$put h :" +:let cwd=getcwd() +:cd ../.. +:$put ='' +:$put ='Testing findfile' +:$put ='' +:$put =findfile('test19.in','src/test*') +:exe "cd" cwd +:cd .. +:$put =findfile('test19.in','test*') +:$put =findfile('test19.in','testdir') +:exe "cd" cwd :/^results/,$w! test.out :q! ENDTEST diff --git a/src/testdir/test89.ok b/src/testdir/test89.ok index 17bb5d764..90034758d 100644 --- a/src/testdir/test89.ok +++ b/src/testdir/test89.ok @@ -20,3 +20,9 @@ results: number relativenumber + +Testing findfile + +src/testdir/test19.in +testdir/test19.in +testdir/test19.in diff --git a/src/version.c b/src/version.c index e06aa6a62..ea51c1847 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1297, +/**/ 1296, /**/ 1295, |