diff -up util-linux-2.19/lib/strutils.c.kzak util-linux-2.19/lib/strutils.c
--- util-linux-2.19/lib/strutils.c.kzak 2011-01-31 16:43:47.000000000 +0100
+++ util-linux-2.19/lib/strutils.c 2011-02-15 10:58:15.000000000 +0100
@@ -245,8 +245,9 @@ static int get_exp(uint64_t n)
char *size_to_human_string(uint64_t bytes)
{
char buf[32];
- int dec, frac, exp;
- const char *letters = "BKMGTP";
+ int dec, exp;
+ uint64_t frac;
+ const char *letters = "BKMGTPE";
char c;
exp = get_exp(bytes);
@@ -254,6 +255,10 @@ char *size_to_human_string(uint64_t byte
dec = exp ? bytes / (1ULL << exp) : bytes;
frac = exp ? bytes % (1ULL << exp) : 0;
+ /* fprintf(stderr, "exp: %d, c: %c, dec: %d, frac: %jd\n",
+ * exp, c, dec, frac);
+ */
+
if (frac) {
/* round */
frac = (frac / (1ULL << (exp - 10)) + 50) / 100;
@@ -267,7 +272,7 @@ char *size_to_human_string(uint64_t byte
if (!dp || !*dp)
dp = ".";
- snprintf(buf, sizeof(buf), "%d%s%d%c", dec, dp, frac, c);
+ snprintf(buf, sizeof(buf), "%d%s%jd%c", dec, dp, frac, c);
} else
snprintf(buf, sizeof(buf), "%d%c", dec, c);