summaryrefslogtreecommitdiffstats
path: root/linux
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2015-03-08 19:47:49 -0300
committerHisham Muhammad <hisham@gobolinux.org>2015-03-08 19:47:49 -0300
commita4b03e8875bcbcacefd506f72e14b781e8010b74 (patch)
tree39c909b34ffded2fb3773b2a3a3bce286fd72510 /linux
parent39a725abc23c22f1efabec322a82b2c166cfa0c7 (diff)
Improve reading of cgroups.
Diffstat (limited to 'linux')
-rw-r--r--linux/LinuxProcessList.c31
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

© 2014-2024 Faster IT GmbH | imprint | privacy policy