# HG changeset patch # User Rob Landley # Date 1352408583 21600 # Node ID 598263aee2b97d526a8e58d2884d67b8a726efb3 # Parent 9414be56b1dba20bc16fbdd2a780cb6240f98dbf Change df percentage calculation to match posix, spotted by Roy Tam. diff -r 9414be56b1db -r 598263aee2b9 toys/posix/df.c --- 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;