summaryrefslogtreecommitdiff
path: root/utils.c
diff options
context:
space:
mode:
authorQu Wenruo <quwenruo@cn.fujitsu.com>2016-03-09 10:10:55 +0800
committerDavid Sterba <dsterba@suse.com>2016-03-14 13:42:47 +0100
commitaf83da99d6f3dc5e50db783864effb4ae81f15bc (patch)
treef58f497ab9bb11eb21e3dc4d21920e62b157ba47 /utils.c
parent9f76654de8a8c573e957c3f6b0877724f8c04bd9 (diff)
btrfs-progs: util: Fix a wrong unit of pretty_size
If parameter for pretty_size is smaller than default base(1024), pretty_size() will output wrong unit. For example, pretty_size(1008) will output '0.98B' not '1008B' or '0.98KiB'. The cause is, for default base and auto-detect unit, base will be 1024 but num_divs is still 0, last result will still be divided by base, causing the bug. Fix it by checking num_divs in default case, and if num_divs is 0, change base to 1. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'utils.c')
-rw-r--r--utils.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/utils.c b/utils.c
index eabc36dc..7d5537fc 100644
--- a/utils.c
+++ b/utils.c
@@ -1672,6 +1672,13 @@ int pretty_size_snprintf(u64 size, char *str, size_t str_size, unsigned unit_mod
size /= mult;
num_divs++;
}
+ /*
+ * If the value is smaller than base, we didn't do any
+ * division, in that case, base should be 1, not original
+ * base, or the unit will be wrong
+ */
+ if (num_divs == 0)
+ base = 1;
}
if (num_divs >= ARRAY_SIZE(unit_suffix_binary)) {