svn commit: r355184 - stable/12/lib/libpmc
Emmanuel Vadot
manu at FreeBSD.org
Thu Nov 28 18:50:34 UTC 2019
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);
}
More information about the svn-src-all
mailing list