Author: manu Date: Thu Nov 28 18:50:33 2019 New Revision: 355184 URL: https://svnweb.freebsd.org/changeset/base/355184
Log: MFC r354549-r354550 r354549: libpmc: Match on the cpuid with a regex The CPUID is, or can be, a regex to be matched. Use regex from libc instead of strcmp Tested-by: gallatin r354550: libpmc: Forgot regex.h Reported by: ci X-MFC-With: r354549 Modified: stable/12/lib/libpmc/libpmc_pmu_util.c Directory Properties: stable/12/ (props changed) Modified: stable/12/lib/libpmc/libpmc_pmu_util.c ============================================================================== --- stable/12/lib/libpmc/libpmc_pmu_util.c Thu Nov 28 18:44:06 2019 (r355183) +++ stable/12/lib/libpmc/libpmc_pmu_util.c Thu Nov 28 18:50:33 2019 (r355184) @@ -34,6 +34,7 @@ #include <stddef.h> #include <stdlib.h> #include <limits.h> +#include <regex.h> #include <string.h> #include <pmc.h> #include <pmclog.h> @@ -165,8 +166,11 @@ struct pmu_event_desc { static const struct pmu_events_map * pmu_events_map_get(const char *cpuid) { - size_t s; + regex_t re; + regmatch_t pmatch[1]; + size_t s, len; char buf[64]; + int match; const struct pmu_events_map *pme; if (cpuid != NULL) { @@ -179,9 +183,20 @@ pmu_events_map_get(const char *cpuid) (void *)NULL, 0) == -1) return (NULL); } - for (pme = pmu_events_map; pme->cpuid != NULL; pme++) - if (strcmp(buf, pme->cpuid) == 0) - return (pme); + for (pme = pmu_events_map; pme->cpuid != NULL; pme++) { + if (regcomp(&re, pme->cpuid, REG_EXTENDED) != 0) { + printf("regex '%s' failed to compile, ignoring\n", + pme->cpuid); + continue; + } + match = regexec(&re, buf, 1, pmatch, 0); + regfree(&re); + if (match == 0) { + len = pmatch[0].rm_eo - pmatch[0].rm_so; + if(len == strlen(buf)) + return (pme); + } + } return (NULL); } _______________________________________________ svn-src-all@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"