1dd4a7b54SAntonio Huete Jimenez /* 2dd4a7b54SAntonio Huete Jimenez * Copyright (c) 2013 The DragonFly Project. All rights reserved. 3dd4a7b54SAntonio Huete Jimenez * 4dd4a7b54SAntonio Huete Jimenez * Redistribution and use in source and binary forms, with or without 5dd4a7b54SAntonio Huete Jimenez * modification, are permitted provided that the following conditions 6dd4a7b54SAntonio Huete Jimenez * are met: 7dd4a7b54SAntonio Huete Jimenez * 8dd4a7b54SAntonio Huete Jimenez * 1. Redistributions of source code must retain the above copyright 9dd4a7b54SAntonio Huete Jimenez * notice, this list of conditions and the following disclaimer. 10dd4a7b54SAntonio Huete Jimenez * 2. Redistributions in binary form must reproduce the above copyright 11dd4a7b54SAntonio Huete Jimenez * notice, this list of conditions and the following disclaimer in 12dd4a7b54SAntonio Huete Jimenez * the documentation and/or other materials provided with the 13dd4a7b54SAntonio Huete Jimenez * distribution. 14dd4a7b54SAntonio Huete Jimenez * 3. Neither the name of The DragonFly Project nor the names of its 15dd4a7b54SAntonio Huete Jimenez * contributors may be used to endorse or promote products derived 16dd4a7b54SAntonio Huete Jimenez * from this software without specific, prior written permission. 17dd4a7b54SAntonio Huete Jimenez * 18dd4a7b54SAntonio Huete Jimenez * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19dd4a7b54SAntonio Huete Jimenez * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20dd4a7b54SAntonio Huete Jimenez * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21dd4a7b54SAntonio Huete Jimenez * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22dd4a7b54SAntonio Huete Jimenez * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23dd4a7b54SAntonio Huete Jimenez * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 24dd4a7b54SAntonio Huete Jimenez * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25dd4a7b54SAntonio Huete Jimenez * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 26dd4a7b54SAntonio Huete Jimenez * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27dd4a7b54SAntonio Huete Jimenez * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 28dd4a7b54SAntonio Huete Jimenez * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29dd4a7b54SAntonio Huete Jimenez * SUCH DAMAGE. 30dd4a7b54SAntonio Huete Jimenez */ 31dd4a7b54SAntonio Huete Jimenez 32dd4a7b54SAntonio Huete Jimenez #define _KERNEL_STRUCTURES 33dd4a7b54SAntonio Huete Jimenez #include <sys/vnode.h> 34dd4a7b54SAntonio Huete Jimenez #include <sys/mount.h> 35dd4a7b54SAntonio Huete Jimenez #undef _KERNEL_STRUCTURES 36dd4a7b54SAntonio Huete Jimenez 37dd4a7b54SAntonio Huete Jimenez #include <vfs/ntfs/ntfs.h> 38dd4a7b54SAntonio Huete Jimenez #include <vfs/ntfs/ntfs_inode.h> 39dd4a7b54SAntonio Huete Jimenez 40dd4a7b54SAntonio Huete Jimenez #include <stdio.h> 41dd4a7b54SAntonio Huete Jimenez #include <kvm.h> 42dd4a7b54SAntonio Huete Jimenez 43dd4a7b54SAntonio Huete Jimenez #include "fstat.h" 44dd4a7b54SAntonio Huete Jimenez 45dd4a7b54SAntonio Huete Jimenez int 46*ed63e0ebSSascha Wildner ntfs_filestat(struct vnode *vp, struct filestat *fsp) 47dd4a7b54SAntonio Huete Jimenez { 48dd4a7b54SAntonio Huete Jimenez struct fnode fn; 49dd4a7b54SAntonio Huete Jimenez struct ntnode ino; 50dd4a7b54SAntonio Huete Jimenez struct ntfsmount mp; 51dd4a7b54SAntonio Huete Jimenez mode_t mode; 52dd4a7b54SAntonio Huete Jimenez 53dd4a7b54SAntonio Huete Jimenez if (!kread(VTOF(vp), &fn, sizeof(fn))) { 54dd4a7b54SAntonio Huete Jimenez dprintf(stderr, "can't read fnode at %p for pid %d\n", 55dd4a7b54SAntonio Huete Jimenez (void *)VTOF(vp), Pid); 56dd4a7b54SAntonio Huete Jimenez return 0; 57dd4a7b54SAntonio Huete Jimenez } 58dd4a7b54SAntonio Huete Jimenez 59dd4a7b54SAntonio Huete Jimenez if (!kread(FTONT(&fn), &ino, sizeof(ino))) { 60dd4a7b54SAntonio Huete Jimenez dprintf(stderr, "can't read ntnode at %p for pid %d\n", 61dd4a7b54SAntonio Huete Jimenez (void *)FTONT(&fn), Pid); 62dd4a7b54SAntonio Huete Jimenez return 0; 63dd4a7b54SAntonio Huete Jimenez } 64dd4a7b54SAntonio Huete Jimenez 65dd4a7b54SAntonio Huete Jimenez if (!kread(ino.i_mp, &mp, sizeof(mp))) { 66dd4a7b54SAntonio Huete Jimenez dprintf(stderr, "can't read ntfsmount at %p for pid %d\n", 67dd4a7b54SAntonio Huete Jimenez (void *)ino.i_mp, Pid); 68dd4a7b54SAntonio Huete Jimenez return 0; 69dd4a7b54SAntonio Huete Jimenez } 70dd4a7b54SAntonio Huete Jimenez mode = mp.ntm_mode; 71dd4a7b54SAntonio Huete Jimenez switch (vp->v_type) { 72dd4a7b54SAntonio Huete Jimenez case VREG: 73dd4a7b54SAntonio Huete Jimenez mode |= S_IFREG; 74dd4a7b54SAntonio Huete Jimenez break; 75dd4a7b54SAntonio Huete Jimenez case VDIR: 76dd4a7b54SAntonio Huete Jimenez mode |= S_IFDIR; 77dd4a7b54SAntonio Huete Jimenez break; 78dd4a7b54SAntonio Huete Jimenez case VBLK: 79dd4a7b54SAntonio Huete Jimenez mode |= S_IFBLK; 80dd4a7b54SAntonio Huete Jimenez break; 81dd4a7b54SAntonio Huete Jimenez case VCHR: 82dd4a7b54SAntonio Huete Jimenez mode |= S_IFCHR; 83dd4a7b54SAntonio Huete Jimenez break; 84dd4a7b54SAntonio Huete Jimenez case VLNK: 85dd4a7b54SAntonio Huete Jimenez mode |= S_IFLNK; 86dd4a7b54SAntonio Huete Jimenez break; 87dd4a7b54SAntonio Huete Jimenez case VSOCK: 88dd4a7b54SAntonio Huete Jimenez mode |= S_IFSOCK; 89dd4a7b54SAntonio Huete Jimenez break; 90dd4a7b54SAntonio Huete Jimenez case VFIFO: 91dd4a7b54SAntonio Huete Jimenez mode |= S_IFIFO; 92dd4a7b54SAntonio Huete Jimenez break; 93dd4a7b54SAntonio Huete Jimenez case VDATABASE: 94dd4a7b54SAntonio Huete Jimenez break; 95dd4a7b54SAntonio Huete Jimenez case VINT: 96dd4a7b54SAntonio Huete Jimenez case VNON: 97dd4a7b54SAntonio Huete Jimenez case VBAD: 98dd4a7b54SAntonio Huete Jimenez return 0; 99dd4a7b54SAntonio Huete Jimenez } 100dd4a7b54SAntonio Huete Jimenez 101dd4a7b54SAntonio Huete Jimenez fsp->rdev = fsp->fsid = dev2udev(ino.i_dev); 102dd4a7b54SAntonio Huete Jimenez fsp->mode = mode; 103dd4a7b54SAntonio Huete Jimenez fsp->size = fn.f_size; 104dd4a7b54SAntonio Huete Jimenez fsp->fileid = ino.i_number; 105dd4a7b54SAntonio Huete Jimenez 106dd4a7b54SAntonio Huete Jimenez return 1; 107dd4a7b54SAntonio Huete Jimenez } 108