summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <bram@vim.org>2011-07-27 17:31:47 +0200
committerBram Moolenaar <bram@vim.org>2011-07-27 17:31:47 +0200
commit3c915737ed2d55df4d1ed6432694eb3ca64ca617 (patch)
tree6fe3bece906b930c7defa375303ef6fce62a6a54
parent7fa2184885796697afb41dda9713e3066ad4b9f2 (diff)
downloadvim-3c915737ed2d55df4d1ed6432694eb3ca64ca617.tar.gz
updated for version 7.3.264v7.3.264v7-3-264
Problem: When the current directory name contains wildcard characters, such as "foo[with]bar", the tags file can't be found. (Jeremy Erickson) Solution: When searching for matching files also match without expanding wildcards. This is a bit of a hack.
-rw-r--r--src/misc1.c10
-rw-r--r--src/misc2.c10
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h1
4 files changed, 16 insertions, 7 deletions
diff --git a/src/misc1.c b/src/misc1.c
index a573b3b9..a3a20597 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -9119,7 +9119,9 @@ dos_expandpath(
* all entries found with "matchname". */
if ((p[0] != '.' || starts_with_dot)
&& (matchname == NULL
- || vim_regexec(&regmatch, p, (colnr_T)0)))
+ || vim_regexec(&regmatch, p, (colnr_T)0)
+ || ((flags & EW_NOTWILD)
+ && fnamencmp(path + (s - buf), p, e - s) == 0)))
{
#ifdef WIN3264
STRCPY(s, p);
@@ -9323,7 +9325,7 @@ unix_expandpath(gap, path, wildoff, flags, didstar)
e = p;
*e = NUL;
- /* now we have one wildcard component between "s" and "e" */
+ /* Now we have one wildcard component between "s" and "e". */
/* Remove backslashes between "wildoff" and the start of the wildcard
* component. */
for (p = buf + wildoff; p < s; ++p)
@@ -9390,7 +9392,9 @@ unix_expandpath(gap, path, wildoff, flags, didstar)
if (dp == NULL)
break;
if ((dp->d_name[0] != '.' || starts_with_dot)
- && vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0))
+ && (vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0)
+ || ((flags & EW_NOTWILD)
+ && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
{
STRCPY(s, dp->d_name);
len = STRLEN(buf);
diff --git a/src/misc2.c b/src/misc2.c
index dfb1fc48..f91a64ac 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -4653,9 +4653,8 @@ vim_findfile_stopdir(buf)
{
if (r_ptr[0] == '\\' && r_ptr[1] == ';')
{
- /* overwrite the escape char,
- * use STRLEN(r_ptr) to move the trailing '\0'
- */
+ /* Overwrite the escape char,
+ * use STRLEN(r_ptr) to move the trailing '\0'. */
STRMOVE(r_ptr, r_ptr + 1);
r_ptr++;
}
@@ -4914,10 +4913,13 @@ vim_findfile(search_ctx_arg)
stackp->ffs_filearray_size = 0;
}
else
+ /* Add EW_NOTWILD because the expanded path may contain
+ * wildcard characters that are to be taken literally.
+ * This is a bit of a hack. */
expand_wildcards((dirptrs[1] == NULL) ? 1 : 2, dirptrs,
&stackp->ffs_filearray_size,
&stackp->ffs_filearray,
- EW_DIR|EW_ADDSLASH|EW_SILENT);
+ EW_DIR|EW_ADDSLASH|EW_SILENT|EW_NOTWILD);
stackp->ffs_filearray_cur = 0;
stackp->ffs_stage = 0;
diff --git a/src/version.c b/src/version.c
index fc515573..dbd76b35 100644
--- a/src/version.c
+++ b/src/version.c
@@ -710,6 +710,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 264,
+/**/
263,
/**/
262,
diff --git a/src/vim.h b/src/vim.h
index a1a97081..127387aa 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -816,6 +816,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
#define EW_PATH 0x80 /* search in 'path' too */
#define EW_ICASE 0x100 /* ignore case */
#define EW_NOERROR 0x200 /* no error for bad regexp */
+#define EW_NOTWILD 0x400 /* add match with literal name if exists */
/* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
* is used when executing commands and EW_SILENT for interactive expanding. */