svn commit: r354549 - head/lib/libpmc
Emmanuel Vadot
manu at FreeBSD.org
Fri Nov 8 16:56:49 UTC 2019
Author: manu
Date: Fri Nov 8 16:56:48 2019
New Revision: 354549
URL: https://svnweb.freebsd.org/changeset/base/354549
Log:
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
MFC after: 1 week
Modified:
head/lib/libpmc/libpmc_pmu_util.c
Modified: head/lib/libpmc/libpmc_pmu_util.c
==============================================================================
--- head/lib/libpmc/libpmc_pmu_util.c Fri Nov 8 16:30:55 2019 (r354548)
+++ head/lib/libpmc/libpmc_pmu_util.c Fri Nov 8 16:56:48 2019 (r354549)
@@ -165,8 +165,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 +182,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-head
mailing list