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