From 56e1904e45cc474a9858dc1205055008f8c63752 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Tue, 25 Mar 2008 17:47:10 +0000 Subject: fix optimisation of string matching with multibyte mode 24732: attempt to provide adequate space for sched ztrftime string with multibyte characters --- Src/Builtins/sched.c | 4 ++-- Src/params.c | 10 ++++++---- Src/pattern.c | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) (limited to 'Src') 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 -- cgit 1.4.1