1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum FileType {
RegularFile,
Directory,
Symlink,
Fifo,
Socket,
CharacterDevice,
BlockDevice,
Unknown,
}
impl FileType {
pub fn from_libc_stat_st_mode(st_mode: libc::mode_t) -> Self {
match st_mode & libc::S_IFMT {
libc::S_IFREG => Self::RegularFile,
libc::S_IFDIR => Self::Directory,
libc::S_IFLNK => Self::Symlink,
#[cfg(not(target_os = "wasi"))]
libc::S_IFIFO => Self::Fifo,
#[cfg(not(target_os = "wasi"))]
libc::S_IFSOCK => Self::Socket,
libc::S_IFCHR => Self::CharacterDevice,
libc::S_IFBLK => Self::BlockDevice,
_ => Self::Unknown,
}
}
#[cfg(not(target_os = "redox"))]
pub(crate) fn from_dirent_d_type(d_type: u8) -> Self {
match d_type {
libc::DT_REG => Self::RegularFile,
libc::DT_DIR => Self::Directory,
libc::DT_LNK => Self::Symlink,
#[cfg(not(target_os = "wasi"))]
libc::DT_SOCK => Self::Socket,
#[cfg(not(target_os = "wasi"))]
libc::DT_FIFO => Self::Fifo,
libc::DT_CHR => Self::CharacterDevice,
libc::DT_BLK => Self::BlockDevice,
_ => Self::Unknown,
}
}
}