From: Sascha Wildner Date: Sun, 22 Nov 2015 06:53:16 +0000 (+0100) Subject: df: Remove old UFS superblock reading code. X-Git-Tag: v4.5.0~8 X-Git-Url: https://gitweb.dragonflybsd.org/~tuxillo/dragonfly.git/commitdiff_plain/b2bb7ecf507c34721b4ec07bcaf7087e1cbdbb72 df: Remove old UFS superblock reading code. This is from times when there was only UFS and it does not play well with some other filesystem types like devfs. Reported-by: Michael Iline --- diff --git a/bin/df/Makefile b/bin/df/Makefile index f544b265bf..bedff4e30e 100644 --- a/bin/df/Makefile +++ b/bin/df/Makefile @@ -1,13 +1,10 @@ # @(#)Makefile 8.3 (Berkeley) 5/8/95 # $FreeBSD: src/bin/df/Makefile,v 1.9.2.3 2002/04/05 00:19:21 iedowse Exp $ -# $DragonFly: src/bin/df/Makefile,v 1.6 2008/08/02 23:02:26 swildner Exp $ PROG= df SRCS= df.c vfslist.c -MOUNT= ${.CURDIR}/../../sbin/mount -CFLAGS+= -I${MOUNT} -.PATH: ${MOUNT} +.PATH: ${.CURDIR}/../../sbin/mount DPADD= ${LIBUTIL} LDADD= -lutil diff --git a/bin/df/df.c b/bin/df/df.c index 91f5be7c08..3512775a1e 100644 --- a/bin/df/df.c +++ b/bin/df/df.c @@ -43,7 +43,6 @@ #include #include -#include #include #include @@ -75,7 +74,6 @@ struct maxwidths { char **makevfslist(char *); int checkvfsname(const char *, char **); -static int bread(off_t, void *, int); static char *getmntpt(char *); static int quadwidth(int64_t); static char *makenetvfslist(void); @@ -83,7 +81,6 @@ static void prthuman(struct statvfs *, int64_t); static void prthumanval(int64_t); static void prtstat(struct statfs *, struct statvfs *, struct maxwidths *); static long regetmntinfo(struct statfs **, struct statvfs **, long, char **); -static int ufs_df(char *, struct maxwidths *); static void update_maxwidths(struct maxwidths *, struct statfs *, struct statvfs *); static void usage(void); @@ -220,7 +217,8 @@ main(int argc, char **argv) } if (mount(fstype, mntpt, MNT_RDONLY, &mdev) != 0) { - rv = ufs_df(*argv, &maxwidths) || rv; + warn("%s", *argv); + rv = 1; rmdir(mntpt); free(mntpath); continue; @@ -492,81 +490,6 @@ quadwidth(int64_t val) return (len); } -/* - * This code constitutes the pre-system call Berkeley df code for extracting - * information from filesystem superblocks. - */ - -union { - struct fs iu_fs; - char dummy[SBSIZE]; -} sb; -#define sblock sb.iu_fs - -int rfd; - -static int -ufs_df(char *file, struct maxwidths *mwp) -{ - struct statfs statfsbuf; - struct statvfs statvfsbuf; - struct statfs *sfsp; - struct statvfs *vsfsp; - const char *mntpt; - static int synced; - - if (synced++ == 0) - sync(); - - if ((rfd = open(file, O_RDONLY)) < 0) { - warn("%s", file); - return (1); - } - if (bread((off_t)SBOFF, &sblock, SBSIZE) == 0) { - close(rfd); - return (1); - } - sfsp = &statfsbuf; - vsfsp = &statvfsbuf; - sfsp->f_type = 1; - strcpy(sfsp->f_fstypename, "ufs"); - sfsp->f_flags = 0; - sfsp->f_bsize = vsfsp->f_bsize = sblock.fs_fsize; - sfsp->f_iosize = vsfsp->f_frsize = sblock.fs_bsize; - sfsp->f_blocks = vsfsp->f_blocks = sblock.fs_dsize; - sfsp->f_bfree = vsfsp->f_bfree = - sblock.fs_cstotal.cs_nbfree * sblock.fs_frag + - sblock.fs_cstotal.cs_nffree; - sfsp->f_bavail = vsfsp->f_bavail = freespace(&sblock, sblock.fs_minfree); - sfsp->f_files = vsfsp->f_files = sblock.fs_ncg * sblock.fs_ipg; - sfsp->f_ffree = vsfsp->f_ffree = sblock.fs_cstotal.cs_nifree; - sfsp->f_fsid.val[0] = 0; - sfsp->f_fsid.val[1] = 0; - if ((mntpt = getmntpt(file)) == NULL) - mntpt = ""; - memmove(&sfsp->f_mntonname[0], mntpt, (size_t)MNAMELEN); - memmove(&sfsp->f_mntfromname[0], file, (size_t)MNAMELEN); - prtstat(sfsp, vsfsp, mwp); - close(rfd); - return (0); -} - -static int -bread(off_t off, void *buf, int cnt) -{ - ssize_t nr; - - lseek(rfd, off, SEEK_SET); - if ((nr = read(rfd, buf, (size_t)cnt)) != (ssize_t)cnt) { - /* Probably a dismounted disk if errno == EIO. */ - if (errno != EIO) - fprintf(stderr, "\ndf: %lld: %s\n", - (long long)off, strerror(nr > 0 ? EIO : errno)); - return (0); - } - return (1); -} - static void usage(void) {