diff src/misc2.c @ 5108:cb0a5c9c0f9b v7.3.1297

updated for version 7.3.1297 Problem: findfile() directory matching does not work when a star follows text. (Markus Braun) Solution: Make a wildcard work properly. (Christian Brabandt)
author Bram Moolenaar <bram@vim.org>
date Wed, 03 Jul 2013 17:14:00 +0200
parents 66803af09906
children dafd77a15d44
line wrap: on
line diff
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -4679,8 +4679,58 @@ vim_findfile_init(path, filename, stopdi
     }
     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