Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 May 2001 08:30:03 -0700 (PDT)
From:      Jim Pirzyk <Jim.Pirzyk@disney.com>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/27240: df does not support '-l' option
Message-ID:  <200105111530.f4BFU3l07328@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/27240; it has been noted by GNATS.

From: Jim Pirzyk <Jim.Pirzyk@disney.com>
To: Garrett Wollman <wollman@khavrinen.lcs.mit.edu>
Cc: FreeBSD-gnats-submit@FreeBSD.ORG
Subject: Re: bin/27240: df does not support '-l' option
Date: Fri, 11 May 2001 08:18:39 -0700

 So here is the complete patch using VFCF_NETWORK flag to generate the list
 of networked filesystems.
 
 On Thursday 10 May 2001 07:50 am, Garrett Wollman wrote:
 > <<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.
 >
 > -GAWollman
 
 *** ./bin/df/df.1.orig	Mon Mar  5 01:55:59 2001
 --- ./bin/df/df.1	Thu May 10 12:01:01 2001
 ***************
 *** 44,50 ****
   .Fl b | h | H | k |
   .Fl m | P
   .Oc
 ! .Op Fl ain
   .Op Fl t Ar type
   .Op Ar file | filesystem ...
   .Sh DESCRIPTION
 --- 44,50 ----
   .Fl b | h | H | k |
   .Fl m | P
   .Oc
 ! .Op Fl ailn
   .Op Fl t Ar type
   .Op Ar file | filesystem ...
   .Sh DESCRIPTION
 ***************
 *** 91,96 ****
 --- 91,98 ----
   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,112 ****
   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. 
   Note that this overrides the
   .Ev BLOCKSIZE
   specification from the environment.
 --- 108,114 ----
   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.
   Note that this overrides the
   .Ev BLOCKSIZE
   specification from the environment.
 *** ./bin/df/df.c.orig	Mon Jun 12 20:19:40 2000
 --- ./bin/df/df.c	Fri May 11 08:15:02 2001
 ***************
 *** 54,59 ****
 --- 54,60 ----
   #include <sys/param.h>
   #include <sys/stat.h>
   #include <sys/mount.h>
 + #include <sys/sysctl.h>
   #include <ufs/ufs/ufsmount.h>
   
   #include <err.h>
 ***************
 *** 96,101 ****
 --- 97,103 ----
   int unitp [] = { NONE, KILO, MEGA, GIGA, TERA, PETA };
   
   int	  checkvfsname __P((const char *, char **));
 + char	 *makenetvfslist __P((void));
   char	**makevfslist __P((char *));
   long	  regetmntinfo __P((struct statfs **, long, char **));
   int	  bread __P((off_t, void *, int));
 ***************
 *** 122,128 ****
   	char *mntpt, *mntpath, **vfslist;
   
   	vfslist = NULL;
 ! 	while ((ch = getopt(argc, argv, "abgHhikmnPt:")) != -1)
   		switch (ch) {
   		case 'a':
   			aflag = 1;
 --- 124,130 ----
   	char *mntpt, *mntpath, **vfslist;
   
   	vfslist = NULL;
 ! 	while ((ch = getopt(argc, argv, "abgHhiklmnPt:")) != -1)
   		switch (ch) {
   		case 'a':
   			aflag = 1;
 ***************
 *** 152,157 ****
 --- 154,164 ----
   			putenv("BLOCKSIZE=1k");
   			hflag = 0;
   			break;
 + 		case 'l':
 + 			if (vfslist != NULL)
 + 				errx(1, "-l and -t are mutually exclusive.");
 + 			vfslist = makevfslist(makenetvfslist());
 + 			break;
   		case 'm':
   			putenv("BLOCKSIZE=1m");
   			hflag = 0;
 ***************
 *** 506,511 ****
   {
   
   	(void)fprintf(stderr,
 ! 	    "usage: df [-b | -H | -h | -k | -m | -P] [-ain] [-t type] [file | 
 filesystem ...]\n");
   	exit(EX_USAGE);
   }
 --- 513,564 ----
   {
   
   	(void)fprintf(stderr,
 ! 	    "usage: df [-b | -H | -h | -k | -m | -P] [-ailn] [-t type] [file | 
 filesystem ...]\n");
   	exit(EX_USAGE);
 + }
 + 
 + char *makenetvfslist()
 + {
 + 	char *str, *strptr, **listptr;
 + 	int mib[3], maxvfsconf, miblen, cnt=0, i;
 + 	struct ovfsconf *ptr;
 + 
 + 	mib[0] = CTL_VFS; mib[1] = VFS_GENERIC; mib[2] = VFS_MAXTYPENUM;
 + 	miblen=sizeof(maxvfsconf);
 + 	if (sysctl(mib, sizeof(mib)/sizeof(mib[0]), &maxvfsconf, &miblen, NULL, 
 0)) {
 + 		warnx("sysctl failed");
 + 		return (NULL);
 + 	}
 + 
 + 	if ((listptr=malloc(sizeof(char*) * maxvfsconf)) == NULL) {
 + 		warnx("malloc failed");
 + 		return (NULL);
 + 	}
 + 
 + 	for (ptr=getvfsent();ptr;ptr=getvfsent())
 + 		if (ptr->vfc_flags & VFCF_NETWORK) {
 + 			listptr[cnt++] = strdup (ptr->vfc_name);
 + 			if (! listptr[cnt-1]) {
 + 				warnx("malloc failed");
 + 				return (NULL);
 + 			}
 + 		}
 + 
 + 	if ((str = malloc(sizeof(char)*(32*cnt+cnt+2))) == NULL) {
 + 		warnx("malloc failed");
 + 		free(listptr);
 + 		return (NULL);
 + 	}
 + 
 + 	*str = 'n'; *(str+1) = 'o';
 + 	for (i = 0,strptr=str+2; i < cnt; i++,strptr++) {
 + 		strncpy (strptr, listptr[i], 32);
 + 		strptr+=strlen(listptr[i]);
 + 		*strptr=',';
 + 		free(listptr[i]);
 + 	}
 + 	*(--strptr) = NULL;
 + 
 + 	free(listptr);
 + 	return (str);
   }
 
 -- 
 --- @(#) $Id: dot.signature,v 1.9 2000/07/10 16:43:05 pirzyk Exp $
     __o   Jim.Pirzyk@disney.com -------------------------------------
  _'\<,_   Senior Systems Engineer, Walt Disney Feature Animation 
 (*)/ (*)  

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?200105111530.f4BFU3l07328>