From: "Pali Rohár" <pali@kernel.org>
To: Simon Glass <sjg@chromium.org>
Cc: u-boot@lists.denx.de
Subject: [PATCH v2] display_options: print_size: Fix order overflow
Date: Mon, 12 Sep 2022 21:02:27 +0200 [thread overview]
Message-ID: <20220912190227.20015-1-pali@kernel.org> (raw)
In-Reply-To: <20220911093707.9434-1-pali@kernel.org>
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@kernel.org>
---
Changes in v2:
* Add unit test case
---
lib/display_options.c | 6 ++++++
test/lib/test_print.c | 3 +++
2 files changed, 9 insertions(+)
diff --git a/lib/display_options.c b/lib/display_options.c
index 360b01bcf5ff..59ed4f61b741 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];
+ }
}
}
diff --git a/test/lib/test_print.c b/test/lib/test_print.c
index a60a5a51f126..79b67c779321 100644
--- a/test/lib/test_print.c
+++ b/test/lib/test_print.c
@@ -68,6 +68,9 @@ static int lib_test_print_size(struct unit_test_state *uts)
ut_assertok(test_print_size(uts, 7654321, "7.3 MiB;"));
ut_assertok(test_print_size(uts, 87654321, "83.6 MiB;"));
ut_assertok(test_print_size(uts, 987654321, "941.9 MiB;"));
+ ut_assertok(test_print_size(uts, 1073689395, "1023.9 MiB;"));
+ ut_assertok(test_print_size(uts, 1073689396, "1 GiB;"));
+ ut_assertok(test_print_size(uts, 1073741824, "1 GiB;"));
ut_assertok(test_print_size(uts, 1987654321, "1.9 GiB;"));
ut_assertok(test_print_size(uts, 54321987654321, "49.4 TiB;"));
return 0;
--
2.20.1
next prev parent reply other threads:[~2022-09-12 19:03 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-11 9:37 [PATCH] display_options: print_size: Fix order overflow Pali Rohár
2022-09-12 13:34 ` Simon Glass
2022-09-12 18:56 ` Pali Rohár
2022-09-12 19:02 ` Pali Rohár [this message]
2022-09-14 17:10 ` [PATCH v2] " Simon Glass
2022-09-23 22:48 ` Tom Rini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220912190227.20015-1-pali@kernel.org \
--to=pali@kernel.org \
--cc=sjg@chromium.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox