From 69eb8f0fa3117816533045ee5ec38c6408436045 Mon Sep 17 00:00:00 2001 From: Joerg Steffens Date: Mon, 5 Oct 2020 19:34:48 +0200 Subject: [PATCH] core: config: CFG_TYPE_SIZE64: fixes result, when value is 0 When the size is 0, a zero should be printed, not an empty string. Also some cleanup. --- core/src/lib/edit.cc | 11 ++++------- core/src/tests/test_edit.cc | 3 +++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/src/lib/edit.cc b/core/src/lib/edit.cc index cfb43d03331..1dbac3bc5bc 100644 --- a/core/src/lib/edit.cc +++ b/core/src/lib/edit.cc @@ -424,7 +424,8 @@ std::string SizeAsSiPrefixFormat(uint64_t value_in) /* * convert default value string to numeric value */ - static const char* modifier[] = {"e", "p", "t", "g", "m", "k", "", NULL}; + static const char* modifier[] = {" e", " p", " t", " g", + " m", " k", "", NULL}; const uint64_t multiplier[] = {1152921504606846976, // EiB Exbibyte 1125899906842624, // PiB Pebibyte 1099511627776, // TiB Tebibyte @@ -436,19 +437,16 @@ std::string SizeAsSiPrefixFormat(uint64_t value_in) if (value == 0) { result += "0"; } else { - for (int t = 0; modifier[t]; t++) { + for (int t = 0; modifier[t] && (value > 0); t++) { factor = value / multiplier[t]; value = value % multiplier[t]; if (factor > 0) { result += std::to_string(factor); - result += " "; result += modifier[t]; - if (!(bstrcmp(modifier[t], ""))) { result += " "; } + if (value > 0) { result += " "; } } - if (value == 0) { break; } } } - result.pop_back(); return result; } @@ -699,4 +697,3 @@ bool IsAclEntryValid(const char* acl) std::vector msg; return IsAclEntryValid(acl, msg); } - diff --git a/core/src/tests/test_edit.cc b/core/src/tests/test_edit.cc index b4a32ea6e4a..3997516781e 100644 --- a/core/src/tests/test_edit.cc +++ b/core/src/tests/test_edit.cc @@ -30,8 +30,11 @@ TEST(edit, convert_number_to_siunits) { + ASSERT_STREQ(SizeAsSiPrefixFormat(0).c_str(), "0"); ASSERT_STREQ(SizeAsSiPrefixFormat(1).c_str(), "1"); + ASSERT_STREQ(SizeAsSiPrefixFormat(123).c_str(), "123"); ASSERT_STREQ(SizeAsSiPrefixFormat(1024).c_str(), "1 k"); + ASSERT_STREQ(SizeAsSiPrefixFormat(2050).c_str(), "2 k 2"); ASSERT_STREQ(SizeAsSiPrefixFormat(1048576).c_str(), "1 m"); ASSERT_STREQ(SizeAsSiPrefixFormat(1073741824).c_str(), "1 g"); ASSERT_STREQ(SizeAsSiPrefixFormat(1099511627776).c_str(), "1 t");