summaryrefslogtreecommitdiff
path: root/runner/settings.c
diff options
context:
space:
mode:
authorLyude Paul <lyude@redhat.com>2019-05-09 13:06:41 -0400
committerLyude Paul <lyude@redhat.com>2019-05-10 12:16:59 -0400
commit709bd6869e2aff01a67eef729f9dc330f404387e (patch)
treea759f1115d02e96070d24cd12953110ae675ae11 /runner/settings.c
parent159c69e5318e934b5f1d83939191c8756280b758 (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.c26
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);