Add wrappers for regcomp and regexec to xutil.c.

These will be handy for some parsing.
This commit is contained in:
Carl Worth 2009-10-21 15:06:52 -07:00
parent 22b2265cac
commit d008389a4a
2 changed files with 46 additions and 0 deletions

39
xutil.c
View file

@ -92,3 +92,42 @@ xstrndup (const char *s, size_t n)
return ret; return ret;
} }
void
xregcomp (regex_t *preg, const char *regex, int cflags)
{
int rerr;
rerr = regcomp (preg, regex, cflags);
if (rerr) {
size_t error_size = regerror (rerr, preg, NULL, 0);
char *error = xmalloc (error_size);
regerror (rerr, preg, error, error_size);
fprintf (stderr, "Internal error compiling regex %s: %s\n",
regex, error);
free (error);
exit (1);
}
}
int
xregexec (const regex_t *preg, const char *string,
size_t nmatch, regmatch_t pmatch[], int eflags)
{
int i, rerr;
rerr = regexec (preg, string, nmatch, pmatch, eflags);
if (rerr)
return rerr;
for (i = 0; i < nmatch; i++) {
if (pmatch[i].rm_so == -1) {
fprintf (stderr, "Internal error matching regex against %s: Sub-match %d not found\n",
string, i);
exit (1);
}
}
return 0;
}

View file

@ -41,4 +41,11 @@ xstrdup (const char *s);
char * char *
xstrndup (const char *s, size_t n); xstrndup (const char *s, size_t n);
void
xregcomp (regex_t *preg, const char *regex, int cflags);
int
xregexec (const regex_t *preg, const char *string,
size_t nmatch, regmatch_t pmatch[], int eflags);
#endif #endif