From d9f0a92839000018eaaf7ebb34ed0260792fd116 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Thu, 20 May 2021 00:33:11 -0700 Subject: Added (!) syntax for errors with proper opcode support --- match.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'match.c') diff --git a/match.c b/match.c index f8f0ab4..9f31975 100644 --- a/match.c +++ b/match.c @@ -201,7 +201,7 @@ static match_t *match(def_t *defs, file_t *f, const char *str, pat_t *pat, bool } case BP_STRING: { if (&str[pat->len] > f->end) return NULL; - if ((ignorecase ? memicmp : memcmp)(str, pat->args.string, (size_t)pat->len) != 0) + if (pat->len > 0 && (ignorecase ? memicmp : memcmp)(str, pat->args.string, (size_t)pat->len) != 0) return NULL; return new_match(pat, str, str + pat->len, NULL); } @@ -476,6 +476,10 @@ static match_t *match(def_t *defs, file_t *f, const char *str, pat_t *pat, bool return new_match(pat, start, &str[dents], NULL); } + case BP_ERROR: { + match_t *p = match(defs, f, str, pat->args.pat, ignorecase); + return p ? new_match(pat, str, p->end, p) : NULL; + } default: { errx(EXIT_FAILURE, "Unknown pattern type: %d", pat->type); return NULL; -- cgit v1.2.3