summaryrefslogtreecommitdiff
path: root/Src/glob.c
diff options
context:
space:
mode:
authorAxel Beckert <abe@deuxchevaux.org>2016-01-24 17:19:53 +0100
committerAxel Beckert <abe@deuxchevaux.org>2016-01-24 17:19:53 +0100
commit86ca06fb4b5a835caac37700952207db4c5073cd (patch)
treec2686e6d126d59052310c6bb7cd8df6d76fa0fca /Src/glob.c
parent370659ae9ae918a07a7950bbc2827b2593126f7d (diff)
parentd18ce35d060163ea0d531170b65e1c38311af166 (diff)
downloadzsh-86ca06fb4b5a835caac37700952207db4c5073cd.tar.gz
zsh-86ca06fb4b5a835caac37700952207db4c5073cd.zip
Merge branch 'upstream' at 5.2-dev-1 into debian
Diffstat (limited to 'Src/glob.c')
-rw-r--r--Src/glob.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/Src/glob.c b/Src/glob.c
index 94b3f620d..69de15544 100644
--- a/Src/glob.c
+++ b/Src/glob.c
@@ -1230,7 +1230,7 @@ zglob(LinkList list, LinkNode np, int nountok)
char *s;
int sense, qualsfound;
off_t data;
- char *sdata, *newcolonmod;
+ char *sdata, *newcolonmod, *ptr;
int (*func) _((char *, Statptr, off_t, char *));
/*
@@ -1273,6 +1273,9 @@ zglob(LinkList list, LinkNode np, int nountok)
*s++ = 0;
if (qualsfound == 2)
s += 2;
+ for (ptr = s; *ptr; ptr++)
+ if (*ptr == Dash)
+ *ptr = '-';
while (*s && !newcolonmod) {
func = (int (*) _((char *, Statptr, off_t, char *)))0;
if (idigit(*s)) {
@@ -3512,6 +3515,7 @@ zshtokenize(char *s, int flags)
case ')':
if (flags & ZSHTOK_SHGLOB)
break;
+ /*FALLTHROUGH*/
case '>':
case '^':
case '#':
@@ -3521,7 +3525,9 @@ zshtokenize(char *s, int flags)
case '*':
case '?':
case '=':
- for (t = ztokens; *t; t++)
+ case '-':
+ case '!':
+ for (t = ztokens; *t; t++) {
if (*t == *s) {
if (bslash)
s[-1] = (flags & ZSHTOK_SUBST) ? Bnullkeep : Bnull;
@@ -3529,6 +3535,8 @@ zshtokenize(char *s, int flags)
*s = (t - ztokens) + Pound;
break;
}
+ }
+ break;
}
bslash = 0;
}
@@ -3802,13 +3810,16 @@ qualsheval(char *name, UNUSED(struct stat *buf), UNUSED(off_t days), char *str)
if ((prog = parse_string(str, 0))) {
int ef = errflag, lv = lastval, ret;
+ int cshglob = badcshglob;
unsetparam("reply");
setsparam("REPLY", ztrdup(name));
+ badcshglob = 0;
execode(prog, 1, 0, "globqual");
- ret = lastval;
+ if ((ret = lastval))
+ badcshglob |= cshglob;
/* Retain any user interrupt error status */
errflag = ef | (errflag & ERRFLAG_INT);
lastval = lv;