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.


Reply via email to