about summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2008-03-25 17:47:10 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2008-03-25 17:47:10 +0000
commit56e1904e45cc474a9858dc1205055008f8c63752 (patch)
tree075e089f92f9916e36feee06c38321c58dd1a97d /Src
parent238df34af407d755a9c6fc94cade1272c7ea5b62 (diff)
downloadzsh-56e1904e45cc474a9858dc1205055008f8c63752.tar.gz
zsh-56e1904e45cc474a9858dc1205055008f8c63752.tar.xz
zsh-56e1904e45cc474a9858dc1205055008f8c63752.zip
fix optimisation of string matching with multibyte mode
24732: attempt to provide adequate space for sched ztrftime string with
multibyte characters
Diffstat (limited to 'Src')
-rw-r--r--Src/Builtins/sched.c4
-rw-r--r--Src/params.c10
-rw-r--r--Src/pattern.c2
3 files changed, 9 insertions, 7 deletions
diff --git a/Src/Builtins/sched.c b/Src/Builtins/sched.c
index df4b9ecf9..3ddde6558 100644
--- a/Src/Builtins/sched.c
+++ b/Src/Builtins/sched.c
@@ -205,13 +205,13 @@ bin_sched(char *nam, char **argv, UNUSED(Options ops), UNUSED(int func))
     /* given no arguments, display the schedule list */
     if (!*argptr) {
 	for (sn = 1, sch = schedcmds; sch; sch = sch->next, sn++) {
-	    char tbuf[40], *flagstr, *endstr;
+	    char tbuf[60], *flagstr, *endstr;
 	    time_t t;
 	    struct tm *tmp;
 
 	    t = sch->time;
 	    tmp = localtime(&t);
-	    ztrftime(tbuf, 20, "%a %b %e %k:%M:%S", tmp);
+	    ztrftime(tbuf, 40, "%a %b %e %k:%M:%S", tmp);
 	    if (sch->flags & SCHEDFLAG_TRASH_ZLE)
 		flagstr = "-o ";
 	    else
diff --git a/Src/params.c b/Src/params.c
index d7135c438..bbacb5476 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -1007,7 +1007,7 @@ getarg(char **str, int *inv, Value v, int a2, zlong *w,
     int hasbeg = 0, word = 0, rev = 0, ind = 0, down = 0, l, i, ishash;
     int keymatch = 0, needtok = 0, arglen, len;
     char *s = *str, *sep = NULL, *t, sav, *d, **ta, **p, *tt, c;
-    zlong num = 1, beg = 0, r = 0;
+    zlong num = 1, beg = 0, r = 0, quote_arg = 0;
     Patprog pprog = NULL;
 
     ishash = (v->pm && PM_TYPE(v->pm->node.flags) == PM_HASHED);
@@ -1058,8 +1058,7 @@ getarg(char **str, int *inv, Value v, int a2, zlong *w,
 		sep = "\n";
 		break;
 	    case 'e':
-		/* Compatibility flag with no effect except to prevent *
-		 * special interpretation by getindex() of `*' or `@'. */
+		quote_arg = 1;
 		break;
 	    case 'n':
 		t = get_strarg(++s, &arglen);
@@ -1286,7 +1285,10 @@ getarg(char **str, int *inv, Value v, int a2, zlong *w,
 	    }
 	}
 	if (!keymatch) {
-	    tokenize(s);
+	    if (quote_arg)
+		untokenize(s);
+	    else
+		tokenize(s);
 	    remnulargs(s);
 	    pprog = patcompile(s, 0, NULL);
 	} else
diff --git a/Src/pattern.c b/Src/pattern.c
index 26b06513e..c9a93cd0e 100644
--- a/Src/pattern.c
+++ b/Src/pattern.c
@@ -511,7 +511,7 @@ patcompile(char *exp, int inflags, char **endexp)
 
     if (!(patflags & PAT_ANY)) {
 	/* Look for a really pure string, with no tokens at all. */
-	if (!patglobflags
+	if (!(patglobflags & ~GF_MULTIBYTE)
 #ifdef __CYGWIN__
 	    /*
 	     * If the OS treats files case-insensitively and we