The remainder from do_div is always a u32, and after size has been
reduced to be below 1000 (or 1024), it certainly fits in u32. So both
remainder and sf_cap can be made u32s, the format specifiers can be
simplified (%lld wasn't the right thing to use for _unsigned_ long
long anyway), and we can replace a do_div with an ordinary 32/32 bit
division.

Signed-off-by: Rasmus Villemoes <[email protected]>
---
 lib/string_helpers.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/lib/string_helpers.c b/lib/string_helpers.c
index 0d25f7aa732c..2b3757f84b3b 100644
--- a/lib/string_helpers.c
+++ b/lib/string_helpers.c
@@ -42,7 +42,7 @@ int string_get_size(u64 size, const enum string_size_units 
units,
                [STRING_UNITS_2] = 1024,
        };
        int i, j;
-       u64 remainder = 0, sf_cap;
+       u32 remainder = 0, sf_cap;
        char tmp[8];
 
        tmp[0] = '\0';
@@ -59,14 +59,13 @@ int string_get_size(u64 size, const enum string_size_units 
units,
 
                if (j) {
                        remainder *= 1000;
-                       do_div(remainder, divisor[units]);
-                       snprintf(tmp, sizeof(tmp), ".%03lld",
-                                (unsigned long long)remainder);
+                       remainder /= divisor[units];
+                       snprintf(tmp, sizeof(tmp), ".%03u", remainder);
                        tmp[j+1] = '\0';
                }
        }
 
-       snprintf(buf, len, "%lld%s %s", (unsigned long long)size,
+       snprintf(buf, len, "%u%s %s", (u32)size,
                 tmp, units_str[units][i]);
 
        return 0;
-- 
2.1.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to