about summary refs log tree commit diff
path: root/Src/glob.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2016-01-19 09:55:46 +0000
committerPeter Stephenson <pws@zsh.org>2016-01-19 09:55:46 +0000
commit8eb9070d6785f423dd9bdbbb0513aa47c8a08d62 (patch)
tree412d2d74ceabd14860d313e9338de48e7b5d8291 /Src/glob.c
parentd0cd9032d8b46051b490790a30e87a1e87c86670 (diff)
downloadzsh-8eb9070d6785f423dd9bdbbb0513aa47c8a08d62.tar.gz
zsh-8eb9070d6785f423dd9bdbbb0513aa47c8a08d62.tar.xz
zsh-8eb9070d6785f423dd9bdbbb0513aa47c8a08d62.zip
37678: Now possible to quote "-" in pattern range
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;
     }