summaryrefslogtreecommitdiff
path: root/Src/glob.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/glob.c')
-rw-r--r--Src/glob.c22
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;
}