Merge fmt_human_2 and fmt_human_10 to one function

Now only one function, fmt_human, takes an additional argument "base".
This commit is contained in:
Aaron Marcher
2018-05-21 14:44:21 +02:00
parent fc0dde5a60
commit 10dbc9543e
7 changed files with 44 additions and 46 deletions

32
util.c
View File

@ -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]);