chiark / gitweb /
path-util: fix path_is_mount_point() for symlinks
[elogind.git] / src / bootchart / store.c
index ed683e88d97472fb11c42ea5c55c2dd1cf1ca656..607cc5e74b2c5a86697290a8e72aca0bd4bfeebd 100644 (file)
@@ -25,8 +25,6 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <limits.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 #include <stdio.h>
 #include <string.h>
 #include <dirent.h>
@@ -146,7 +144,7 @@ void log_sample(int sample, struct list_sample_data **ptr) {
                 /* block stuff */
                 vmstat = openat(procfd, "vmstat", O_RDONLY);
                 if (vmstat == -1) {
-                        log_error("Failed to open /proc/vmstat: %m");
+                        log_error_errno(errno, "Failed to open /proc/vmstat: %m");
                         exit(EXIT_FAILURE);
                 }
         }
@@ -178,7 +176,7 @@ vmstat_next:
                 /* overall CPU utilization */
                 schedstat = openat(procfd, "schedstat", O_RDONLY);
                 if (schedstat == -1) {
-                        log_error("Failed to open /proc/schedstat: %m");
+                        log_error_errno(errno, "Failed to open /proc/schedstat: %m");
                         exit(EXIT_FAILURE);
                 }
         }
@@ -192,12 +190,14 @@ vmstat_next:
 
         m = buf;
         while (m) {
+                int r;
+
                 if (sscanf(m, "%s %*s %*s %*s %*s %*s %*s %s %s", key, rt, wt) < 3)
                         goto schedstat_next;
 
                 if (strstr(key, "cpu")) {
-                        c = atoi((const char*)(key+3));
-                        if (c > MAXCPUS)
+                        r = safe_atoi((const char*)(key+3), &c);
+                        if (r < 0 || c > MAXCPUS -1)
                                 /* Oops, we only have room for MAXCPUS data */
                                 break;
                         sampledata->runtime[c] = atoll(rt);