use core::default;
use super::*;
pub struct FileAttr {
pub ino: u64,
pub size: u64,
pub blocks: u64,
pub atime: u32,
pub mtime: u32,
pub ctime: u32,
pub crtime: u32,
pub chgtime: u32,
pub bkuptime: u32,
pub kind: InodeFileType,
pub perm: InodePerm,
pub nlink: u32,
pub uid: u32,
pub gid: u32,
pub rdev: u32,
pub blksize: u32,
pub flags: u32,
}
impl Default for FileAttr {
fn default() -> Self {
FileAttr {
ino: 0,
size: 0,
blocks: 0,
atime: 0,
mtime: 0,
ctime: 0,
crtime: 0,
chgtime: 0,
bkuptime: 0,
kind: InodeFileType::S_IFREG,
perm: InodePerm::S_IREAD | InodePerm::S_IWRITE | InodePerm::S_IEXEC,
nlink: 0,
uid: 0,
gid: 0,
rdev: 0,
blksize: 0,
flags: 0,
}
}
}
impl FileAttr {
pub fn from_inode_ref(inode_ref: &Ext4InodeRef) -> FileAttr {
let inode_num = inode_ref.inode_num;
let inode = inode_ref.inode;
FileAttr {
ino: inode_num as u64,
size: inode.size(),
blocks: inode.blocks_count(),
atime: inode.atime(),
mtime: inode.mtime(),
ctime: inode.ctime(),
crtime: inode.i_crtime(),
chgtime: 0,
bkuptime: 0,
kind: inode.file_type(),
perm: inode.file_perm(), nlink: inode.links_count() as u32,
uid: inode.uid() as u32,
gid: inode.gid() as u32,
rdev: inode.faddr(),
blksize: BLOCK_SIZE as u32,
flags: inode.flags(),
}
}
}
#[repr(C)]
pub struct LinuxStat {
st_dev: u32, st_ino: u32, st_mode: u16, st_nlink: u16, st_uid: u16, st_gid: u16, st_rdev: u32, st_size: u32, st_blksize: u32, st_blocks: u32, st_atime: u32, st_atime_nsec: u32, st_mtime: u32, st_mtime_nsec: u32, st_ctime: u32, st_ctime_nsec: u32, __unused4: u32, __unused5: u32, }
impl LinuxStat {
pub fn from_inode_ref(inode_ref: &Ext4InodeRef) -> LinuxStat {
let inode_num = inode_ref.inode_num;
let inode = &inode_ref.inode;
LinuxStat {
st_dev: 0,
st_ino: inode_num,
st_mode: inode.mode,
st_nlink: inode.links_count(),
st_uid: inode.uid(),
st_gid: inode.gid(),
st_rdev: 0,
st_size: inode.size() as u32,
st_blksize: 4096, st_blocks: inode.blocks_count() as u32,
st_atime: inode.atime(),
st_atime_nsec: 0,
st_mtime: inode.mtime(),
st_mtime_nsec: 0,
st_ctime: inode.ctime(),
st_ctime_nsec: 0,
__unused4: 0,
__unused5: 0,
}
}
}