aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--toys/posix/ps.c38
1 files changed, 15 insertions, 23 deletions
diff --git a/toys/posix/ps.c b/toys/posix/ps.c
index 9d7c6445..48bf1e3b 100644
--- a/toys/posix/ps.c
+++ b/toys/posix/ps.c
@@ -1556,8 +1556,7 @@ static void top_common(
// Display "top" header.
if (*toys.which->name == 't') {
struct ofields field;
- char *hr0 = toybuf+sizeof(toybuf)-32, *hr1 = hr0-32, *hr2 = hr1-32,
- *hr3 = hr2-32;
+ char hr[4][32];
long long ll, up = 0;
long run[6];
int j;
@@ -1577,28 +1576,21 @@ static void top_common(
run[2]+run[3], run[4]);
lines = header_line(lines, 0);
- if (readfile("/proc/meminfo", toybuf, sizeof(toybuf))) {
- for (i=0; i<6; i++) {
- pos = strafter(toybuf, (char *[]){"MemTotal:","\nMemFree:",
- "\nBuffers:","\nCached:","\nSwapTotal:","\nSwapFree:"}[i]);
- run[i] = pos ? atol(pos) : 0;
+ if (readfile("/proc/meminfo", toybuf+256, sizeof(toybuf)-256)) {
+ for (i = 0; i<6; i++) {
+ j = i%3;
+ pos = strafter(toybuf+256, (char *[]){"MemTotal:","\nMemFree:",
+ "\nBuffers:","\nSwapTotal:","\nSwapFree:","\nCached:"}[i]);
+ human_readable(hr[j+!!j], 1024*(run[i] = pos ? atol(pos) : 0), 0);
+ if (j==1) human_readable(hr[1], 1024*(run[i-1]-run[i]), 0);
+ else if (j==2) {
+ sprintf(toybuf, (i<3)
+ ? " Mem: %9s total, %9s used, %9s free, %9s buffers"
+ : " Swap: %9s total, %9s used, %9s free, %9s cached",
+ hr[0], hr[1], hr[2], hr[3]);
+ lines = header_line(lines, 0);
+ }
}
-
- human_readable(hr0, 1024*run[0], 0);
- human_readable(hr1, 1024*(run[0]-run[1]), 0);
- human_readable(hr2, 1024*run[1], 0);
- human_readable(hr3, 1024*run[2], 0);
- sprintf(toybuf, " Mem: %9s total, %9s used, %9s free, %9s buffers",
- hr0, hr1, hr2, hr3);
- lines = header_line(lines, 0);
-
- human_readable(hr0, 1024*run[4], 0);
- human_readable(hr1, 1024*(run[4]-run[5]), 0);
- human_readable(hr2, 1024*run[5], 0);
- human_readable(hr3, 1024*run[3], 0);
- sprintf(toybuf, " Swap: %9s total, %9s used, %9s free, %9s cached",
- hr0, hr1, hr2, hr3);
- lines = header_line(lines, 0);
}
pos = toybuf;