mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
cpumf/lshwc: Use util_file_read_va function
Use util_file_read_va() function to read out the event number given the event file. Also use util_strdup() function to save the event name. This function terminates on Out Of Memory condition. Signed-off-by: Thomas Richter <tmricht@linux.ibm.com> Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
committed by
Jan Höppner
parent
f2d5b649e1
commit
5cd9ad13e5
+5
-24
@@ -38,6 +38,7 @@
|
|||||||
#include "lib/util_path.h"
|
#include "lib/util_path.h"
|
||||||
#include "lib/util_scandir.h"
|
#include "lib/util_scandir.h"
|
||||||
#include "lib/util_libc.h"
|
#include "lib/util_libc.h"
|
||||||
|
#include "lib/util_file.h"
|
||||||
#include "lib/libcpumf.h"
|
#include "lib/libcpumf.h"
|
||||||
|
|
||||||
#include "lshwc.h"
|
#include "lshwc.h"
|
||||||
@@ -62,25 +63,6 @@ static struct ctrname { /* List of defined counters */
|
|||||||
unsigned long *ccv; /* Per CPU counter value */
|
unsigned long *ccv; /* Per CPU counter value */
|
||||||
} ctrname[MAXCTRS];
|
} ctrname[MAXCTRS];
|
||||||
|
|
||||||
/* Open file and extract counter number */
|
|
||||||
static int read_counter(const char *p)
|
|
||||||
{
|
|
||||||
FILE *fp = fopen(p, "r");
|
|
||||||
int rc = 0, ctr;
|
|
||||||
|
|
||||||
if (fp) {
|
|
||||||
rc = fscanf(fp, "event=%x", &ctr);
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
||||||
return rc == 1 ? ctr : -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int add_countername(char *name, int nr)
|
|
||||||
{
|
|
||||||
ctrname[nr].name = strdup(name);
|
|
||||||
return ctrname[nr].name ? 0 : -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool read_counternames(void)
|
static bool read_counternames(void)
|
||||||
{
|
{
|
||||||
struct dirent **namelist = NULL;
|
struct dirent **namelist = NULL;
|
||||||
@@ -96,13 +78,12 @@ static bool read_counternames(void)
|
|||||||
}
|
}
|
||||||
for (i = 0; i < count && ctr >= 0; i++) {
|
for (i = 0; i < count && ctr >= 0; i++) {
|
||||||
util_asprintf(&ctrpath, "%s/%s", path, namelist[i]->d_name);
|
util_asprintf(&ctrpath, "%s/%s", path, namelist[i]->d_name);
|
||||||
ctr = read_counter(ctrpath);
|
if (util_file_read_va(ctrpath, "event=%x", &ctr) == 1)
|
||||||
|
ctrname[ctr].name = util_strdup(namelist[i]->d_name);
|
||||||
|
else
|
||||||
|
warnx("Cannot parse %s", ctrpath);
|
||||||
free(ctrpath);
|
free(ctrpath);
|
||||||
if (ctr >= 0)
|
|
||||||
ctr = add_countername(namelist[i]->d_name, ctr);
|
|
||||||
}
|
}
|
||||||
if (ctr < 0)
|
|
||||||
warnx("Cannot parse %s", path);
|
|
||||||
util_scandir_free(namelist, count);
|
util_scandir_free(namelist, count);
|
||||||
free(path);
|
free(path);
|
||||||
return ctr < 0 ? false : true;
|
return ctr < 0 ? false : true;
|
||||||
|
|||||||
Reference in New Issue
Block a user