-static const uint64_t size_unit_divisors[] = {
- [size_unit_arg_b] = 1ULL,
- [size_unit_arg_k] = 1024ULL,
- [size_unit_arg_m] = 1024ULL * 1024ULL,
- [size_unit_arg_g] = 1024ULL * 1024ULL * 1024ULL,
- [size_unit_arg_t] = 1024ULL * 1024ULL * 1024ULL * 1024ULL,
-};
-
-static const uint64_t count_unit_divisors[] = {
-
- [count_unit_arg_n] = 1ULL,
- [count_unit_arg_k] = 1000ULL,
- [count_unit_arg_m] = 1000ULL * 1000ULL,
- [count_unit_arg_g] = 1000ULL * 1000ULL * 1000ULL,
- [count_unit_arg_t] = 1000ULL * 1000ULL * 1000ULL * 1000ULL,
-};
-
-static const char size_unit_abbrevs[] = " BKMGT";
-static const char count_unit_abbrevs[] = " kmgt";
-static enum enum_size_unit format_size_value(enum enum_size_unit unit,
- uint64_t value, int print_unit, char *result)
-{
- enum enum_size_unit u = unit;
- char unit_buf[2] = "\0\0";
-
- if (unit == size_unit_arg_h) /* human readable */
- for (u = size_unit_arg_b; u < size_unit_arg_t &&
- value > size_unit_divisors[u + 1]; u++)
- ; /* nothing */
- if (print_unit)
- unit_buf[0] = size_unit_abbrevs[u];
- sprintf(result, "%llu%s",
- (long long unsigned)value / size_unit_divisors[u], unit_buf);
- return u;
-}
-
-static enum enum_count_unit format_count_value(enum enum_count_unit unit,
- uint64_t value, int print_unit, char *result)
-{
- enum enum_count_unit u = unit;
- char unit_buf[2] = "\0\0";
-
- if (unit == count_unit_arg_h) /* human readable */
- for (u = count_unit_arg_n; u < count_unit_arg_t &&
- value > count_unit_divisors[u + 1]; u++)
- ; /* nothing */
- if (print_unit)
- unit_buf[0] = count_unit_abbrevs[u];
- sprintf(result, "%llu%s",
- (long long unsigned)value / count_unit_divisors[u], unit_buf);
- return u;
-}