[augeas-devel] [PATCH 7/8] * src/regexp.c (regexp_minus): respect nocase flags
lutter at redhat.com
lutter at redhat.com
Wed Jan 13 18:40:44 UTC 2010
From: David Lutterkort <lutter at redhat.com>
---
src/regexp.c | 32 ++++++++++++++++++++++++--------
1 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/src/regexp.c b/src/regexp.c
index d4d5f89..3168182 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -306,23 +306,39 @@ regexp_concat_n(struct info *info, int n, struct regexp **r) {
return NULL;
}
+static struct fa *regexp_to_fa(struct regexp *r) {
+ const char *p = r->pattern->str;
+ int ret;
+ struct fa *fa = NULL;
+
+ ret = fa_compile(p, strlen(p), &fa);
+ ERR_NOMEM(ret == REG_ESPACE, r->info);
+ BUG_ON(ret != REG_NOERROR, r->info, NULL);
+
+ if (r->nocase) {
+ ret = fa_nocase(fa);
+ ERR_NOMEM(ret < 0, r->info);
+ }
+ return fa;
+
+ error:
+ fa_free(fa);
+ return NULL;
+}
+
struct regexp *
regexp_minus(struct info *info, struct regexp *r1, struct regexp *r2) {
- const char *p1 = r1->pattern->str;
- const char *p2 = r2->pattern->str;
struct regexp *result = NULL;
struct fa *fa = NULL, *fa1 = NULL, *fa2 = NULL;
int r;
char *s = NULL;
size_t s_len;
- r = fa_compile(p1, strlen(p1), &fa1);
- if (r != REG_NOERROR)
- goto error;
+ fa1 = regexp_to_fa(r1);
+ ERR_BAIL(r1->info);
- r = fa_compile(p2, strlen(p2), &fa2);
- if (r != REG_NOERROR)
- goto error;
+ fa2 = regexp_to_fa(r2);
+ ERR_BAIL(r2->info);
fa = fa_minus(fa1, fa2);
if (fa == NULL)
--
1.6.5.2
More information about the augeas-devel
mailing list