From 910dc80a58cf3bcf91c51a72f117a46a7c9f77cf Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Mon, 18 Oct 1999 09:57:00 +0000 Subject: zsh-workers/8319 --- Src/cond.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'Src/cond.c') diff --git a/Src/cond.c b/Src/cond.c index c0a3235be..caa675f2e 100644 --- a/Src/cond.c +++ b/Src/cond.c @@ -107,16 +107,15 @@ evalcond(Cond c) left = dupstring((char *) c->left); singsub(&left); untokenize(left); - if (c->right) { + if (c->right && c->type != COND_STREQ && c->type != COND_STRNEQ) { right = dupstring((char *) c->right); singsub(&right); - if (c->type != COND_STREQ && c->type != COND_STRNEQ) - untokenize(right); + untokenize(right); } if (tracingcond) { if (c->type < COND_MOD) { - char *rt = (char *)right; + char *rt = (char *) right; if (c->type == COND_STREQ || c->type == COND_STRNEQ) { rt = dupstring(rt); untokenize(rt); @@ -168,9 +167,29 @@ evalcond(Cond c) switch (c->type) { case COND_STREQ: - return matchpat(left, right); case COND_STRNEQ: - return !matchpat(left, right); + { + Patprog pprog = c->prog; + int test; + + if (pprog == dummy_patprog1 || pprog == dummy_patprog2) { + char *opat; + int save; + + right = opat = dupstring((char *) c->right); + singsub(&right); + save = (!strcmp(opat, right) && pprog != dummy_patprog2); + + if (!(pprog = patcompile(right, (save ? PAT_ZDUP : PAT_STATIC), + NULL))) + zerr("bad pattern: %s", right, 0); + else if (save) + c->prog = pprog; + } + test = (pprog && pattry(pprog, left)); + + return (c->type == COND_STREQ ? test : !test); + } case COND_STRLT: return strcmp(left, right) < 0; case COND_STRGTR: -- cgit 1.4.1