linux_stat/raw/
powerpc64.rs1#![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::newfstatat;
8
9#[repr(C)]
11#[derive(Copy, Clone)]
12pub struct stat {
13 st_dev: Dev64,
14 st_ino: u64,
15 st_nlink: u64,
16 st_mode: u32,
17 st_uid: u32,
18 st_gid: u32,
19 st_rdev: Dev64,
20 st_size: i64,
21 st_blksize: i64,
22 st_blocks: i64,
23 st_atime: i64,
24 st_atime_nsec: u64,
25 st_mtime: i64,
26 st_mtime_nsec: u64,
27 st_ctime: i64,
28 st_ctime_nsec: u64,
29 __pad0: [u64; 3],
30}
31
32impl stat {
33 #[inline]
35 pub const fn dev(&self) -> Dev {
36 Dev::B64(self.st_dev)
37 }
38
39 #[inline]
41 pub const fn inode(&self) -> u64 {
42 self.st_ino
43 }
44
45 #[inline]
47 pub const fn nlink(&self) -> u32 {
48 self.st_nlink as u32
49 }
50
51 #[inline]
52 pub(crate) const fn raw_mode(&self) -> u16 {
53 self.st_mode as u16
54 }
55
56 #[inline]
58 pub const fn uid(&self) -> u32 {
59 self.st_uid
60 }
61
62 #[inline]
64 pub const fn gid(&self) -> u32 {
65 self.st_gid
66 }
67
68 #[inline]
71 pub const fn rdev(&self) -> Dev {
72 Dev::B64(self.st_rdev)
73 }
74
75 #[inline]
79 pub const fn size(&self) -> i64 {
80 self.st_size
81 }
82
83 #[inline]
87 pub const fn block_size(&self) -> i32 {
88 self.st_blksize as i32
89 }
90
91 #[inline]
95 pub const fn blocks(&self) -> i64 {
96 self.st_blocks
97 }
98
99 #[inline]
101 pub const fn atime(&self) -> Timestamp {
102 Timestamp {
103 secs: self.st_atime,
104 nsecs: self.st_atime_nsec as u32,
105 }
106 }
107
108 #[inline]
110 pub const fn mtime(&self) -> Timestamp {
111 Timestamp {
112 secs: self.st_mtime,
113 nsecs: self.st_mtime_nsec as u32,
114 }
115 }
116
117 #[inline]
119 pub const fn ctime(&self) -> Timestamp {
120 Timestamp {
121 secs: self.st_ctime,
122 nsecs: self.st_ctime_nsec as u32,
123 }
124 }
125
126 #[doc(hidden)]
127 pub fn uninit() -> core::mem::MaybeUninit<Self> {
128 let mut res = core::mem::MaybeUninit::uninit();
129 unsafe {
130 let buf: &mut Self = &mut *res.as_mut_ptr();
131 core::ptr::write_bytes(
132 &mut buf.__pad0[0] as *mut u64 as *mut u8,
133 0,
134 core::mem::size_of_val(&buf.__pad0),
135 );
136 }
137 res
138 }
139}