Date: Thu, 10 May 2001 18:38:48 +0300 From: Peter Pentchev <roam@orbitel.bg> To: Garrett Wollman <wollman@khavrinen.lcs.mit.edu> Cc: freebsd-bugs@FreeBSD.org Subject: Re: bin/27240: df does not support '-l' option Message-ID: <20010510183848.C56859@ringworld.oblivion.bg> In-Reply-To: <200105101500.f4AF05207651@freefall.freebsd.org>; from wollman@khavrinen.lcs.mit.edu on Thu, May 10, 2001 at 08:00:05AM -0700 References: <200105101500.f4AF05207651@freefall.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, May 10, 2001 at 08:00:05AM -0700, Garrett Wollman wrote:
> The following reply was made to PR bin/27240; it has been noted by GNATS.
>
> From: Garrett Wollman <wollman@khavrinen.lcs.mit.edu>
> To: Jim.Pirzyk@disney.com
> Cc: FreeBSD-gnats-submit@FreeBSD.ORG
> Subject: bin/27240: df does not support '-l' option
> Date: Thu, 10 May 2001 10:50:16 -0400 (EDT)
>
> <<On Wed, 9 May 2001 22:06:47 -0700 (PDT), Jim.Pirzyk@disney.com said:
>
> > + case 'l':
> > + if (vfslist != NULL)
> > + errx(1, "-l and -t are mutally exclusive.");
> > + vfslist = makevfslist("nonfs");
> > + break;
>
> Actually, that's not the right way to implement this function. The
> correct way would be to scan the list of available filesystem types
> and look for ones without the VFCF_NETWORK flag.
OK, how about the following patch - it just gets all filesystems, and then
processes only those for which statfs(2) has set the MNT_LOCAL flag.
G'luck,
Peter
--
No language can express every thought unambiguously, least of all this one.
Index: src/bin/df/df.1
===================================================================
RCS file: /home/ncvs/src/bin/df/df.1,v
retrieving revision 1.22
diff -u -r1.22 df.1
--- src/bin/df/df.1 2001/02/01 16:24:49 1.22
+++ src/bin/df/df.1 2001/05/10 15:37:55
@@ -44,7 +44,7 @@
.Fl b | h | H | k |
.Fl m | P
.Oc
-.Op Fl ain
+.Op Fl ailn
.Op Fl t Ar type
.Op Ar file | filesystem ...
.Sh DESCRIPTION
@@ -91,6 +91,8 @@
this overrides the
.Ev BLOCKSIZE
specification from the environment.
+.It Fl l
+Only display information about locally-mounted filesystems.
.It Fl m
Use 1048576-byte (1-Mbyte) blocks rather than the default. Note that
this overrides the
@@ -106,7 +108,7 @@
will not request new statistics from the filesystems, but will respond
with the possibly stale statistics that were previously obtained.
.It Fl P
-Use POSIX compliant output of 512-byte blocks rather than the default.
+Use POSIX compliant output of 512-byte blocks rather than the default.
Note that this overrides the
.Ev BLOCKSIZE
specification from the environment.
Index: src/bin/df/df.c
===================================================================
RCS file: /home/ncvs/src/bin/df/df.c,v
retrieving revision 1.26
diff -u -r1.26 df.c
--- src/bin/df/df.c 2001/05/09 08:44:15 1.26
+++ src/bin/df/df.c 2001/05/10 15:37:56
@@ -107,7 +107,7 @@
unit_t unit_adjust __P((double *));
void usage __P((void));
-int aflag = 0, hflag, iflag, nflag;
+int aflag, hflag, iflag, lflag, nflag;
struct ufs_args mdev;
int
@@ -124,7 +124,7 @@
fstype = "ufs";
vfslist = NULL;
- while ((ch = getopt(argc, argv, "abgHhikmnPt:")) != -1)
+ while ((ch = getopt(argc, argv, "abgHhiklmnPt:")) != -1)
switch (ch) {
case 'a':
aflag = 1;
@@ -154,6 +154,9 @@
putenv("BLOCKSIZE=1k");
hflag = 0;
break;
+ case 'l':
+ lflag = 1;
+ break;
case 'm':
putenv("BLOCKSIZE=1m");
hflag = 0;
@@ -188,12 +191,16 @@
if (vfslist != NULL) {
maxwidth = 0;
for (i = 0; i < mntsize; i++) {
+ if (lflag && !(mntbuf[i].f_flags & MNT_LOCAL))
+ continue;
width = strlen(mntbuf[i].f_mntfromname);
if (width > maxwidth)
maxwidth = width;
}
}
for (i = 0; i < mntsize; i++) {
+ if (lflag && !(mntbuf[i].f_flags & MNT_LOCAL))
+ continue;
if (aflag || (mntbuf[i].f_flags & MNT_IGNORE) == 0)
prtstat(&mntbuf[i], maxwidth);
}
@@ -203,7 +210,7 @@
for (; *argv; argv++) {
if (stat(*argv, &stbuf) < 0) {
err = errno;
- if ((mntpt = getmntpt(*argv)) == 0) {
+ if ((mntpt = getmntpt(*argv)) == NULL) {
warn("%s", *argv);
rv = 1;
continue;
@@ -232,7 +239,9 @@
continue;
} else if (statfs(mntpt, &statfsbuf) == 0) {
statfsbuf.f_mntonname[0] = '\0';
- prtstat(&statfsbuf, maxwidth);
+ if (!lflag ||
+ (statfsbuf.f_flags & MNT_LOCAL))
+ prtstat(&statfsbuf, maxwidth);
} else {
warn("%s", *argv);
rv = 1;
@@ -255,7 +264,8 @@
}
if (argc == 1)
maxwidth = strlen(statfsbuf.f_mntfromname) + 1;
- prtstat(&statfsbuf, maxwidth);
+ if (!lflag || (statfsbuf.f_flags & MNT_LOCAL))
+ prtstat(&statfsbuf, maxwidth);
}
return (rv);
}
@@ -289,12 +299,15 @@
int i, j;
struct statfs *mntbuf;
- if (vfslist == NULL)
+ if (!lflag && (vfslist == NULL))
return (nflag ? mntsize : getmntinfo(mntbufp, MNT_WAIT));
mntbuf = *mntbufp;
for (j = 0, i = 0; i < mntsize; i++) {
- if (checkvfsname(mntbuf[i].f_fstypename, vfslist))
+ if (lflag && !(mntbuf[i].f_flags & MNT_LOCAL))
+ continue;
+ if ((vfslist != NULL) &&
+ checkvfsname(mntbuf[i].f_fstypename, vfslist))
continue;
if (!nflag)
(void)statfs(mntbuf[i].f_mntonname,&mntbuf[j]);
@@ -462,7 +475,7 @@
sfsp = &statfsbuf;
sfsp->f_type = 1;
strcpy(sfsp->f_fstypename, "ufs");
- sfsp->f_flags = 0;
+ sfsp->f_flags = MNT_LOCAL;
sfsp->f_bsize = sblock.fs_fsize;
sfsp->f_iosize = sblock.fs_bsize;
sfsp->f_blocks = sblock.fs_dsize;
@@ -506,6 +519,6 @@
{
(void)fprintf(stderr,
- "usage: df [-b | -H | -h | -k | -m | -P] [-ain] [-t type] [file | filesystem ...]\n");
+ "usage: df [-b | -H | -h | -k | -l | -m | -P] [-ain] [-t type] [file | filesystem ...]\n");
exit(EX_USAGE);
}
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?20010510183848.C56859>
