Signed-off-by: Ján Tomko <jtomko@xxxxxxxxxx> --- src/util/virstring.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/util/virstring.c b/src/util/virstring.c index 283cf8c8d8..3da793c87a 100644 --- a/src/util/virstring.c +++ b/src/util/virstring.c @@ -1017,29 +1017,27 @@ virStringSearch(const char *str, size_t max_matches, char ***matches) { - regex_t re; - regmatch_t rem; + g_autoptr(GRegex) regex = NULL; + g_autoptr(GError) err = NULL; + g_autoptr(GMatchInfo) info = NULL; size_t nmatches = 0; ssize_t ret = -1; - int rv = -1; *matches = NULL; VIR_DEBUG("search '%s' for '%s'", str, regexp); - if ((rv = regcomp(&re, regexp, REG_EXTENDED)) != 0) { - char error[100]; - regerror(rv, &re, error, sizeof(error)); + regex = g_regex_new(regexp, 0, 0, &err); + if (!regex) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("Error while compiling regular expression '%s': %s"), - regexp, error); + _("Failed to compile regex %s"), err->message); return -1; } - if (re.re_nsub != 1) { + if (g_regex_get_capture_count(regex) != 1) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("Regular expression '%s' must have exactly 1 match group, not %zu"), - regexp, re.re_nsub); + _("Regular expression '%s' must have exactly 1 match group, not %d"), + regexp, g_regex_get_capture_count(regex)); goto cleanup; } @@ -1051,28 +1049,27 @@ virStringSearch(const char *str, while ((nmatches - 1) < max_matches) { char *match; + int endpos; - if (regexec(&re, str, 1, &rem, 0) != 0) + if (!g_regex_match(regex, str, 0, &info)) break; if (VIR_EXPAND_N(*matches, nmatches, 1) < 0) goto cleanup; - if (VIR_STRNDUP(match, str + rem.rm_so, - rem.rm_eo - rem.rm_so) < 0) - goto cleanup; + match = g_match_info_fetch(info, 1); VIR_DEBUG("Got '%s'", match); (*matches)[nmatches-2] = match; - str = str + rem.rm_eo; + g_match_info_fetch_pos(info, 1, NULL, &endpos); + str += endpos; } ret = nmatches - 1; /* don't count the trailing null */ cleanup: - regfree(&re); if (ret < 0) { virStringListFree(*matches); *matches = NULL; -- 2.21.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list