diff options
author | Paul Ackersviller <packersv@users.sourceforge.net> | 2007-11-18 19:08:14 +0000 |
---|---|---|
committer | Paul Ackersviller <packersv@users.sourceforge.net> | 2007-11-18 19:08:14 +0000 |
commit | d14a675a8459e1e1ae6e9862cb9a38dcceec5c4a (patch) | |
tree | edc2f68aaa8a61eaf791fb9286172dbb36d56a8c /Src | |
parent | 989467297538d941034280163c52d8d585249fd6 (diff) | |
download | zsh-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.c | 13 |
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))) { |