On 10/08/2010 05:48 PM, Stefan Hajnoczi wrote:
From: Anthony Liguori<aligu...@us.ibm.com>
This common function converts byte counts to human-readable strings with
proper units.
Signed-off-by: Anthony Liguori<aligu...@us.ibm.com>
Signed-off-by: Stefan Hajnoczi<stefa...@linux.vnet.ibm.com>
---
cutils.c | 15 +++++++++++++++
qemu-common.h | 1 +
2 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/cutils.c b/cutils.c
index 6c32198..5041203 100644
--- a/cutils.c
+++ b/cutils.c
@@ -301,3 +301,18 @@ int get_bits_from_size(size_t size)
return __builtin_ctzl(size);
#endif
}
+
+void bytes_to_str(char *buffer, size_t buffer_len, uint64_t size)
+{
+ if (size< (1ULL<< 10)) {
+ snprintf(buffer, buffer_len, "%" PRIu64 " byte(s)", size);
+ } else if (size< (1ULL<< 20)) {
+ snprintf(buffer, buffer_len, "%" PRIu64 " KB(s)", size>> 10);
+ } else if (size< (1ULL<< 30)) {
+ snprintf(buffer, buffer_len, "%" PRIu64 " MB(s)", size>> 20);
+ } else if (size< (1ULL<< 40)) {
+ snprintf(buffer, buffer_len, "%" PRIu64 " GB(s)", size>> 30);
+ } else {
+ snprintf(buffer, buffer_len, "%" PRIu64 " TB(s)", size>> 40);
+ }
+}
This will show 1.5GB as 1GB. Need either floating point with a couple
of digits of precision, or show 1.5GB as 1500MB.
It also misuses SI prefixes. 1 GB means 10^9 bytes, not 2^30 bytes (with
a common exception for RAM which is usually packaged in 1.125 times some
power of two).
--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.