turbostat: Fix parsing warnings
authorRyan McCabe <rmccabe@redhat.com>
Thu, 7 Nov 2019 18:58:37 +0000 (13:58 -0500)
committerRyan McCabe <rmccabe@redhat.com>
Thu, 7 Nov 2019 19:07:14 +0000 (14:07 -0500)
Fix warnings generated by the turbostat plugin due to trailing
characters while picking out the first number in a range.

ChangeLog: turbostat plugin: Fix parsing warnings.
PR: #2365
Signed-off-by: Ryan McCabe <rmccabe@redhat.com>
src/turbostat.c

index 19a5111..8bbb92b 100644 (file)
@@ -1103,7 +1103,11 @@ static int __attribute__((format(printf, 1, 2)))
 parse_int_file(const char *fmt, ...) {
   va_list args;
   char path[PATH_MAX];
+  char buf[256];
   int len;
+  value_t v;
+  char *c;
+  FILE *fp;
 
   va_start(args, fmt);
   len = vsnprintf(path, sizeof(path), fmt, args);
@@ -1113,8 +1117,29 @@ parse_int_file(const char *fmt, ...) {
     return -1;
   }
 
-  value_t v;
-  if (parse_value_file(path, &v, DS_TYPE_DERIVE) != 0) {
+  fp = fopen(path, "r");
+  if (fp == NULL) {
+    ERROR("turbostat plugin: unable to open: '%s': %s", path, strerror(errno));
+    return -1;
+  }
+
+  if (fgets(buf, sizeof(buf), fp) == NULL) {
+    ERROR("turbostat plugin: unable to read: '%s': %s", path, strerror(errno));
+    fclose(fp);
+    return -1;
+  }
+  fclose(fp);
+
+  /* We only care about the first integer in the range */
+  c = strchr(buf, '-');
+  if (c != NULL)
+    *c = '\0';
+  c = strchr(buf, ',');
+  if (c != NULL)
+    *c = '\0';
+  strstripnewline(buf);
+
+  if (parse_value(buf, &v, DS_TYPE_DERIVE) != 0) {
     ERROR("turbostat plugin: Parsing \"%s\" failed.", path);
     return -1;
   }