diff options
author | Axel Beckert <abe@deuxchevaux.org> | 2016-01-24 17:19:53 +0100 |
---|---|---|
committer | Axel Beckert <abe@deuxchevaux.org> | 2016-01-24 17:19:53 +0100 |
commit | 86ca06fb4b5a835caac37700952207db4c5073cd (patch) | |
tree | c2686e6d126d59052310c6bb7cd8df6d76fa0fca /Src/glob.c | |
parent | 370659ae9ae918a07a7950bbc2827b2593126f7d (diff) | |
parent | d18ce35d060163ea0d531170b65e1c38311af166 (diff) | |
download | zsh-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.c | 17 |
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; |