Modify print_size() so that it can accept numbers larger than 4GB on 32-bit
systems.

Add support for display terabyte, petabyte, and exabyte sizes.  Change the
output to use International Electrotechnical Commission binary prefix standard.

Signed-off-by: Timur Tabi <ti...@freescale.com>
---
 lib_generic/display_options.c |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/lib_generic/display_options.c b/lib_generic/display_options.c
index da17a62..5a2097f 100644
--- a/lib_generic/display_options.c
+++ b/lib_generic/display_options.c
@@ -39,23 +39,23 @@ int display_options (void)
 }
 
 /*
- * print sizes as "xxx kB", "xxx.y kB", "xxx MB", "xxx.y MB",
- * xxx GB, or xxx.y GB as needed; allow for optional trailing string
+ * print sizes as "xxx KiB", "xxx.y KiB", "xxx MiB", "xxx.y MiB",
+ * xxx GiB, xxx.y GiB, etc as needed; allow for optional trailing string
  * (like "\n")
  */
 void print_size(unsigned long long size, const char *s)
 {
        unsigned long m = 0, n;
-       unsigned long long d = 1 << 30;         /* 1 GB */
-       char  c = 'G';
-
-       if (size < d) {                 /* try MB */
-               c = 'M';
-               d = 1 << 20;
-               if (size < d) {         /* print in kB */
-                       c = 'k';
-                       d = 1 << 10;
-               }
+       static const char names[] = {'K', 'M', 'G', 'T', 'P', 'E'};
+       unsigned long long d;
+       char c;
+       unsigned int i;
+
+       for (i = ARRAY_SIZE(names); i > 0 ; i--) {
+               d = 1ULL << (10 * i);
+               c = names[i - 1];
+               if (size >= d)
+                       break;
        }
 
        n = size / d;
@@ -74,7 +74,7 @@ void print_size(unsigned long long size, const char *s)
        if (m) {
                printf (".%ld", m);
        }
-       printf (" %cB%s", c, s);
+       printf (" %ciB%s", c, s);
 }
 
 /*
-- 
1.6.5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to