summaryrefslogtreecommitdiff
path: root/utils.c
diff options
context:
space:
mode:
authorGoffredo Baroncelli <kreijack@inwind.it>2012-10-01 14:11:27 -0600
committerroot <root@localhost.localdomain>2012-10-04 16:26:33 -0400
commit29db8b12cd06e7eb2e6789ad896c40837db610e5 (patch)
tree6c8b6f7a8c354c477f19e3101bff7cd0fa95c357 /utils.c
parente86f7198d97a85d3b56ea4053e8fb275f620a8ec (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.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/utils.c b/utils.c
index aebe8e5f..205e6673 100644
--- a/utils.c
+++ b/utils.c
@@ -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;
}