From 8086d89e23f33429eae93078399da1469603ba05 Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Tue, 2 Oct 2012 23:59:11 +0200 Subject: [PATCH] Better formatting of byte sizes. --- src/util/misc.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/util/misc.c b/src/util/misc.c index 1fe5c9a..3a7851c 100644 --- a/src/util/misc.c +++ b/src/util/misc.c @@ -307,7 +307,7 @@ int is_number(const char* value, int* num) const char* format_size(size_t bytes, char* buf, size_t bufsize) { - static const char* quant[] = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; + static const char* quant[] = { "B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB" }; size_t b = bytes; size_t factor = 0; size_t divisor = 1; @@ -317,7 +317,11 @@ const char* format_size(size_t bytes, char* buf, size_t bufsize) b = (b >> 10); divisor = (divisor << 10); } - snprintf(buf, bufsize, "%.2f %s", (double) bytes / (double) divisor, quant[factor]); + uhub_assert(factor < (sizeof(quant) / sizeof(const char*))); + if (factor >= 2) + snprintf(buf, bufsize, "%.1f %s", (double) bytes / (double) divisor, quant[factor]); + else + snprintf(buf, bufsize, PRINTF_SIZE_T " %s", bytes / divisor, quant[factor]); return buf; }