X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbootchart%2Fsvg.c;h=f8a37768733490866aa8ab91740031097ed4cee3;hb=547ba5a9e854c2811c8452123dae8caa01e1e26e;hp=8da32efca5c5e3a66057ec600d412947c9198ca8;hpb=8d6167101696a28b7ac61b48fd2c1920564c4e90;p=elogind.git diff --git a/src/bootchart/svg.c b/src/bootchart/svg.c index 8da32efca..f8a377687 100644 --- a/src/bootchart/svg.c +++ b/src/bootchart/svg.c @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include "bootchart.h" #include "util.h" @@ -95,10 +97,10 @@ static void svg_header(void) /* write some basic info as a comment, including some help */ svg("\n"); - svg("\n"); - svg("\n"); - svg("\n"); - svg("\n\n"); + svg("\n"); + svg("\n"); + svg("\n"); + svg("\n\n"); svg("\n", VERSION); svg("\n", hz, len); @@ -138,7 +140,7 @@ static void svg_header(void) } -static void svg_title(void) +static void svg_title(const char *build) { char cmdline[256] = ""; char filename[PATH_MAX]; @@ -147,14 +149,15 @@ static void svg_title(void) char model[256] = "Unknown"; char date[256] = "Unknown"; char cpu[256] = "Unknown"; - char build[256] = "Unknown"; char *c; FILE *f; time_t t; + int fd; struct utsname uts; /* grab /proc/cmdline */ - f = fopen("/proc/cmdline", "r"); + fd = openat(procfd, "cmdline", O_RDONLY); + f = fdopen(fd, "r"); if (f) { if (!fgets(cmdline, 255, f)) sprintf(cmdline, "Unknown"); @@ -162,17 +165,19 @@ static void svg_title(void) } /* extract root fs so we can find disk model name in sysfs */ + /* FIXME: this works only in the simple case */ c = strstr(cmdline, "root=/dev/"); if (c) { strncpy(rootbdev, &c[10], 3); rootbdev[3] = '\0'; - } - sprintf(filename, "/sys/block/%s/device/model", rootbdev); - f = fopen(filename, "r"); - if (f) { - if (!fgets(model, 255, f)) - fprintf(stderr, "Error reading disk model for %s\n", rootbdev); - fclose(f); + sprintf(filename, "block/%s/device/model", rootbdev); + fd = openat(sysfd, filename, O_RDONLY); + f = fdopen(fd, "r"); + if (f) { + if (!fgets(model, 255, f)) + fprintf(stderr, "Error reading disk model for %s\n", rootbdev); + fclose(f); + } } /* various utsname parameters */ @@ -184,7 +189,8 @@ static void svg_title(void) strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", localtime(&t)); /* CPU type */ - f = fopen("/proc/cpuinfo", "r"); + fd = openat(procfd, "cpuinfo", O_RDONLY); + f = fdopen(fd, "r"); if (f) { while (fgets(buf, 255, f)) { if (strstr(buf, "model name")) { @@ -195,14 +201,6 @@ static void svg_title(void) fclose(f); } - /* Build - 1st line from /etc/system-release */ - f = fopen("/etc/system-release", "r"); - if (f) { - if (fgets(buf, 255, f)) - strncpy(build, buf, 255); - fclose(f); - } - svg("Bootchart for %s - %s\n", uts.nodename, date); svg("System: %s %s %s %s\n", @@ -1047,7 +1045,7 @@ static void svg_top_ten_pss(void) } -void svg_do(void) +void svg_do(const char *build) { struct ps_struct *ps; @@ -1100,7 +1098,7 @@ void svg_do(void) svg("\n\n"); svg("\n"); - svg_title(); + svg_title(build); svg("\n\n"); svg("\n");