Date: Sun, 2 Jul 2000 07:58:17 +0200 (CEST) From: clefevre@citeweb.net To: FreeBSD-gnats-submit@freebsd.org Subject: bin/19635: add -c for grand total to df(1), like du(1) does Message-ID: <200007020558.HAA71231@gits.dyndns.org>
next in thread | raw e-mail | index | archive | help
>Number: 19635
>Category: bin
>Synopsis: add -c for grand total to df(1), like du(1) does
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sat Jul 01 23:00:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator: Cyrille Lefevre
>Release: FreeBSD 4.0-STABLE i386
>Organization:
ACME
>Environment:
FreeBSD gits 4.0-STABLE FreeBSD 4.0-STABLE #11: Wed Jun 28 06:32:13 CEST 2000 root@gits:/disk2/4.0-stable/src/sys/compile/CUSTOM i386
>Description:
add -c for grand total to df(1), like du(1) does.
sample of output :
# df -c
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/da0s1a 1904559 1249983 502212 71% /
/dev/da1s1c 2031922 1336326 533043 71% /disk2
/dev/da2s1a 1904559 1484367 267828 85% /disk1
/dev/da3s1a 1904559 1414623 337572 81% /disk4
procfs 4 4 0 100% /proc
total 7745603 5485303 1640655 77%
>How-To-Repeat:
n/a
>Fix:
Index: /usr/src/bin/df/df.1
===================================================================
RCS file: /home/ncvs/src/bin/df/df.1,v
retrieving revision 1.18.2.2
diff -u -b -r1.18.2.2 df.1
--- /usr/src/bin/df/df.1 2000/07/01 03:02:08 1.18.2.2
+++ /usr/src/bin/df/df.1 2000/07/02 05:38:45
@@ -44,7 +44,7 @@
.Fl b | h | H | k |
.Fl m | P
.Oc
-.Op Fl ain
+.Op Fl acin
.Op Fl t Ar type
.Op Ar file | Ar filesystem ...
.Sh DESCRIPTION
@@ -71,6 +71,8 @@
this overrides the
.Ev BLOCKSIZE
specification from the environment.
+.It Fl c
+Display a grand total.
.It Fl g
Use 1073741824-byte (1-Gbyte) blocks rather than the default. Note that
this overrides the
Index: /usr/src/bin/df/df.c
===================================================================
RCS file: /home/ncvs/src/bin/df/df.c,v
retrieving revision 1.23.2.1
diff -u -b -r1.23.2.1 df.c
--- /usr/src/bin/df/df.c 2000/06/13 03:19:40 1.23.2.1
+++ /usr/src/bin/df/df.c 2000/07/02 05:38:40
@@ -103,11 +103,12 @@
void prthuman __P((struct statfs *, long));
void prthumanval __P((double));
void prtstat __P((struct statfs *, int));
+void addstat __P((struct statfs *, struct statfs *));
int ufs_df __P((char *, int));
unit_t unit_adjust __P((double *));
void usage __P((void));
-int aflag = 0, hflag, iflag, nflag;
+int aflag = 0, cflag = 0, hflag, iflag, nflag;
struct ufs_args mdev;
int
@@ -116,17 +117,22 @@
char *argv[];
{
struct stat stbuf;
- struct statfs statfsbuf, *mntbuf;
+ struct statfs statfsbuf, *mntbuf, totalbuf = { 0 };
long mntsize;
int ch, err, i, maxwidth, rv, width;
char *mntpt, *mntpath, **vfslist;
+ totalbuf.f_bsize = DEV_BSIZE;
+ strncpy (totalbuf.f_mntfromname, "total", MNAMELEN);
vfslist = NULL;
- while ((ch = getopt(argc, argv, "abgHhikmnPt:")) != -1)
+ while ((ch = getopt(argc, argv, "abcgHhikmnPt:")) != -1)
switch (ch) {
case 'a':
aflag = 1;
break;
+ case 'c':
+ cflag = 1;
+ break;
case 'b':
/* FALLTHROUGH */
case 'P':
@@ -191,9 +197,14 @@
}
}
for (i = 0; i < mntsize; i++) {
- if (aflag || (mntbuf[i].f_flags & MNT_IGNORE) == 0)
+ if (aflag || (mntbuf[i].f_flags & MNT_IGNORE) == 0) {
prtstat(&mntbuf[i], maxwidth);
+ if (cflag)
+ addstat(&totalbuf, &mntbuf[i]);
+ }
}
+ if (cflag)
+ prtstat(&totalbuf, maxwidth);
exit(rv);
}
@@ -256,7 +267,11 @@
if (argc == 1)
maxwidth = strlen(statfsbuf.f_mntfromname) + 1;
prtstat(&statfsbuf, maxwidth);
+ if (cflag)
+ addstat(&totalbuf, &statfsbuf);
}
+ if (cflag)
+ prtstat(&totalbuf, maxwidth);
return (rv);
}
@@ -380,6 +395,7 @@
static int headerlen, timesthrough;
static char *header;
long used, availblks, inodes;
+ int total;
if (maxwidth < 11)
maxwidth = 11;
@@ -411,14 +427,32 @@
}
(void)printf(" %5.0f%%",
availblks == 0 ? 100.0 : (double)used / (double)availblks * 100.0);
+ total = !*sfsp->f_mntonname &&
+ !strncmp(sfsp->f_mntfromname, "total", MNAMELEN);
if (iflag) {
inodes = sfsp->f_files;
used = inodes - sfsp->f_ffree;
(void)printf(" %7ld %7ld %5.0f%% ", used, sfsp->f_ffree,
inodes == 0 ? 100.0 : (double)used / (double)inodes * 100.0);
- } else
+ } else if (!total)
(void)printf(" ");
- (void)printf(" %s\n", sfsp->f_mntonname);
+ if (!total)
+ (void)printf(" %s", sfsp->f_mntonname);
+ (void)printf("\n");
+}
+
+void
+addstat(totalfsp, statfsp)
+ struct statfs *totalfsp, *statfsp;
+{
+ totalfsp->f_blocks += (statfsp->f_blocks * statfsp->f_bsize) /
+ totalfsp->f_bsize;
+ totalfsp->f_bfree += (statfsp->f_bfree * statfsp->f_bsize) /
+ totalfsp->f_bsize;
+ totalfsp->f_bavail += (statfsp->f_bavail * statfsp->f_bsize) /
+ totalfsp->f_bsize;
+ totalfsp->f_files += statfsp->f_files;
+ totalfsp->f_ffree += statfsp->f_ffree;
}
/*
@@ -506,6 +540,6 @@
{
(void)fprintf(stderr,
- "usage: df [-b | -H | -h | -k | -m | -P] [-ain] [-t type] [file | filesystem ...]\n");
+ "usage: df [-b | -H | -h | -k | -m | -P] [-acin] [-t type] [file | filesystem ...]\n");
exit(EX_USAGE);
}
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200007020558.HAA71231>
