diff options
author | Colin Cross <ccross@android.com> | 2015-09-01 19:16:06 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2015-09-01 19:16:06 -0500 |
commit | 7d58b3085c6ebaa02cf567f25a741b878ee0a87c (patch) | |
tree | 343b1302086c9f95c438fd8d462dc6375be532f7 | |
parent | b1b0399dc701f3c9af19a09164a4f536bc00eb2c (diff) | |
download | toybox-7d58b3085c6ebaa02cf567f25a741b878ee0a87c.tar.gz |
vmstat: reset header pointer when looping
Modifying the headers pointer when printing the headers causes
a buffer overrun the second time they are printed. Use a local
header pointer that is reset to the beginning of the buffer for
each loop.
-rw-r--r-- | toys/other/vmstat.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/toys/other/vmstat.c b/toys/other/vmstat.c index 9a38e452..5b79702b 100644 --- a/toys/other/vmstat.c +++ b/toys/other/vmstat.c @@ -96,14 +96,14 @@ void vmstat_main(void) // Print headers if (rows>3 && !(loop % (rows-3))) { + const char *header = headers; if (isatty(1)) terminal_size(0, &rows); else rows = 0; printf("procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----\n"); - for (i=0; i<sizeof(lengths); i++) { - printf(" %*s"+!i, lengths[i], headers); - headers += strlen(headers)+1; + printf(" %*s"+!i, lengths[i], header); + header += strlen(header)+1; } xputc('\n'); } |