mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
Add wrappers for regcomp and regexec to xutil.c.
These will be handy for some parsing.
This commit is contained in:
parent
22b2265cac
commit
d008389a4a
2 changed files with 46 additions and 0 deletions
39
xutil.c
39
xutil.c
|
@ -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;
|
||||||
|
}
|
||||||
|
|
7
xutil.h
7
xutil.h
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue