Mercurial > hg > toybox
changeset 687:598263aee2b9
Change df percentage calculation to match posix, spotted by Roy Tam.
author | Rob Landley <rob@landley.net> |
---|---|
date | Thu, 08 Nov 2012 15:03:03 -0600 |
parents | 9414be56b1db |
children | 9791e462855a |
files | toys/posix/df.c |
diffstat | 1 files changed, 10 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/toys/posix/df.c Thu Nov 08 11:19:07 2012 -0600 +++ b/toys/posix/df.c Thu Nov 08 15:03:03 2012 -0600 @@ -49,8 +49,7 @@ static void show_mt(struct mtab_list *mt) { int len; - long size, used, avail, percent; - uint64_t block; + uint64_t size, used, avail, percent, block; char *device; // Return if it wasn't found (should never happen, but with /etc/mtab...) @@ -72,13 +71,15 @@ // Figure out how much total/used/free space this filesystem has, // forcing 64-bit math because filesystems are big now. block = mt->statvfs.f_bsize ? mt->statvfs.f_bsize : 1; - size = (long)((block * mt->statvfs.f_blocks) / TT.units); - used = (long)((block * (mt->statvfs.f_blocks-mt->statvfs.f_bfree)) - / TT.units); - avail = (long)((block - * (getuid() ? mt->statvfs.f_bavail : mt->statvfs.f_bfree)) - / TT.units); - percent = size ? 100-(long)((100*(uint64_t)avail)/size) : 0; + size = (block * mt->statvfs.f_blocks) / TT.units; + used = (block * (mt->statvfs.f_blocks-mt->statvfs.f_bfree)) / TT.units; + avail = (block * (getuid() ? mt->statvfs.f_bavail : mt->statvfs.f_bfree)) + / TT.units; + if (!(used+avail)) percent = 0; + else { + percent = (used*100)/(used+avail); + if (used*100 != percent*(used+avail)) percent++; + } device = *mt->device == '/' ? realpath(mt->device, NULL) : NULL; if (!device) device = mt->device;