# HG changeset patch # User Rob Landley # Date 1351304131 18000 # Node ID 44904c7212e7a7ebc322089567e9f7c0dacd99e2 # Parent ff2cf02d97034b29c4567fc4f0fdbddb43212afb Follow symlinks to get actual device name, getmountlist() reverses order for us now, detect stdout to full device. diff -r ff2cf02d9703 -r 44904c7212e7 toys/posix/df.c --- a/toys/posix/df.c Tue Oct 23 16:28:14 2012 -0500 +++ b/toys/posix/df.c Fri Oct 26 21:15:31 2012 -0500 @@ -51,6 +51,7 @@ int len; long size, used, avail, percent; uint64_t block; + char *device; // Return if it wasn't found (should never happen, but with /etc/mtab...) if (!mt) return; @@ -79,16 +80,21 @@ / TT.units); percent = size ? 100-(long)((100*(uint64_t)avail)/size) : 0; + device = *mt->device == '/' ? realpath(mt->device, NULL) : NULL; + if (!device) device = mt->device; + // Figure out appropriate spacing - len = 25 - strlen(mt->device); + len = 25 - strlen(device); if (len < 1) len = 1; if (CFG_DF_PEDANTIC && (toys.optflags & FLAG_P)) { - printf("%s %ld %ld %ld %ld%% %s\n", mt->device, size, used, avail, + xprintf("%s %ld %ld %ld %ld%% %s\n", device, size, used, avail, percent, mt->dir); } else { - printf("%s% *ld % 10ld % 9ld % 3ld%% %s\n",mt->device, len, + xprintf("%s% *ld % 10ld % 9ld % 3ld%% %s\n", device, len, size, used, avail, percent, mt->dir); } + + if (device != mt->device) free(device); } void df_main(void) @@ -123,8 +129,12 @@ // Find and display this filesystem. Use _last_ hit in case of // -- bind mounts. mt2 = NULL; - for (mt = mtlist; mt; mt = mt->next) - if (st.st_dev == mt->stat.st_dev) mt2 = mt; + for (mt = mtlist; mt; mt = mt->next) { + if (st.st_dev == mt->stat.st_dev) { + mt2 = mt; + break; + } + } show_mt(mt2); } } else {