summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Warner <james.warner@comcast.net>2022-01-13 13:13:13 -0600
committerCraig Small <csmall@dropbear.xyz>2022-01-17 20:27:20 +1100
commit4b54518721aea00d404d936a9959f66f45277efe (patch)
treeec765e240c6567d6669d50d2da87281e982987ae
parente03be322b500684aa16cea4f78f970fb64668f8f (diff)
downloadprocps-ng-4b54518721aea00d404d936a9959f66f45277efe.tar.gz
top: enabled arbitrarily large numbers in 'scale' guys
While experimenting with a new feature, wherein select fields display the total upon request, the capacity of the 'num' passed to some 'scale' guys became an issue. So this commit will, with the compiler's help, put the responsibility for converting the integer into a float within the calling code (instead of the called logic). Reference(s): . 03/08/21, newlib branch equivalent commit commit 62928cf4614314dfb99adba79240098f49487c6f Signed-off-by: Jim Warner <james.warner@comcast.net>
-rw-r--r--top/top.c20
-rw-r--r--top/top.h4
2 files changed, 10 insertions, 14 deletions
diff --git a/top/top.c b/top/top.c
index 90be5a9..d08435a 100644
--- a/top/top.c
+++ b/top/top.c
@@ -1641,7 +1641,7 @@ static inline const char *make_str_utf8 (const char *str, int width, int justr,
* Do some scaling then justify stuff.
* We'll interpret 'num' as a kibibytes quantity and try to
* format it to reach 'target' while also fitting 'width'. */
-static const char *scale_mem (int target, unsigned long num, int width, int justr) {
+static const char *scale_mem (int target, float num, int width, int justr) {
// SK_Kb SK_Mb SK_Gb SK_Tb SK_Pb SK_Eb
#ifdef BOOST_MEMORY
static const char *fmttab[] = { "%.0f", "%#.1f%c", "%#.3f%c", "%#.3f%c", "%#.3f%c", NULL };
@@ -1649,7 +1649,6 @@ static const char *scale_mem (int target, unsigned long num, int width, int just
static const char *fmttab[] = { "%.0f", "%.1f%c", "%.1f%c", "%.1f%c", "%.1f%c", NULL };
#endif
static char buf[SMLBUFSIZ];
- float scaled_num;
char *psfx;
int i;
@@ -1657,12 +1656,11 @@ static const char *scale_mem (int target, unsigned long num, int width, int just
if (Rc.zero_suppress && 0 >= num)
goto end_justifies;
- scaled_num = num;
for (i = SK_Kb, psfx = Scaled_sfxtab; i < SK_Eb; psfx++, i++) {
if (i >= target
- && (width >= snprintf(buf, sizeof(buf), fmttab[i], scaled_num, *psfx)))
+ && (width >= snprintf(buf, sizeof(buf), fmttab[i], num, *psfx)))
goto end_justifies;
- scaled_num /= 1024.0;
+ num /= 1024.0;
}
// well shoot, this outta' fit...
@@ -1674,23 +1672,21 @@ end_justifies:
/*
* Do some scaling then justify stuff. */
-static const char *scale_num (unsigned long num, int width, int justr) {
+static const char *scale_num (float num, int width, int justr) {
static char buf[SMLBUFSIZ];
- float scaled_num;
char *psfx;
buf[0] = '\0';
if (Rc.zero_suppress && 0 >= num)
goto end_justifies;
- if (width >= snprintf(buf, sizeof(buf), "%lu", num))
+ if (width >= snprintf(buf, sizeof(buf), "%.0f", num))
goto end_justifies;
- scaled_num = num;
for (psfx = Scaled_sfxtab; 0 < *psfx; psfx++) {
- scaled_num /= 1024.0;
- if (width >= snprintf(buf, sizeof(buf), "%.1f%c", scaled_num, *psfx))
+ num /= 1024.0;
+ if (width >= snprintf(buf, sizeof(buf), "%.1f%c", num, *psfx))
goto end_justifies;
- if (width >= snprintf(buf, sizeof(buf), "%.0f%c", scaled_num, *psfx))
+ if (width >= snprintf(buf, sizeof(buf), "%.0f%c", num, *psfx))
goto end_justifies;
}
diff --git a/top/top.h b/top/top.h
index a267e52..3020502 100644
--- a/top/top.h
+++ b/top/top.h
@@ -736,8 +736,8 @@ typedef struct WIN_t {
//atic inline const char *make_num (long num, int width, int justr, int col, int noz);
//atic inline const char *make_str (const char *str, int width, int justr, int col);
//atic inline const char *make_str_utf8 (const char *str, int width, int justr, int col);
-//atic const char *scale_mem (int target, unsigned long num, int width, int justr);
-//atic const char *scale_num (unsigned long num, int width, int justr);
+//atic const char *scale_mem (int target, float num, int width, int justr);
+//atic const char *scale_num (float num, int width, int justr);
//atic const char *scale_pcnt (float num, int width, int justr);
//atic const char *scale_tics (TIC_t tics, int width, int justr);
/*------ Fields Management support -------------------------------------*/