xref: /dflybsd-src/usr.bin/fstat/ext2fs.c (revision ed63e0eb3927b48c2de1998eea6ceafa5b421122)
14dde37f7SAntonio Huete Jimenez /*
24dde37f7SAntonio Huete Jimenez  * Copyright (c) 2013 The DragonFly Project.  All rights reserved.
34dde37f7SAntonio Huete Jimenez  *
44dde37f7SAntonio Huete Jimenez  * Redistribution and use in source and binary forms, with or without
54dde37f7SAntonio Huete Jimenez  * modification, are permitted provided that the following conditions
64dde37f7SAntonio Huete Jimenez  * are met:
74dde37f7SAntonio Huete Jimenez  *
84dde37f7SAntonio Huete Jimenez  * 1. Redistributions of source code must retain the above copyright
94dde37f7SAntonio Huete Jimenez  *    notice, this list of conditions and the following disclaimer.
104dde37f7SAntonio Huete Jimenez  * 2. Redistributions in binary form must reproduce the above copyright
114dde37f7SAntonio Huete Jimenez  *    notice, this list of conditions and the following disclaimer in
124dde37f7SAntonio Huete Jimenez  *    the documentation and/or other materials provided with the
134dde37f7SAntonio Huete Jimenez  *    distribution.
144dde37f7SAntonio Huete Jimenez  * 3. Neither the name of The DragonFly Project nor the names of its
154dde37f7SAntonio Huete Jimenez  *    contributors may be used to endorse or promote products derived
164dde37f7SAntonio Huete Jimenez  *    from this software without specific, prior written permission.
174dde37f7SAntonio Huete Jimenez  *
184dde37f7SAntonio Huete Jimenez  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
194dde37f7SAntonio Huete Jimenez  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
204dde37f7SAntonio Huete Jimenez  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
214dde37f7SAntonio Huete Jimenez  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
224dde37f7SAntonio Huete Jimenez  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
234dde37f7SAntonio Huete Jimenez  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
244dde37f7SAntonio Huete Jimenez  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
254dde37f7SAntonio Huete Jimenez  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
264dde37f7SAntonio Huete Jimenez  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
274dde37f7SAntonio Huete Jimenez  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
284dde37f7SAntonio Huete Jimenez  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
294dde37f7SAntonio Huete Jimenez  * SUCH DAMAGE.
304dde37f7SAntonio Huete Jimenez  */
314dde37f7SAntonio Huete Jimenez 
324dde37f7SAntonio Huete Jimenez #define _KERNEL_STRUCTURES
334dde37f7SAntonio Huete Jimenez #include <sys/vnode.h>
344dde37f7SAntonio Huete Jimenez #include <sys/mount.h>
354dde37f7SAntonio Huete Jimenez #include <gnu/vfs/ext2fs/quota.h>
364dde37f7SAntonio Huete Jimenez #include <gnu/vfs/ext2fs/inode.h>
374dde37f7SAntonio Huete Jimenez #undef _KERNEL_STRUCTURES
384dde37f7SAntonio Huete Jimenez 
394dde37f7SAntonio Huete Jimenez #include <stdio.h>
404dde37f7SAntonio Huete Jimenez #include <kvm.h>
414dde37f7SAntonio Huete Jimenez 
424dde37f7SAntonio Huete Jimenez #include "fstat.h"
434dde37f7SAntonio Huete Jimenez 
444dde37f7SAntonio Huete Jimenez int
45*ed63e0ebSSascha Wildner ext2fs_filestat(struct vnode *vp, struct filestat *fsp)
464dde37f7SAntonio Huete Jimenez {
474dde37f7SAntonio Huete Jimenez 	struct inode ino;
484dde37f7SAntonio Huete Jimenez 	mode_t mode;
494dde37f7SAntonio Huete Jimenez 
504dde37f7SAntonio Huete Jimenez 	if (!kread(VTOI(vp), &ino, sizeof(ino))) {
514dde37f7SAntonio Huete Jimenez 		dprintf(stderr, "can't read inode at %p for pid %d\n",
524dde37f7SAntonio Huete Jimenez 		    (void *)VTOI(vp), Pid);
534dde37f7SAntonio Huete Jimenez 		return 0;
544dde37f7SAntonio Huete Jimenez 	}
554dde37f7SAntonio Huete Jimenez 	mode = ino.i_mode;
564dde37f7SAntonio Huete Jimenez 	switch (vp->v_type) {
574dde37f7SAntonio Huete Jimenez 	case VREG:
584dde37f7SAntonio Huete Jimenez 		mode |= S_IFREG;
594dde37f7SAntonio Huete Jimenez 		break;
604dde37f7SAntonio Huete Jimenez 	case VDIR:
614dde37f7SAntonio Huete Jimenez 		mode |= S_IFDIR;
624dde37f7SAntonio Huete Jimenez 		break;
634dde37f7SAntonio Huete Jimenez 	case VBLK:
644dde37f7SAntonio Huete Jimenez 		mode |= S_IFBLK;
654dde37f7SAntonio Huete Jimenez 		break;
664dde37f7SAntonio Huete Jimenez 	case VCHR:
674dde37f7SAntonio Huete Jimenez 		mode |= S_IFCHR;
684dde37f7SAntonio Huete Jimenez 		break;
694dde37f7SAntonio Huete Jimenez 	case VLNK:
704dde37f7SAntonio Huete Jimenez 		mode |= S_IFLNK;
714dde37f7SAntonio Huete Jimenez 		break;
724dde37f7SAntonio Huete Jimenez 	case VSOCK:
734dde37f7SAntonio Huete Jimenez 		mode |= S_IFSOCK;
744dde37f7SAntonio Huete Jimenez 		break;
754dde37f7SAntonio Huete Jimenez 	case VFIFO:
764dde37f7SAntonio Huete Jimenez 		mode |= S_IFIFO;
774dde37f7SAntonio Huete Jimenez 		break;
784dde37f7SAntonio Huete Jimenez 	case VDATABASE:
794dde37f7SAntonio Huete Jimenez 		break;
804dde37f7SAntonio Huete Jimenez 	case VINT:
814dde37f7SAntonio Huete Jimenez 	case VNON:
824dde37f7SAntonio Huete Jimenez 	case VBAD:
834dde37f7SAntonio Huete Jimenez 		return 0;
844dde37f7SAntonio Huete Jimenez 	}
854dde37f7SAntonio Huete Jimenez 
864dde37f7SAntonio Huete Jimenez 	fsp->rdev = fsp->fsid = dev2udev(ino.i_dev);
874dde37f7SAntonio Huete Jimenez 	fsp->mode = mode;
884dde37f7SAntonio Huete Jimenez 	fsp->size = ino.i_din.di_size;
894dde37f7SAntonio Huete Jimenez 	fsp->fileid = ino.i_number;
904dde37f7SAntonio Huete Jimenez 
914dde37f7SAntonio Huete Jimenez 	return 1;
924dde37f7SAntonio Huete Jimenez }
93