X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbootchart%2Fstore.c;h=607cc5e74b2c5a86697290a8e72aca0bd4bfeebd;hb=27cc6f166bdebc0e698fb692993b801db2618866;hp=ed683e88d97472fb11c42ea5c55c2dd1cf1ca656;hpb=d498a616075ebfd8025d66c4c4f725d24eb3aca3;p=elogind.git diff --git a/src/bootchart/store.c b/src/bootchart/store.c index ed683e88d..607cc5e74 100644 --- a/src/bootchart/store.c +++ b/src/bootchart/store.c @@ -25,8 +25,6 @@ #include #include #include -#include -#include #include #include #include @@ -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);