diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/cregex.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/cregex.c b/src/cregex.c index 17284dfe..849601da 100644 --- a/src/cregex.c +++ b/src/cregex.c @@ -344,7 +344,7 @@ static void evaluntil(Parser *par, Token type); static int bldcclass(Parser *par); static void -rcerror(Parser *par, cregex_error_t err) +rcerror(Parser *par, cregex_result err) { par->error = err; longjmp(par->regkaboom, 1); @@ -736,13 +736,14 @@ bldcclass(Parser *par) int inv = par->exprp[1] == '^', off = 1 + inv; for (unsigned i = 0; i < (sizeof cls/sizeof *cls); ++i) if (!strncmp(par->exprp + off, cls[i].c, cls[i].n)) { - if (par->rune_type == IRUNE && (cls[i].r == ASC_lo || cls[i].r == ASC_up)) - rune = ASC_al + inv; - else - rune = cls[i].r + inv; + rune = cls[i].r; par->exprp += off + cls[i].n; break; } + if (par->rune_type == IRUNE && (rune == ASC_lo || rune == ASC_up)) + rune = ASC_al; + if (inv && rune != '[') + rune += 1; } } *ep++ = rune; @@ -1192,8 +1193,7 @@ int cregex_compile(cregex *self, const char* pattern, int cflags) { Parser par; self->prog = regcomp1(self->prog, &par, pattern, cflags); - self->error = par.error; - return self->prog ? cre_success : par.error; + return self->error = par.error; } int |
