[PATCH] display_options: print_size: Fix order overflow

Pali Rohár pali at kernel.org
Sun Sep 11 11:37:07 CEST 2022


Function print_size() round size to the nearst value with one decimal
fraction number. But in special cases also unit order may overflow.

For example value 1073689396 is printed as "1024 MiB" and value 1073741824
as "1 GiB".

Fix this issue by detecting order overflow and increasing unit order.
With this change also value 1073689396 is printed as "1 GiB".

Signed-off-by: Pali Rohár <pali at kernel.org>
---
 lib/display_options.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lib/display_options.c b/lib/display_options.c
index 360b01bcf5ff..c281c1d2c10d 100644
--- a/lib/display_options.c
+++ b/lib/display_options.c
@@ -126,6 +126,12 @@ void print_size(uint64_t size, const char *s)
 		if (m >= 10) {
 			m -= 10;
 			n += 1;
+
+			if (n == 1024 && i > 0) {
+				n = 1;
+				m = 0;
+				c = names[i - 1];
+			}
 		}
 	}
 
-- 
2.20.1



More information about the U-Boot mailing list