1#![allow(non_camel_case_types, non_upper_case_globals)]
2
3use linux_syscalls::Sysno;
4
5use crate::{Dev, Dev64, Timestamp};
6
7pub const SYS_FSTATAT: Sysno = Sysno::fstatat64;
8
9#[repr(C)]
11#[derive(Copy, Clone)]
12pub struct stat {
13 st_dev: Dev64,
14 __st_dev_padding: u32,
15 __st_ino_truncated: i32,
16 st_mode: u32,
17 st_nlink: u32,
18 st_uid: u32,
19 st_gid: u32,
20 st_rdev: Dev64,
21 __st_rdev_padding: i32,
22 st_size: i64,
23 st_blksize: i32,
24 st_blocks: i64,
25 st_atime: i32,
26 st_atime_nsec: u32,
27 st_mtime: i32,
28 st_mtime_nsec: u32,
29 st_ctime: i32,
30 st_ctime_nsec: u32,
31 st_ino: u64,
32}
33
34impl stat {
35 #[inline]
37 pub const fn dev(&self) -> Dev {
38 Dev::B64(self.st_dev)
39 }
40
41 #[inline]
43 pub const fn inode(&self) -> u64 {
44 self.st_ino
45 }
46
47 #[inline]
49 pub const fn nlink(&self) -> u32 {
50 self.st_nlink
51 }
52
53 #[inline]
54 pub(crate) const fn raw_mode(&self) -> u16 {
55 self.st_mode as u16
56 }
57
58 #[inline]
60 pub const fn uid(&self) -> u32 {
61 self.st_uid
62 }
63
64 #[inline]
66 pub const fn gid(&self) -> u32 {
67 self.st_gid
68 }
69
70 #[inline]
73 pub const fn rdev(&self) -> Dev {
74 Dev::B64(self.st_rdev)
75 }
76
77 #[inline]
81 pub const fn size(&self) -> i64 {
82 self.st_size
83 }
84
85 #[inline]
89 pub const fn block_size(&self) -> i32 {
90 self.st_blksize
91 }
92
93 #[inline]
97 pub const fn blocks(&self) -> i64 {
98 self.st_blocks
99 }
100
101 #[inline]
103 pub const fn atime(&self) -> Timestamp {
104 Timestamp {
105 secs: self.st_atime as i64,
106 nsecs: self.st_atime_nsec,
107 }
108 }
109
110 #[inline]
112 pub const fn mtime(&self) -> Timestamp {
113 Timestamp {
114 secs: self.st_mtime as i64,
115 nsecs: self.st_mtime_nsec,
116 }
117 }
118
119 #[inline]
121 pub const fn ctime(&self) -> Timestamp {
122 Timestamp {
123 secs: self.st_ctime as i64,
124 nsecs: self.st_ctime_nsec,
125 }
126 }
127
128 #[doc(hidden)]
129 pub fn uninit() -> core::mem::MaybeUninit<Self> {
130 let mut res = core::mem::MaybeUninit::uninit();
131 let buf: &mut Self = unsafe { &mut *res.as_mut_ptr() };
132 buf.__st_dev_padding = 0;
133 buf.__st_ino_truncated = 0;
134 buf.__st_rdev_padding = 0;
135 res
136 }
137}