From 10dbc9543edd5b5a7929dd8fa87ed33dd545375c Mon Sep 17 00:00:00 2001 From: Aaron Marcher Date: Mon, 21 May 2018 14:44:21 +0200 Subject: [PATCH] Merge fmt_human_2 and fmt_human_10 to one function Now only one function, fmt_human, takes an additional argument "base". --- components/cpu.c | 4 ++-- components/disk.c | 6 +++--- components/netspeeds.c | 12 ++++++++---- components/ram.c | 21 ++++++++++++--------- components/swap.c | 12 ++++++------ util.c | 32 ++++++++++++-------------------- util.h | 3 +-- 7 files changed, 44 insertions(+), 46 deletions(-) diff --git a/components/cpu.c b/components/cpu.c index 3fadb36..ecd45a6 100644 --- a/components/cpu.c +++ b/components/cpu.c @@ -20,7 +20,7 @@ return NULL; } - return fmt_human_10(freq * 1000); + return fmt_human(freq * 1000, 1000); } const char * @@ -67,7 +67,7 @@ return NULL; } - return fmt_human_10((size_t)freq * 1000 * 1000); + return fmt_human((size_t)freq * 1000 * 1000, 1000); } const char * diff --git a/components/disk.c b/components/disk.c index cf3c099..f3c96d5 100644 --- a/components/disk.c +++ b/components/disk.c @@ -16,7 +16,7 @@ disk_free(const char *mnt) return NULL; } - return fmt_human_2(fs.f_frsize * fs.f_bavail); + return fmt_human(fs.f_frsize * fs.f_bavail, 1024); } const char * @@ -43,7 +43,7 @@ disk_total(const char *mnt) return NULL; } - return fmt_human_2(fs.f_frsize * fs.f_blocks); + return fmt_human(fs.f_frsize * fs.f_blocks, 1024); } const char * @@ -56,5 +56,5 @@ disk_used(const char *mnt) return NULL; } - return fmt_human_2(fs.f_frsize * (fs.f_blocks - fs.f_bfree)); + return fmt_human(fs.f_frsize * (fs.f_blocks - fs.f_bfree), 1024); } diff --git a/components/netspeeds.c b/components/netspeeds.c index 76557e0..4332024 100644 --- a/components/netspeeds.c +++ b/components/netspeeds.c @@ -29,7 +29,8 @@ return NULL; } - return fmt_human_2((rxbytes - oldrxbytes) * 1000 / interval); + return fmt_human((rxbytes - oldrxbytes) * 1000 / interval, + 1024); } const char * @@ -54,7 +55,8 @@ return NULL; } - return fmt_human_2((txbytes - oldtxbytes) * 1000 / interval); + return fmt_human((txbytes - oldtxbytes) * 1000 / interval, + 1024); } #elif defined(__OpenBSD__) #include @@ -95,7 +97,8 @@ return NULL; } - return fmt_human_2((rxbytes - oldrxbytes) * 1000 / interval); + return fmt_human((rxbytes - oldrxbytes) * 1000 / interval, + 1024); } const char * @@ -130,6 +133,7 @@ return NULL; } - return fmt_human_2((txbytes - oldtxbytes) * 1000 / interval); + return fmt_human_2((txbytes - oldtxbytes) * 1000 / interval, + 1024); } #endif diff --git a/components/ram.c b/components/ram.c index cba22a1..0ac9753 100644 --- a/components/ram.c +++ b/components/ram.c @@ -17,7 +17,7 @@ return NULL; } - return fmt_human_2(free * 1024); + return fmt_human(free * 1024, 1024); } const char * @@ -48,7 +48,7 @@ return NULL; } - return fmt_human_2(total * 1024); + return fmt_human(total * 1024, 1024); } const char * @@ -65,7 +65,8 @@ return NULL; } - return fmt_human_2((total - free - buffers - cached) * 1024); + return fmt_human((total - free - buffers - cached) * 1024, + 1024); } #elif defined(__OpenBSD__) #include @@ -99,8 +100,8 @@ if (load_uvmexp(&uvmexp)) { free_pages = uvmexp.npages - uvmexp.active; - return fmt_human_2(pagetok(free_pages, - uvmexp.pageshift) * 1024); + return fmt_human(pagetok(free_pages, uvmexp.pageshift) * + 1024, 1024); } return NULL; @@ -126,8 +127,9 @@ struct uvmexp uvmexp; if (load_uvmexp(&uvmexp)) { - return fmt_human_2(pagetok(uvmexp.npages, - uvmexp.pageshift) * 1024); + return fmt_human(pagetok(uvmexp.npages, + uvmexp.pageshift) * 1024, + 1024); } return NULL; @@ -139,8 +141,9 @@ struct uvmexp uvmexp; if (load_uvmexp(&uvmexp)) { - return fmt_human_2(pagetok(uvmexp.active, - uvmexp.pageshift) * 1024); + return fmt_human(pagetok(uvmexp.active, + uvmexp.pageshift) * 1024, + 1024); } return NULL; diff --git a/components/swap.c b/components/swap.c index c697d61..c9bb920 100644 --- a/components/swap.c +++ b/components/swap.c @@ -48,7 +48,7 @@ } sscanf(match, "SwapFree: %ld kB\n", &free); - return fmt_human_2(free * 1024); + return fmt_human(free * 1024, 1024); } const char * @@ -98,7 +98,7 @@ } sscanf(match, "SwapTotal: %ld kB\n", &total); - return fmt_human_2(total * 1024); + return fmt_human(total * 1024, 1024); } const char * @@ -126,7 +126,7 @@ } sscanf(match, "SwapFree: %ld kB\n", &free); - return fmt_human_2((total - free - cached) * 1024); + return fmt_human((total - free - cached) * 1024, 1024); } #elif defined(__OpenBSD__) #include @@ -178,7 +178,7 @@ getstats(&total, &used); - return fmt_human_2((total - used) * 1024); + return fmt_human((total - used) * 1024, 1024); } const char * @@ -202,7 +202,7 @@ getstats(&total, &used); - return fmt_human_2(total * 1024); + return fmt_human(total * 1024, 1024); } const char * @@ -212,6 +212,6 @@ getstats(&total, &used); - return fmt_human_2(used * 1024); + return fmt_human(used * 1024, 1024); } #endif diff --git a/util.c b/util.c index 6dd08d7..fc8b72a 100644 --- a/util.c +++ b/util.c @@ -87,32 +87,24 @@ bprintf(const char *fmt, ...) } const char * -fmt_human_2(size_t num) +fmt_human(size_t num, int base) { size_t i; double scaled; - const char *prefix[] = { "", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", - "Zi", "Yi" }; + const char *siprefix[] = { "", "k", "M", "G", "T", "P", "E", "Z", "Y" }; + const char *iecprefix[] = { "", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", + "Zi", "Yi" }; + char *prefix[9]; + + if (base == 1000) { + memcpy(prefix, siprefix, sizeof(prefix)); + } else if (base == 1024) { + memcpy(prefix, iecprefix, sizeof(prefix)); + } scaled = num; for (i = 0; i < LEN(prefix) && scaled >= 1024; i++) { - scaled /= 1024.0; - } - - return bprintf("%.1f%s", scaled, prefix[i]); -} - -const char * -fmt_human_10(size_t num) -{ - size_t i; - double scaled; - const char *prefix[] = { "", "K", "M", "G", "T", "P", "E", - "Z", "Y" }; - - scaled = num; - for (i = 0; i < LEN(prefix) && scaled >= 1000; i++) { - scaled /= 1000.0; + scaled /= base; } return bprintf("%.1f%s", scaled, prefix[i]); diff --git a/util.h b/util.h index 4879414..faa1472 100644 --- a/util.h +++ b/util.h @@ -10,6 +10,5 @@ void die(const char *, ...); int esnprintf(char *str, size_t size, const char *fmt, ...); const char *bprintf(const char *fmt, ...); -const char *fmt_human_2(size_t num); -const char *fmt_human_10(size_t num); +const char *fmt_human(size_t num, int iec); int pscanf(const char *path, const char *fmt, ...);