diff options
Diffstat (limited to 'lib/string_helpers.c')
| -rw-r--r-- | lib/string_helpers.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/lib/string_helpers.c b/lib/string_helpers.c index 58b78ba57439..8f8c4417f228 100644 --- a/lib/string_helpers.c +++ b/lib/string_helpers.c | |||
| @@ -20,19 +20,18 @@ | |||
| 20 | * @len: length of buffer | 20 | * @len: length of buffer |
| 21 | * | 21 | * |
| 22 | * This function returns a string formatted to 3 significant figures | 22 | * This function returns a string formatted to 3 significant figures |
| 23 | * giving the size in the required units. Returns 0 on success or | 23 | * giving the size in the required units. @buf should have room for |
| 24 | * error on failure. @buf is always zero terminated. | 24 | * at least 9 bytes and will always be zero terminated. |
| 25 | * | 25 | * |
| 26 | */ | 26 | */ |
| 27 | int string_get_size(u64 size, const enum string_size_units units, | 27 | void string_get_size(u64 size, const enum string_size_units units, |
| 28 | char *buf, int len) | 28 | char *buf, int len) |
| 29 | { | 29 | { |
| 30 | static const char *const units_10[] = { | 30 | static const char *const units_10[] = { |
| 31 | "B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB", NULL | 31 | "B", "kB", "MB", "GB", "TB", "PB", "EB" |
| 32 | }; | 32 | }; |
| 33 | static const char *const units_2[] = { | 33 | static const char *const units_2[] = { |
| 34 | "B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB", | 34 | "B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB" |
| 35 | NULL | ||
| 36 | }; | 35 | }; |
| 37 | static const char *const *const units_str[] = { | 36 | static const char *const *const units_str[] = { |
| 38 | [STRING_UNITS_10] = units_10, | 37 | [STRING_UNITS_10] = units_10, |
| @@ -43,13 +42,13 @@ int string_get_size(u64 size, const enum string_size_units units, | |||
| 43 | [STRING_UNITS_2] = 1024, | 42 | [STRING_UNITS_2] = 1024, |
| 44 | }; | 43 | }; |
| 45 | int i, j; | 44 | int i, j; |
| 46 | u64 remainder = 0, sf_cap; | 45 | u32 remainder = 0, sf_cap; |
| 47 | char tmp[8]; | 46 | char tmp[8]; |
| 48 | 47 | ||
| 49 | tmp[0] = '\0'; | 48 | tmp[0] = '\0'; |
| 50 | i = 0; | 49 | i = 0; |
| 51 | if (size >= divisor[units]) { | 50 | if (size >= divisor[units]) { |
| 52 | while (size >= divisor[units] && units_str[units][i]) { | 51 | while (size >= divisor[units]) { |
| 53 | remainder = do_div(size, divisor[units]); | 52 | remainder = do_div(size, divisor[units]); |
| 54 | i++; | 53 | i++; |
| 55 | } | 54 | } |
| @@ -60,17 +59,14 @@ int string_get_size(u64 size, const enum string_size_units units, | |||
| 60 | 59 | ||
| 61 | if (j) { | 60 | if (j) { |
| 62 | remainder *= 1000; | 61 | remainder *= 1000; |
| 63 | do_div(remainder, divisor[units]); | 62 | remainder /= divisor[units]; |
| 64 | snprintf(tmp, sizeof(tmp), ".%03lld", | 63 | snprintf(tmp, sizeof(tmp), ".%03u", remainder); |
| 65 | (unsigned long long)remainder); | ||
| 66 | tmp[j+1] = '\0'; | 64 | tmp[j+1] = '\0'; |
| 67 | } | 65 | } |
| 68 | } | 66 | } |
| 69 | 67 | ||
| 70 | snprintf(buf, len, "%lld%s %s", (unsigned long long)size, | 68 | snprintf(buf, len, "%u%s %s", (u32)size, |
| 71 | tmp, units_str[units][i]); | 69 | tmp, units_str[units][i]); |
| 72 | |||
| 73 | return 0; | ||
| 74 | } | 70 | } |
| 75 | EXPORT_SYMBOL(string_get_size); | 71 | EXPORT_SYMBOL(string_get_size); |
| 76 | 72 | ||
