diff options
-rw-r--r-- | usr.bin/vmstat/vmstat.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/usr.bin/vmstat/vmstat.c b/usr.bin/vmstat/vmstat.c index d5cec16..4a76397 100644 --- a/usr.bin/vmstat/vmstat.c +++ b/usr.bin/vmstat/vmstat.c @@ -42,7 +42,7 @@ static const char copyright[] = static char sccsid[] = "@(#)vmstat.c 8.1 (Berkeley) 6/6/93"; #endif static const char rcsid[] = - "$Id: vmstat.c,v 1.32 1999/02/13 09:59:24 dillon Exp $"; + "$Id: vmstat.c,v 1.33 1999/02/15 14:15:28 bde Exp $"; #endif /* not lint */ #include <sys/param.h> @@ -503,6 +503,9 @@ dovmstat(interval, reps) } (void)printf("%2d%2d%2d", total.t_rq - 1, total.t_dw + total.t_pw, total.t_sw); +#ifdef pgtok +#undef pgtok +#endif #define pgtok(a) ((a) * sum.v_page_size >> 10) #define rate(x) (((x) + halfuptime) / uptime) /* round */ (void)printf("%8ld%6ld ", @@ -792,6 +795,8 @@ dointr() (void)printf("Total %8ld %8ld\n", inttotal, inttotal / uptime); } +#define MAX_KMSTATS 200 + void domem() { @@ -801,14 +806,15 @@ domem() int len, size, first, nkms; long totuse = 0, totfree = 0, totreq = 0; const char *name; - struct malloc_type kmemstats[200], *kmsp; - char *kmemnames[200]; + struct malloc_type kmemstats[MAX_KMSTATS], *kmsp, *first_kmsp; + char *kmemnames[MAX_KMSTATS]; char buf[1024]; struct kmembuckets buckets[MINBUCKET + 16]; kread(X_KMEMBUCKETS, buckets, sizeof(buckets)); kread(X_KMEMSTATISTICS, &kmsp, sizeof(kmsp)); - for (nkms = 0; nkms < 200 && kmsp != NULL; nkms++) { + first_kmsp = kmsp; + for (nkms = 0; nkms < MAX_KMSTATS && kmsp != NULL; nkms++) { if (sizeof(kmemstats[0]) != kvm_read(kd, (u_long)kmsp, &kmemstats[nkms], sizeof(kmemstats[0]))) err(1, "kvm_read(%p)", (void *)kmsp); @@ -816,9 +822,14 @@ domem() (u_long)kmemstats[nkms].ks_shortdesc, buf, sizeof(buf))) err(1, "kvm_read(%p)", (void *)kmemstats[nkms].ks_shortdesc); + buf[sizeof(buf) - 1] = '\0'; kmemstats[nkms].ks_shortdesc = strdup(buf); kmsp = kmemstats[nkms].ks_next; + if (kmsp == first_kmsp) + break; } + if (kmsp != NULL && nkms >= MAX_KMSTATS) + warnx("Truncated to the first %d types.", MAX_KMSTATS); (void)printf("Memory statistics by bucket size\n"); (void)printf( "Size In Use Free Requests HighWater Couldfree\n"); |