summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/misc2.c54
-rw-r--r--src/testdir/test89.in18
-rw-r--r--src/testdir/test89.ok6
-rw-r--r--src/version.c2
4 files changed, 75 insertions, 5 deletions
diff --git a/src/misc2.c b/src/misc2.c
index 196641fa..c63344f0 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 8e53c917..fc3a9a29 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 17bb5d76..90034758 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 e06aa6a6..ea51c184 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,