about summary refs log tree commit diff
path: root/mscan.c
diff options
context:
space:
mode:
Diffstat (limited to 'mscan.c')
-rw-r--r--mscan.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/mscan.c b/mscan.c
index 2035838..6163f24 100644
--- a/mscan.c
+++ b/mscan.c
@@ -221,8 +221,8 @@ fmt_to_flag(struct message *msg)
 		return " ";
 }
 
-static void
-print_human(intmax_t i)
+static ssize_t
+print_human(intmax_t i, int w)
 {
 	double d = i / 1024.0;
 	const char *u = "\0\0M\0G\0T\0P\0E\0Z\0Y\0";
@@ -232,13 +232,13 @@ print_human(intmax_t i)
 	}
 
 	if (d < 1.0)
-		printf("%4.2f", d);
+		return printf("%*.2f", w, d);
 	else if (!*u)
-		printf("%4.0f", d);
+		return printf("%*.0f", w, d);
 	else if (d < 10.0)
-		printf("%3.1f%s", d, u);
+		return printf("%*.1f%s", w-1, d, u);
 	else
-		printf("%3.0f%s", d, u);
+		return printf("%*.0f%s", w-1, d, u);
 }
 
 void
@@ -395,11 +395,10 @@ oneline(char *file)
 				if (msg) {
 					if (stat(file, &st) != 0)
 						st.st_size = 0;
-					print_human(st.st_size);
+					wleft -= print_human(st.st_size, w);
 				} else {
-					printf("    ");
+					wleft -= printf("%.*s", w, "");
 				}
-				wleft -= 5;
 			}
 			break;
 		case 'F':