diff options
author | Daniel Mack <daniel@zonque.org> | 2015-04-02 14:15:33 +0200 |
---|---|---|
committer | Daniel Mack <daniel@zonque.org> | 2015-04-03 15:29:18 +0200 |
commit | f91781329c6d8a760e3c1b88b66b0e2137c2e5ab (patch) | |
tree | 94a417ee58753ea5a92116d0a74ec0a3a044e825 /src/bootchart/store.c | |
parent | 34a4071e998f327945993ea6e6cbcaa0292b4093 (diff) |
bootchart: clean up sysfd and proc handling
Retrieve the handle to procfs in main(), and pass it functions
that need it. Kill the global variables.
Also, refactor lots of code in svg_title(). There's no need to access any
global variables from there either, and we really should return proper
errors from there as well.
Diffstat (limited to 'src/bootchart/store.c')
-rw-r--r-- | src/bootchart/store.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/src/bootchart/store.c b/src/bootchart/store.c index 53b827fe59..6125104084 100644 --- a/src/bootchart/store.c +++ b/src/bootchart/store.c @@ -45,8 +45,6 @@ */ static char smaps_buf[4096]; static int skip = 0; -DIR *proc; -int procfd = -1; double gettime_ns(void) { struct timespec n; @@ -86,7 +84,7 @@ static char *bufgetline(char *buf) { return c; } -static int pid_cmdline_strscpy(char *buffer, size_t buf_len, int pid) { +static int pid_cmdline_strscpy(int procfd, char *buffer, size_t buf_len, int pid) { char filename[PATH_MAX]; _cleanup_close_ int fd=-1; ssize_t n; @@ -107,7 +105,7 @@ static int pid_cmdline_strscpy(char *buffer, size_t buf_len, int pid) { return 0; } -int log_sample(int sample, struct list_sample_data **ptr) { +int log_sample(DIR *proc, int sample, struct list_sample_data **ptr) { static int vmstat = -1; static int schedstat = -1; char buf[4096]; @@ -126,19 +124,13 @@ int log_sample(int sample, struct list_sample_data **ptr) { int fd; struct list_sample_data *sampledata; struct ps_sched_struct *ps_prev = NULL; + int procfd; sampledata = *ptr; - /* all the per-process stuff goes here */ - if (!proc) { - /* find all processes */ - proc = opendir("/proc"); - if (!proc) - return -errno; - procfd = dirfd(proc); - } else { - rewinddir(proc); - } + procfd = dirfd(proc); + if (procfd < 0) + return -errno; if (vmstat < 0) { /* block stuff */ @@ -301,7 +293,7 @@ schedstat_next: /* cmdline */ if (arg_show_cmdline) - pid_cmdline_strscpy(ps->name, sizeof(ps->name), pid); + pid_cmdline_strscpy(procfd, ps->name, sizeof(ps->name), pid); /* discard line 2 */ m = bufgetline(buf); @@ -520,7 +512,7 @@ catch_rename: /* cmdline */ if (arg_show_cmdline) - pid_cmdline_strscpy(ps->name, sizeof(ps->name), pid); + pid_cmdline_strscpy(procfd, ps->name, sizeof(ps->name), pid); } } |