diff options
author | Goffredo Baroncelli <kreijack@inwind.it> | 2012-10-01 14:11:27 -0600 |
---|---|---|
committer | root <root@localhost.localdomain> | 2012-10-04 16:26:33 -0400 |
commit | 29db8b12cd06e7eb2e6789ad896c40837db610e5 (patch) | |
tree | 6c8b6f7a8c354c477f19e3101bff7cd0fa95c357 /utils.c | |
parent | e86f7198d97a85d3b56ea4053e8fb275f620a8ec (diff) |
pretty_sizes() returns incorrect values
pretty_sizes() returns incorrect values if the argument is < 1024.
pretty_sizes(0) -> 0.00 OK
pretty_sizes(102) -> 0.10 WRONG
pretty_sizes(1023) -> 1.00 WRONG
pretty_sizes(1024) -> 1.00KB OK
Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'utils.c')
-rw-r--r-- | utils.c | 30 |
1 files changed, 16 insertions, 14 deletions
@@ -1091,25 +1091,27 @@ char *pretty_sizes(u64 size) { int num_divs = 0; int pretty_len = 16; - u64 last_size = size; - u64 fract_size = size; float fraction; char *pretty; - while(size > 0) { - fract_size = last_size; - last_size = size; - size /= 1024; - num_divs++; - } - if (num_divs == 0) - num_divs = 1; - if (num_divs > ARRAY_SIZE(size_strs)) - return NULL; + if( size < 1024 ){ + fraction = size; + num_divs = 0; + } else { + u64 last_size = size; + num_divs = 0; + while(size >= 1024){ + last_size = size; + size /= 1024; + num_divs ++; + } - fraction = (float)fract_size / 1024; + if (num_divs > ARRAY_SIZE(size_strs)) + return NULL; + fraction = (float)last_size / 1024; + } pretty = malloc(pretty_len); - snprintf(pretty, pretty_len, "%.2f%s", fraction, size_strs[num_divs-1]); + snprintf(pretty, pretty_len, "%.2f%s", fraction, size_strs[num_divs]); return pretty; } |