aboutsummaryrefslogtreecommitdiff
path: root/toys/posix/du.c
diff options
context:
space:
mode:
Diffstat (limited to 'toys/posix/du.c')
-rw-r--r--toys/posix/du.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/toys/posix/du.c b/toys/posix/du.c
index 64ba0517..96922bca 100644
--- a/toys/posix/du.c
+++ b/toys/posix/du.c
@@ -54,8 +54,18 @@ static void print(long long size, struct dirtree *node)
if (TT.maxdepth && TT.depth > TT.maxdepth) return;
- if (toys.optflags & FLAG_h) printf("%s", human_readable(size));
- else {
+ if (toys.optflags & FLAG_h) {
+ char buf[32];
+ int index, sz;
+
+ for (index = 0; 1024 < size>>(10*index); index++);
+ sz = size>>(10*index);
+ if (sz < 10) {
+ sprintf(buf, "%llu", size>>(10*(index-1)));
+ printf("%c.%c", buf[0], buf[1]);
+ } else printf("%d", sz);
+ if (index) printf("%c", " KMGTPE"[index]);
+ } else {
int bits = 10;
if (toys.optflags & FLAG_K) bits = 9;