diff options
Diffstat (limited to 'toys/posix/du.c')
-rw-r--r-- | toys/posix/du.c | 14 |
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; |