summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsimon <simon@FreeBSD.org>2009-06-07 09:06:21 +0000
committersimon <simon@FreeBSD.org>2009-06-07 09:06:21 +0000
commit20ba45d5b37b68ee12f21bc1456d6a3e1a91de89 (patch)
tree06bd4b89a6333086c68cf31df4a6c0b71571d608
parentcd4e8f22328f7018cb9318f49c6bbf2775f79b1e (diff)
downloadFreeBSD-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.19
-rw-r--r--bin/df/df.c34
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(" ");
OpenPOWER on IntegriCloud