about summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
authorPaul Ackersviller <packersv@users.sourceforge.net>2007-11-18 19:08:14 +0000
committerPaul Ackersviller <packersv@users.sourceforge.net>2007-11-18 19:08:14 +0000
commitd14a675a8459e1e1ae6e9862cb9a38dcceec5c4a (patch)
treeedc2f68aaa8a61eaf791fb9286172dbb36d56a8c /Src
parent989467297538d941034280163c52d8d585249fd6 (diff)
downloadzsh-d14a675a8459e1e1ae6e9862cb9a38dcceec5c4a.tar.gz
zsh-d14a675a8459e1e1ae6e9862cb9a38dcceec5c4a.tar.xz
zsh-d14a675a8459e1e1ae6e9862cb9a38dcceec5c4a.zip
Merge of 23363: fake-files style now takes pattern.
Diffstat (limited to 'Src')
-rw-r--r--Src/Zle/computil.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c
index 9ed1e83f3..84c4a806b 100644
--- a/Src/Zle/computil.c
+++ b/Src/Zle/computil.c
@@ -4169,14 +4169,20 @@ cfp_add_sdirs(LinkList final, LinkList orig, char *skipped,
 	char *m, *f, *p, *t, *a, c;
 	int sl = strlen(skipped) + 1;
 	struct stat st1, st2;
+	Patprog pprog;
 
 	for (; (f = *fake); fake++) {
 	    f = dupstring(f);
 	    for (p = t = f; *p; p++) {
 		if (*p == ':')
 		    break;
-		else if (*p == '\\' && p[1])
+		else if (*p == '\\' && p[1] == ':') {
+		    /*
+		     * strip quoted colons here; rely
+		     * on tokenization to strip other backslashes
+		     */
 		    p++;
+		}
 		*t++ = *p;
 	    }
 	    if (*p) {
@@ -4184,9 +4190,12 @@ cfp_add_sdirs(LinkList final, LinkList orig, char *skipped,
 		if (!*p)
 		    continue;
 
+		tokenize(f);
+		pprog = patcompile(f, PAT_STATIC, NULL);
+		untokenize(f);
 		for (node = firstnode(orig); node; incnode(node)) {
 		    if ((m = (char *) getdata(node)) &&
-			(!strcmp(f, m) ||
+			((pprog ? pattry(pprog, m) : !strcmp(f, m)) ||
 			 (!stat(f, &st1) && !stat((*m ? m : "."), &st2) &&
 			  st1.st_dev == st2.st_dev &&
 			  st1.st_ino == st2.st_ino))) {