[PATCH] xregcomp: don't consider every regex compilation failure an internal error.
David Bremner
david at tethera.net
Sun Oct 23 14:51:13 PDT 2011
From: David Bremner <bremner at debian.org>
This pushes the error handling up one step, but makes the function
more flexible. Running out of memory still triggers an internal error,
in the spirit of other xutils functions.
---
And here is the promised modification of xregcomp. One issue I
thought about is that we now have a(nother) place where a library
routine is writing to stderr, not necessarily in the process of
shutting down.
notmuch-restore.c | 7 ++++---
util/xutil.c | 7 +++++--
util/xutil.h | 3 ++-
3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/notmuch-restore.c b/notmuch-restore.c
index ff1ebab..13b4325 100644
--- a/notmuch-restore.c
+++ b/notmuch-restore.c
@@ -88,9 +88,10 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[])
* non-space characters for the message-id, then one or more
* spaces, then a list of space-separated tags as a sequence of
* characters within literal '(' and ')'. */
- xregcomp (®ex,
- "^([^ ]+) \\(([^)]*)\\)$",
- REG_EXTENDED);
+ if ( xregcomp (®ex,
+ "^([^ ]+) \\(([^)]*)\\)$",
+ REG_EXTENDED) )
+ INTERNAL_ERROR("compile time constant regex failed.");
while ((line_len = getline (&line, &line_size, input)) != -1) {
regmatch_t match[3];
diff --git a/util/xutil.c b/util/xutil.c
index 15ff765..ac496da 100644
--- a/util/xutil.c
+++ b/util/xutil.c
@@ -99,7 +99,7 @@ xstrndup (const char *s, size_t n)
return ret;
}
-void
+int
xregcomp (regex_t *preg, const char *regex, int cflags)
{
int rerr;
@@ -110,9 +110,12 @@ xregcomp (regex_t *preg, const char *regex, int cflags)
char *error = xmalloc (error_size);
regerror (rerr, preg, error, error_size);
- INTERNAL_ERROR ("compiling regex %s: %s\n",
+ fprintf (stderr, "compiling regex %s: %s\n",
regex, error);
+ free (error);
+ return 1;
}
+ return 0;
}
int
diff --git a/util/xutil.h b/util/xutil.h
index fd77f73..9299256 100644
--- a/util/xutil.h
+++ b/util/xutil.h
@@ -43,7 +43,8 @@ xstrdup (const char *s);
char *
xstrndup (const char *s, size_t n);
-void
+/* Returns 0 for successful compilation, 1 otherwise */
+int
xregcomp (regex_t *preg, const char *regex, int cflags);
int
--
1.7.6.3
More information about the notmuch
mailing list