Merge fmt_human_2 and fmt_human_10 to one function Now only one function, fmt_human, takes an additional argument "base".
@@ -20,7 +20,7 @@ "%"SCNu64, &freq) != 1) {
return NULL; } - return fmt_human_10(freq * 1000); + return fmt_human(freq * 1000, 1000); } const char *@@ -67,7 +67,7 @@ warn("sysctl 'HW_CPUSPEED':");
return NULL; } - return fmt_human_10((size_t)freq * 1000 * 1000); + return fmt_human((size_t)freq * 1000 * 1000, 1000); } const char *
@@ -16,7 +16,7 @@ warn("statvfs '%s':", 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 @@ warn("statvfs '%s':", 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 @@ warn("statvfs '%s':", 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); }
@@ -29,7 +29,8 @@ if (oldrxbytes == 0) {
return NULL; } - return fmt_human_2((rxbytes - oldrxbytes) * 1000 / interval); + return fmt_human((rxbytes - oldrxbytes) * 1000 / interval, + 1024); } const char *@@ -54,7 +55,8 @@ if (oldtxbytes == 0) {
return NULL; } - return fmt_human_2((txbytes - oldtxbytes) * 1000 / interval); + return fmt_human((txbytes - oldtxbytes) * 1000 / interval, + 1024); } #elif defined(__OpenBSD__) #include <string.h>@@ -95,7 +97,8 @@ if (oldrxbytes == 0) {
return NULL; } - return fmt_human_2((rxbytes - oldrxbytes) * 1000 / interval); + return fmt_human((rxbytes - oldrxbytes) * 1000 / interval, + 1024); } const char *@@ -130,6 +133,7 @@ if (oldtxbytes == 0) {
return NULL; } - return fmt_human_2((txbytes - oldtxbytes) * 1000 / interval); + return fmt_human_2((txbytes - oldtxbytes) * 1000 / interval, + 1024); } #endif
@@ -17,7 +17,7 @@ &free, &free, &free) != 3) {
return NULL; } - return fmt_human_2(free * 1024); + return fmt_human(free * 1024, 1024); } const char *@@ -48,7 +48,7 @@ &total) != 1) {
return NULL; } - return fmt_human_2(total * 1024); + return fmt_human(total * 1024, 1024); } const char *@@ -65,7 +65,8 @@ &total, &free, &buffers, &buffers, &cached) != 5) {
return NULL; } - return fmt_human_2((total - free - buffers - cached) * 1024); + return fmt_human((total - free - buffers - cached) * 1024, + 1024); } #elif defined(__OpenBSD__) #include <stdlib.h>@@ -99,8 +100,8 @@ int free_pages;
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;
@@ -48,7 +48,7 @@ return NULL;
} 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 @@ return NULL;
} 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 @@ return NULL;
} 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 <stdlib.h>@@ -178,7 +178,7 @@ int total, used;
getstats(&total, &used); - return fmt_human_2((total - used) * 1024); + return fmt_human((total - used) * 1024, 1024); } const char *@@ -202,7 +202,7 @@ int total, used;
getstats(&total, &used); - return fmt_human_2(total * 1024); + return fmt_human(total * 1024, 1024); } const char *@@ -212,6 +212,6 @@ int total, used;
getstats(&total, &used); - return fmt_human_2(used * 1024); + return fmt_human(used * 1024, 1024); } #endif
@@ -87,32 +87,24 @@ return buf;
} 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]; - scaled = num; - for (i = 0; i < LEN(prefix) && scaled >= 1024; i++) { - scaled /= 1024.0; + if (base == 1000) { + memcpy(prefix, siprefix, sizeof(prefix)); + } else if (base == 1024) { + memcpy(prefix, iecprefix, sizeof(prefix)); } - 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; + for (i = 0; i < LEN(prefix) && scaled >= 1024; i++) { + scaled /= base; } return bprintf("%.1f%s", scaled, prefix[i]);
@@ -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, ...);