1use super::{InodeMetadata, InodeType};
6use crate::uapi::fs::{LinuxDirent64, Stat};
7
8impl Stat {
10 pub fn from_metadata(meta: &InodeMetadata) -> Self {
12 Self {
13 st_dev: 0, st_ino: meta.inode_no as u64,
15 st_mode: meta.mode.bits(),
16 st_nlink: meta.nlinks as u32,
17 st_uid: meta.uid,
18 st_gid: meta.gid,
19 st_rdev: meta.rdev,
20 __pad1: 0,
21 st_size: meta.size as i64,
22 st_blksize: 512,
23 __pad2: 0,
24 st_blocks: meta.blocks as i64,
25 st_atime_sec: meta.atime.tv_sec,
26 st_atime_nsec: meta.atime.tv_nsec,
27 st_mtime_sec: meta.mtime.tv_sec,
28 st_mtime_nsec: meta.mtime.tv_nsec,
29 st_ctime_sec: meta.ctime.tv_sec,
30 st_ctime_nsec: meta.ctime.tv_nsec,
31 __unused: [0; 2],
32 }
33 }
34}
35
36pub fn inode_type_to_d_type(t: InodeType) -> u8 {
38 match t {
39 InodeType::File => 8, InodeType::Directory => 4, InodeType::Symlink => 10, InodeType::CharDevice => 2, InodeType::BlockDevice => 6, InodeType::Fifo => 1, InodeType::Socket => 12, }
47}