diff options
author | Lyude Paul <lyude@redhat.com> | 2019-05-09 13:06:41 -0400 |
---|---|---|
committer | Lyude Paul <lyude@redhat.com> | 2019-05-10 12:16:59 -0400 |
commit | 709bd6869e2aff01a67eef729f9dc330f404387e (patch) | |
tree | a759f1115d02e96070d24cd12953110ae675ae11 /runner/settings.c | |
parent | 159c69e5318e934b5f1d83939191c8756280b758 (diff) |
runner: Use glib's regex utilities instead of POSIX ERE
POSIX ERE, while pretty standard is also very old and severely limited.
In fact, it's so limited that Intel CI's own test blacklist,
tests/intel-ci/blacklist.txt, doesn't even work with it due to the lack
of support for backreferences.
Since we're already using glib in other parts of igt, let's just start
using glib's regular expression matching instead of the POSIX regex API.
This gives us full perl compatible regular expressions and in turn, also
gives us python compatible regular expressions to match piglit.
Reviewed-by: Petri Latvala <petri.latvala@intel.com>
Signed-off-by: Lyude Paul <lyude@redhat.com>
Diffstat (limited to 'runner/settings.c')
-rw-r--r-- | runner/settings.c | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/runner/settings.c b/runner/settings.c index 25bcf531..ad38ae8d 100644 --- a/runner/settings.c +++ b/runner/settings.c @@ -187,23 +187,18 @@ static void usage(const char *extra_message, FILE *f) static bool add_regex(struct regex_list *list, char *new) { - regex_t *regex; - size_t buflen; - char *buf; - int s; - - regex = malloc(sizeof(*regex)); - - if ((s = regcomp(regex, new, - REG_EXTENDED | REG_NOSUB)) != 0) { - buflen = regerror(s, regex, NULL, 0); - buf = malloc(buflen); - regerror(s, regex, buf, buflen); + GRegex *regex; + GError *error = NULL; + + regex = g_regex_new(new, G_REGEX_OPTIMIZE, 0, &error); + if (error) { + char *buf = malloc(snprintf(NULL, 0, "Invalid regex '%s': %s", new, error->message) + 1); + + sprintf(buf, "Invalid regex '%s': %s", new, error->message); usage(buf, stderr); free(buf); - regfree(regex); - free(regex); + g_error_free(error); return false; } @@ -224,8 +219,7 @@ static void free_regexes(struct regex_list *regexes) for (i = 0; i < regexes->size; i++) { free(regexes->regex_strings[i]); - regfree(regexes->regexes[i]); - free(regexes->regexes[i]); + g_regex_unref(regexes->regexes[i]); } free(regexes->regex_strings); free(regexes->regexes); |