xref: /drstd/src/std/os/espidf/fs.rs (revision 86982c5e9b2eaa583327251616ee822c36288824)
1 use crate::std::fs::Metadata;
2 use crate::std::sys_common::AsInner;
3 use dlibc;
4 
5 #[allow(deprecated)]
6 use crate::std::os::espidf::raw;
7 
8 /// OS-specific extensions to [`fs::Metadata`].
9 ///
10 /// [`fs::Metadata`]: crate::std::fs::Metadata
11 pub trait MetadataExt {
12     #[deprecated(
13         since = "1.8.0",
14         note = "deprecated in favor of the accessor \
15                 methods of this trait"
16     )]
17     #[allow(deprecated)]
18     fn as_raw_stat(&self) -> &raw::stat;
19 
20     fn st_dev(&self) -> u64;
21     fn st_ino(&self) -> u64;
22     fn st_mode(&self) -> u32;
23     fn st_nlink(&self) -> u64;
24     fn st_uid(&self) -> u32;
25     fn st_gid(&self) -> u32;
26     fn st_rdev(&self) -> u64;
27     fn st_size(&self) -> u64;
28     fn st_atime(&self) -> i64;
29     fn st_atime_nsec(&self) -> i64;
30     fn st_mtime(&self) -> i64;
31     fn st_mtime_nsec(&self) -> i64;
32     fn st_ctime(&self) -> i64;
33     fn st_ctime_nsec(&self) -> i64;
34     fn st_blksize(&self) -> u64;
35     fn st_blocks(&self) -> u64;
36     fn st_spare4(&self) -> [u32; 2];
37 }
38 
39 impl MetadataExt for Metadata {
40     #[allow(deprecated)]
41     fn as_raw_stat(&self) -> &raw::stat {
42         unsafe { &*(self.as_inner().as_inner() as *const dlibc::stat as *const raw::stat) }
43     }
44     fn st_dev(&self) -> u64 {
45         self.as_inner().as_inner().st_dev as u64
46     }
47     fn st_ino(&self) -> u64 {
48         self.as_inner().as_inner().st_ino as u64
49     }
50     fn st_mode(&self) -> u32 {
51         self.as_inner().as_inner().st_mode as u32
52     }
53     fn st_nlink(&self) -> u64 {
54         self.as_inner().as_inner().st_nlink as u64
55     }
56     fn st_uid(&self) -> u32 {
57         self.as_inner().as_inner().st_uid as u32
58     }
59     fn st_gid(&self) -> u32 {
60         self.as_inner().as_inner().st_gid as u32
61     }
62     fn st_rdev(&self) -> u64 {
63         self.as_inner().as_inner().st_rdev as u64
64     }
65     fn st_size(&self) -> u64 {
66         self.as_inner().as_inner().st_size as u64
67     }
68     fn st_atime(&self) -> i64 {
69         self.as_inner().as_inner().st_atime as i64
70     }
71     fn st_atime_nsec(&self) -> i64 {
72         0
73     }
74     fn st_mtime(&self) -> i64 {
75         self.as_inner().as_inner().st_mtime as i64
76     }
77     fn st_mtime_nsec(&self) -> i64 {
78         0
79     }
80     fn st_ctime(&self) -> i64 {
81         self.as_inner().as_inner().st_ctime as i64
82     }
83     fn st_ctime_nsec(&self) -> i64 {
84         0
85     }
86     fn st_blksize(&self) -> u64 {
87         self.as_inner().as_inner().st_blksize as u64
88     }
89     fn st_blocks(&self) -> u64 {
90         self.as_inner().as_inner().st_blocks as u64
91     }
92     fn st_spare4(&self) -> [u32; 2] {
93         let spare4 = self.as_inner().as_inner().st_spare4;
94         [spare4[0] as u32, spare4[1] as u32]
95     }
96 }
97