X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbootchart%2Fbootchart.c;fp=src%2Fbootchart%2Fbootchart.c;h=8cb1ee69211cf2bd1ce123ba150be8f525682a09;hb=f91781329c6d8a760e3c1b88b66b0e2137c2e5ab;hp=1024f78fa649473e0cc66ad81ede68982b0d306e;hpb=34a4071e998f327945993ea6e6cbcaa0292b4093;p=elogind.git diff --git a/src/bootchart/bootchart.c b/src/bootchart/bootchart.c index 1024f78fa..8cb1ee692 100644 --- a/src/bootchart/bootchart.c +++ b/src/bootchart/bootchart.c @@ -67,7 +67,6 @@ double interval; FILE *of = NULL; int overrun = 0; static int exiting = 0; -int sysfd=-1; #define DEFAULT_SAMPLES_LEN 500 #define DEFAULT_HZ 25.0 @@ -314,6 +313,8 @@ static void do_journal_append(char *file) { int main(int argc, char *argv[]) { _cleanup_free_ char *build = NULL; + _cleanup_close_ int sysfd = -1; + _cleanup_closedir_ DIR *proc = NULL; struct sigaction sig = { .sa_handler = signal_handler, }; @@ -323,7 +324,6 @@ int main(int argc, char *argv[]) { time_t t = 0; int r; struct rlimit rlim; - bool has_procfs = false; parse_conf(); @@ -373,8 +373,6 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } - has_procfs = access("/proc/vmstat", F_OK) == 0; - LIST_HEAD_INIT(head); /* main program loop */ @@ -404,13 +402,16 @@ int main(int argc, char *argv[]) { parse_env_file("/usr/lib/os-release", NEWLINE, "PRETTY_NAME", &build, NULL); } - if (has_procfs) { - r = log_sample(samples, &sampledata); + if (proc) + rewinddir(proc); + else + proc = opendir("/proc"); + + /* wait for /proc to become available, discarding samples */ + if (proc) { + r = log_sample(proc, samples, &sampledata); if (r < 0) return EXIT_FAILURE; - } else { - /* wait for /proc to become available, discarding samples */ - has_procfs = access("/proc/vmstat", F_OK) == 0; } sample_stop = gettime_ns(); @@ -470,23 +471,23 @@ int main(int argc, char *argv[]) { } if (!of) { - fprintf(stderr, "opening output file '%s': %m\n", output_file); - exit (EXIT_FAILURE); + log_error("Error opening output file '%s': %m\n", output_file); + return EXIT_FAILURE; } - svg_do(strna(build)); + r = svg_do(strna(build)); + if (r < 0) { + log_error_errno(r, "Error generating svg file: %m\n"); + return EXIT_FAILURE; + } - fprintf(stderr, "systemd-bootchart wrote %s\n", output_file); + log_info("systemd-bootchart wrote %s\n", output_file); do_journal_append(output_file); if (of) fclose(of); - closedir(proc); - if (sysfd >= 0) - close(sysfd); - /* nitpic cleanups */ ps = ps_first->next_ps; while (ps->next_ps) {