Add print_human_readable_size() function.
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 29 Jan 2005 18:19:44 +0000 (18:19 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Sat, 29 Jan 2005 18:19:44 +0000 (18:19 +0000)
src/lib/stdio.c
src/lib/stdio.h

index 98b63030b4d2925127b77f14b4f8a1394fa61066..3549d4e9fd70f854880cb9a87cc26bfcee8f91d4 100644 (file)
@@ -608,3 +608,21 @@ hex_dump (uintptr_t ofs, const void *buf_, size_t size, bool ascii)
       size -= n;
     }
 }
+
+/* Prints SIZE, which represents a number of bytes, in a
+   human-readable format, e.g. "256 kB". */
+void
+print_human_readable_size (uint64_t size) 
+{
+  if (size == 1)
+    printf ("1 byte");
+  else 
+    {
+      static const char *factors[] = {"bytes", "kB", "MB", "GB", "TB", NULL};
+      const char **fp;
+
+      for (fp = factors; size >= 1024 && fp[1] != NULL; fp++)
+        size /= 1024;
+      printf ("%"PRIu64" %s", *fp);
+    }
+}
index 31be6d8353df7df90e3bde34c6860d1c6c24ad1b..dc6ec3595d15243b841dcbf06360fb8bb9e34aaa 100644 (file)
@@ -28,6 +28,7 @@ int hprintf (int, const char *, ...) PRINTF_FORMAT (2, 3);
 int vhprintf (int, const char *, va_list) PRINTF_FORMAT (2, 0);
 #endif
 void hex_dump (uintptr_t ofs, const void *, size_t size, bool ascii);
+void print_human_readable_size (uint64_t size);
 
 /* Internal functions. */
 void __vprintf (const char *format, va_list args,