diff options
-rw-r--r-- | BatteryMeter.c | 1 | ||||
-rw-r--r-- | linux/LinuxProcessList.c | 31 | ||||
-rw-r--r-- | linux/Platform.c | 1 | ||||
-rw-r--r-- | linux/Platform.h | 1 |
4 files changed, 21 insertions, 13 deletions
diff --git a/BatteryMeter.c b/BatteryMeter.c index d0dff92e..cea77866 100644 --- a/BatteryMeter.c +++ b/BatteryMeter.c @@ -13,6 +13,7 @@ This meter written by Ian P. Hands (iphands@gmail.com, ihands@redhat.com). #include "ProcessList.h" #include "CRT.h" #include "String.h" +#include "Platform.h" #include <string.h> #include <stdlib.h> diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c index 9d01ce60..9770ab09 100644 --- a/linux/LinuxProcessList.c +++ b/linux/LinuxProcessList.c @@ -361,22 +361,27 @@ static void LinuxProcessList_readCGroupFile(LinuxProcess* process, const char* d 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 diff --git a/linux/Platform.c b/linux/Platform.c index d89b4820..5ade6e9d 100644 --- a/linux/Platform.c +++ b/linux/Platform.c @@ -30,6 +30,7 @@ in the source distribution for its full text. #include "Action.h" #include "MainPanel.h" #include "BatteryMeter.h" +#include "LinuxProcess.h" }*/ ProcessField Platform_defaultFields[] = { PID, USER, PRIORITY, NICE, M_SIZE, M_RESIDENT, M_SHARE, STATE, PERCENT_CPU, PERCENT_MEM, TIME, COMM, 0 }; diff --git a/linux/Platform.h b/linux/Platform.h index a00208ef..3757855d 100644 --- a/linux/Platform.h +++ b/linux/Platform.h @@ -12,6 +12,7 @@ in the source distribution for its full text. #include "Action.h" #include "MainPanel.h" #include "BatteryMeter.h" +#include "LinuxProcess.h" extern ProcessField Platform_defaultFields[]; |