fstat(1): Put the v_type -> mode_t conversion into a separate function.
authorSascha Wildner <saw@online.de>
Thu, 20 Jun 2013 16:25:04 +0000 (18:25 +0200)
committerSascha Wildner <saw@online.de>
Thu, 20 Jun 2013 16:25:04 +0000 (18:25 +0200)
usr.bin/fstat/ext2fs.c
usr.bin/fstat/fstat.c
usr.bin/fstat/fstat.h
usr.bin/fstat/hammer.c
usr.bin/fstat/ntfs.c

index 5f32c2b..5d0f21f 100644 (file)
@@ -45,46 +45,14 @@ int
 ext2fs_filestat(struct vnode *vp, struct filestat *fsp)
 {
        struct inode ino;
-       mode_t mode;
 
        if (!kread(VTOI(vp), &ino, sizeof(ino))) {
                dprintf(stderr, "can't read inode at %p for pid %d\n",
                    (void *)VTOI(vp), Pid);
                return 0;
        }
-       mode = ino.i_mode;
-       switch (vp->v_type) {
-       case VREG:
-               mode |= S_IFREG;
-               break;
-       case VDIR:
-               mode |= S_IFDIR;
-               break;
-       case VBLK:
-               mode |= S_IFBLK;
-               break;
-       case VCHR:
-               mode |= S_IFCHR;
-               break;
-       case VLNK:
-               mode |= S_IFLNK;
-               break;
-       case VSOCK:
-               mode |= S_IFSOCK;
-               break;
-       case VFIFO:
-               mode |= S_IFIFO;
-               break;
-       case VDATABASE:
-               break;
-       case VINT:
-       case VNON:
-       case VBAD:
-               return 0;
-       }
-
+       fsp->mode = ino.i_mode | mtrans(vp->v_type);
        fsp->rdev = fsp->fsid = dev2udev(ino.i_dev);
-       fsp->mode = mode;
        fsp->size = ino.i_din.di_size;
        fsp->fileid = ino.i_number;
 
index 00efd69..f50d261 100644 (file)
@@ -113,7 +113,6 @@ int wflg_cmd = 10;
 int    pid_width = 5;
 int    ino_width = 6;
 
-
 struct fdnode *ofiles;         /* buffer of pointers to file structures */
 int maxfiles;
 
@@ -604,7 +603,6 @@ int
 nfs_filestat(struct vnode *vp, struct filestat *fsp)
 {
        struct nfsnode nfsnode;
-       mode_t mode;
 
        if (!kread(VTONFS(vp), &nfsnode, sizeof (nfsnode))) {
                dprintf(stderr, "can't read nfsnode at %p for pid %d\n",
@@ -616,37 +614,7 @@ nfs_filestat(struct vnode *vp, struct filestat *fsp)
        fsp->size = nfsnode.n_size;
        fsp->rdev = makeudev(nfsnode.n_vattr.va_rmajor,
                             nfsnode.n_vattr.va_rminor);
-       mode = (mode_t)nfsnode.n_vattr.va_mode;
-       switch (vp->v_type) {
-       case VREG:
-               mode |= S_IFREG;
-               break;
-       case VDIR:
-               mode |= S_IFDIR;
-               break;
-       case VBLK:
-               mode |= S_IFBLK;
-               break;
-       case VCHR:
-               mode |= S_IFCHR;
-               break;
-       case VLNK:
-               mode |= S_IFLNK;
-               break;
-       case VSOCK:
-               mode |= S_IFSOCK;
-               break;
-       case VFIFO:
-               mode |= S_IFIFO;
-               break;
-       case VDATABASE:
-               break;
-       case VINT:
-       case VNON:
-       case VBAD:
-               return 0;
-       }
-       fsp->mode = mode;
+       fsp->mode = nfsnode.n_vattr.va_mode | mtrans(vp->v_type);
 
        return 1;
 }
index 557c25d..af2ab77 100644 (file)
@@ -31,7 +31,6 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/usr.bin/fstat/fstat.h,v 1.1.2.1 2000/07/02 10:20:25 ps Exp $
- * $DragonFly: src/usr.bin/fstat/fstat.h,v 1.7 2007/05/09 04:33:51 dillon Exp $
  */
 
 #ifndef        __FSTAT_H__
@@ -55,6 +54,29 @@ struct  filestat {
        dev_t   rdev;
 };
 
+static inline mode_t
+mtrans(enum vtype type)
+{
+       switch (type) {
+       case VREG:
+               return S_IFREG;
+       case VDIR:
+               return S_IFDIR;
+       case VBLK:
+               return S_IFBLK;
+       case VCHR:
+               return S_IFCHR;
+       case VLNK:
+               return S_IFLNK;
+       case VSOCK:
+               return S_IFSOCK;
+       case VFIFO:
+               return S_IFIFO;
+       default:
+               return 0;
+       }
+}
+
 /* Ugh */
 extern kvm_t *kd;
 extern int vflg;
index 98456ea..32a092a 100644 (file)
@@ -49,7 +49,6 @@ hammer_filestat(struct vnode *vp, struct filestat *fsp)
 {
        struct hammer_inode ino;
        struct hammer_pseudofs_inmem pfsm;
-       mode_t mode;
 
        if (!kread(VTOI(vp), &ino, sizeof(ino))) {
                dprintf(stderr, "can't read hammer_inode at %p for pid %d\n",
@@ -64,37 +63,7 @@ hammer_filestat(struct vnode *vp, struct filestat *fsp)
        }
        fsp->fsid = pfsm.fsid_udev ^ (u_int32_t)ino.obj_asof ^
            (u_int32_t)(ino.obj_asof >> 32);
-       mode = (mode_t)ino.ino_data.mode;
-       switch (vp->v_type) {
-       case VREG:
-               mode |= S_IFREG;
-               break;
-       case VDIR:
-               mode |= S_IFDIR;
-               break;
-       case VBLK:
-               mode |= S_IFBLK;
-               break;
-       case VCHR:
-               mode |= S_IFCHR;
-               break;
-       case VLNK:
-               mode |= S_IFLNK;
-               break;
-       case VSOCK:
-               mode |= S_IFSOCK;
-               break;
-       case VFIFO:
-               mode |= S_IFIFO;
-               break;
-       case VDATABASE:
-               break;
-       case VINT:
-       case VNON:
-       case VBAD:
-               return 0;
-       }
-       fsp->mode = mode;
+       fsp->mode = ino.ino_data.mode | mtrans(vp->v_type);
        fsp->fileid = (long)ino.ino_leaf.base.obj_id;
        fsp->size = ino.ino_data.size;
        fsp->rdev = dev2udev(vp->v_rdev);
index f11481a..53a536e 100644 (file)
@@ -48,7 +48,6 @@ ntfs_filestat(struct vnode *vp, struct filestat *fsp)
        struct fnode fn;
        struct ntnode ino;
        struct ntfsmount mp;
-       mode_t mode;
 
        if (!kread(VTOF(vp), &fn, sizeof(fn))) {
                dprintf(stderr, "can't read fnode at %p for pid %d\n",
@@ -67,39 +66,8 @@ ntfs_filestat(struct vnode *vp, struct filestat *fsp)
                    (void *)ino.i_mp, Pid);
                return 0;
        }
-       mode = mp.ntm_mode;
-       switch (vp->v_type) {
-       case VREG:
-               mode |= S_IFREG;
-               break;
-       case VDIR:
-               mode |= S_IFDIR;
-               break;
-       case VBLK:
-               mode |= S_IFBLK;
-               break;
-       case VCHR:
-               mode |= S_IFCHR;
-               break;
-       case VLNK:
-               mode |= S_IFLNK;
-               break;
-       case VSOCK:
-               mode |= S_IFSOCK;
-               break;
-       case VFIFO:
-               mode |= S_IFIFO;
-               break;
-       case VDATABASE:
-               break;
-       case VINT:
-       case VNON:
-       case VBAD:
-               return 0;
-       }
-
+       fsp->mode = mp.ntm_mode | mtrans(vp->v_type);
        fsp->rdev = fsp->fsid = dev2udev(ino.i_dev);
-       fsp->mode = mode;
        fsp->size = fn.f_size;
        fsp->fileid = ino.i_number;