Make :find completion consistent between Unix and MS-Windows. Add a test.
(Nazri Ramliy)
diff --git a/src/misc1.c b/src/misc1.c
index 6f197f2..c8fb8eb 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -9321,7 +9321,7 @@
ga_init2(gap, (int)sizeof(char_u *), 1);
- if ((buf = alloc((int)(MAXPATHL))) == NULL)
+ if ((buf = alloc((int)MAXPATHL)) == NULL)
return;
while (*path_option != NUL)
@@ -9564,8 +9564,8 @@
}
/*
- * Calls globpath() or mch_expandpath() with 'path' values for the given
- * pattern and stores the result in gap.
+ * Calls globpath() with 'path' values for the given pattern and stores the
+ * result in "gap".
* Returns the total number of matches.
*/
static int
@@ -9574,18 +9574,12 @@
char_u *pattern;
int flags; /* EW_* flags */
{
- char_u **path_list;
char_u *curdir;
garray_T path_ga;
- int i;
-# ifdef WIN3264
- char_u *file_pattern;
-# else
char_u *files = NULL;
char_u *s; /* start */
char_u *e; /* end */
char_u *paths = NULL;
-# endif
if ((curdir = alloc((unsigned)MAXPATHL)) == NULL)
return 0;
@@ -9595,42 +9589,14 @@
vim_free(curdir);
if (path_ga.ga_len == 0)
return 0;
- path_list = (char_u **)(path_ga.ga_data);
-# ifdef WIN3264
- if ((file_pattern = alloc((unsigned)MAXPATHL)) == NULL)
+
+ paths = ga_concat_strings(&path_ga);
+ ga_clear_strings(&path_ga);
+ if (paths == NULL)
return 0;
- for (i = 0; i < path_ga.ga_len; i++)
- {
- if (STRLEN(path_list[i]) + STRLEN(pattern) + 2 > MAXPATHL)
- continue;
- STRCPY(file_pattern, path_list[i]);
- STRCAT(file_pattern, "/");
- STRCAT(file_pattern, pattern);
- mch_expandpath(gap, file_pattern, EW_DIR|EW_ADDSLASH|EW_FILE);
- }
- vim_free(file_pattern);
-# else
- for (i = 0; i < path_ga.ga_len; i++)
- {
- if (paths == NULL)
- {
- if ((paths = alloc((unsigned)(STRLEN(path_list[i]) + 1))) == NULL)
- return 0;
- STRCPY(paths, path_list[i]);
- }
- else
- {
- if ((paths = realloc(paths, (int)(STRLEN(paths)
- + STRLEN(path_list[i]) + 2))) == NULL)
- return 0;
- STRCAT(paths, ",");
- STRCAT(paths, path_list[i]);
- }
- }
files = globpath(paths, pattern, 0);
vim_free(paths);
-
if (files == NULL)
return 0;
@@ -9654,9 +9620,7 @@
s = e;
}
}
-
vim_free(files);
-# endif
return gap->ga_len;
}
@@ -9797,7 +9761,12 @@
{
#if defined(FEAT_SEARCHPATH)
if (*p != '.' && !vim_ispathsep(*p) && (flags & EW_PATH))
+ {
+ /* recursiveness is OK here */
+ recursive = FALSE;
add_pat = expand_in_path(&ga, p, flags);
+ recursive = TRUE;
+ }
else
#endif
add_pat = mch_expandpath(&ga, p, flags);