Blob Blame History Raw
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);