diff options
author | simon <simon@FreeBSD.org> | 2009-06-07 09:06:21 +0000 |
---|---|---|
committer | simon <simon@FreeBSD.org> | 2009-06-07 09:06:21 +0000 |
commit | 20ba45d5b37b68ee12f21bc1456d6a3e1a91de89 (patch) | |
tree | 06bd4b89a6333086c68cf31df4a6c0b71571d608 | |
parent | cd4e8f22328f7018cb9318f49c6bbf2775f79b1e (diff) | |
download | FreeBSD-src-20ba45d5b37b68ee12f21bc1456d6a3e1a91de89.zip FreeBSD-src-20ba45d5b37b68ee12f21bc1456d6a3e1a91de89.tar.gz |
Make "human-readable" (-H/-h) output also "humanize" inode counts.
Base 10 is always used for the inode counts as I could not think of any
reason base 2 inode counts would be useful.
Minor mdoc markup fix to df(1) while here anyway.
MFC after: 3 weeks
-rw-r--r-- | bin/df/df.1 | 9 | ||||
-rw-r--r-- | bin/df/df.c | 34 |
2 files changed, 37 insertions, 6 deletions
diff --git a/bin/df/df.1 b/bin/df/df.1 index 7d4253d..8ed6fc6 100644 --- a/bin/df/df.1 +++ b/bin/df/df.1 @@ -78,15 +78,20 @@ this overrides the .Ev BLOCKSIZE specification from the environment. .It Fl H -"Human-readable" output. +.Dq Human-readable +output. Use unit suffixes: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte in order to reduce the number of digits to four or fewer using base 10 for sizes. .It Fl h -"Human-readable" output. +.Dq Human-readable +output. Use unit suffixes: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte in order to reduce the number of digits to four or fewer using base 2 for sizes. +Inodes statistics, if enabled with +.Fl i , +are always printed in base 10. .It Fl i Include statistics on the number of free inodes. .It Fl k diff --git a/bin/df/df.c b/bin/df/df.c index 465f65b..49c2d9f 100644 --- a/bin/df/df.c +++ b/bin/df/df.c @@ -369,6 +369,23 @@ prthumanval(int64_t bytes) } /* + * Print an inode count in "human-readable" format. + */ +static void +prthumanvalinode(int64_t bytes) +{ + char buf[6]; + int flags; + + flags = HN_NOSPACE | HN_DECIMAL | HN_DIVISOR_1000; + + humanize_number(buf, sizeof(buf) - (bytes < 0 ? 0 : 1), + bytes, "", HN_AUTOSCALE, flags); + + (void)printf(" %5s", buf); +} + +/* * Convert statfs returned file system size into BLOCKSIZE units. * Attempts to avoid overflow for large file systems. */ @@ -413,8 +430,10 @@ prtstat(struct statfs *sfsp, struct maxwidths *mwp) (void)printf(" %-*s %*s %*s Capacity", mwp->total, header, mwp->used, "Used", mwp->avail, "Avail"); if (iflag) { - mwp->iused = imax(mwp->iused, (int)strlen(" iused")); - mwp->ifree = imax(mwp->ifree, (int)strlen("ifree")); + mwp->iused = imax(hflag ? 0 : mwp->iused, + (int)strlen(" iused")); + mwp->ifree = imax(hflag ? 0 : mwp->ifree, + (int)strlen("ifree")); (void)printf(" %*s %*s %%iused", mwp->iused - 2, "iused", mwp->ifree, "ifree"); } @@ -440,8 +459,15 @@ prtstat(struct statfs *sfsp, struct maxwidths *mwp) if (iflag) { inodes = sfsp->f_files; used = inodes - sfsp->f_ffree; - (void)printf(" %*jd %*jd %4.0f%% ", mwp->iused, (intmax_t)used, - mwp->ifree, (intmax_t)sfsp->f_ffree, inodes == 0 ? 100.0 : + if (hflag) { + (void)printf(" "); + prthumanvalinode(used); + prthumanvalinode(sfsp->f_ffree); + } else { + (void)printf(" %*jd %*jd", mwp->iused, (intmax_t)used, + mwp->ifree, (intmax_t)sfsp->f_ffree); + } + (void)printf(" %4.0f%% ", inodes == 0 ? 100.0 : (double)used / (double)inodes * 100.0); } else (void)printf(" "); |