aboutsummaryrefslogtreecommitdiff
path: root/match.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2021-05-20 00:33:11 -0700
committerBruce Hill <bruce@bruce-hill.com>2021-05-20 00:33:11 -0700
commitd9f0a92839000018eaaf7ebb34ed0260792fd116 (patch)
tree1e406906be6dd96d2741d8922e5d0c1c10351f6a /match.c
parent355e06a58e918c6c1d39902b0a14029a16c323ba (diff)
Added (!) syntax for errors with proper opcode support
Diffstat (limited to 'match.c')
-rw-r--r--match.c6
1 files changed, 5 insertions, 1 deletions
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;