diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2015-03-08 19:47:49 -0300 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2015-03-08 19:47:49 -0300 |
commit | a4b03e8875bcbcacefd506f72e14b781e8010b74 (patch) | |
tree | 39c909b34ffded2fb3773b2a3a3bce286fd72510 /linux | |
parent | 39a725abc23c22f1efabec322a82b2c166cfa0c7 (diff) |
Improve reading of cgroups.
Diffstat (limited to 'linux')
-rw-r--r-- | linux/LinuxProcessList.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c index 54d20708..626c76cf 100644 --- a/linux/LinuxProcessList.c +++ b/linux/LinuxProcessList.c @@ -312,22 +312,27 @@ static void LinuxProcessList_readCGroupFile(Process* process, const char* dirnam process->cgroup = strdup(""); return; } - char buffer[256]; - char *ok = fgets(buffer, 255, file); - if (ok) { - char* trimmed = String_trim(buffer); - int nFields; - char** fields = String_split(trimmed, ':', &nFields); - free(trimmed); - free(process->cgroup); - if (nFields >= 3) { - process->cgroup = strndup(fields[2] + 1, 10); - } else { - process->cgroup = strdup(""); + char output[256]; + output[0] = '\0'; + char* at = output; + int left = 255; + while (!feof(file) && left > 0) { + char buffer[256]; + char *ok = fgets(buffer, 255, file); + if (!ok) break; + char* group = strchr(buffer, ':'); + if (!group) break; + if (at != output) { + *at = ';'; + at++; + left--; } - String_freeArray(fields); + int wrote = snprintf(at, left, "%s", group); + left -= wrote; } fclose(file); + free(process->cgroup); + process->cgroup = strdup(output); } #endif |