diff options
Diffstat (limited to 'contrib/top/utils.c')
-rw-r--r-- | contrib/top/utils.c | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/contrib/top/utils.c b/contrib/top/utils.c index 67b64e9..e136d2a 100644 --- a/contrib/top/utils.c +++ b/contrib/top/utils.c @@ -308,9 +308,13 @@ long *diffs; /* calculate percentages based on overall change, rounding up */ half_total = total_change / 2l; - for (i = 0; i < cnt; i++) - { - *out++ = (int)((*diffs++ * 1000 + half_total) / total_change); + + /* Do not divide by 0. Causes Floating point exception */ + if(total_change) { + for (i = 0; i < cnt; i++) + { + *out++ = (int)((*diffs++ * 1000 + half_total) / total_change); + } } /* return the total in case the caller wants to use it */ @@ -329,9 +333,6 @@ long *diffs; /* externs referenced by errmsg */ -extern char *sys_errlist[]; -extern int sys_nerr; - char *errmsg(errnum) int errnum; @@ -339,7 +340,7 @@ int errnum; { if (errnum > 0 && errnum < sys_nerr) { - return(sys_errlist[errnum]); + return((char *)sys_errlist[errnum]); } return("No error"); } @@ -451,3 +452,35 @@ int amt; return(ret); } + +char *format_k2(amt) + +int amt; + +{ + static char retarray[NUM_STRINGS][16]; + static int index = 0; + register char *p; + register char *ret; + register char tag = 'K'; + + p = ret = retarray[index]; + index = (index + 1) % NUM_STRINGS; + + if (amt >= 100000) + { + amt = (amt + 512) / 1024; + tag = 'M'; + if (amt >= 100000) + { + amt = (amt + 512) / 1024; + tag = 'G'; + } + } + + p = strecpy(p, itoa(amt)); + *p++ = tag; + *p = '\0'; + + return(ret); +} |