diff options
Diffstat (limited to 'Src/glob.c')
-rw-r--r-- | Src/glob.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/Src/glob.c b/Src/glob.c index 8bd2fc493..e5d8956e6 100644 --- a/Src/glob.c +++ b/Src/glob.c @@ -3476,7 +3476,7 @@ static void zshtokenize(char *s, int flags) { char *t; - int bslash = 0; + int bslash = 0, seen_brct = 0; for (; *s; s++) { cont: @@ -3507,21 +3507,35 @@ zshtokenize(char *s, int flags) *t = Inang; *s = Outang; break; + case '[': + if (bslash) + s[-1] = (flags & ZSHTOK_SUBST) ? Bnullkeep : Bnull; + else { + seen_brct = 1; + *s = Inbrack; + } + break; + case '-': + if (bslash) + s[-1] = (flags & ZSHTOK_SUBST) ? Bnullkeep : Bnull; + else if (seen_brct) /* see corresonding code in lex.c */ + *s = Dash; + break; case '(': case '|': case ')': if (flags & ZSHTOK_SHGLOB) break; + /*FALLTHROUGH*/ case '>': case '^': case '#': case '~': - case '[': case ']': case '*': case '?': case '=': - for (t = ztokens; *t; t++) + for (t = ztokens; *t; t++) { if (*t == *s) { if (bslash) s[-1] = (flags & ZSHTOK_SUBST) ? Bnullkeep : Bnull; @@ -3529,6 +3543,8 @@ zshtokenize(char *s, int flags) *s = (t - ztokens) + Pound; break; } + } + break; } bslash = 0; } |