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