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.
* 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];
return ret;
}
-void
+int
xregcomp (regex_t *preg, const char *regex, int cflags)
{
int rerr;
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
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