1 //! linux_raw syscalls for UIDs and GIDs
2 //!
3 //! # Safety
4 //!
5 //! See the `rustix::backend` module documentation for details.
6 #![allow(unsafe_code, clippy::undocumented_unsafe_blocks)]
7 
8 use crate::backend::c;
9 use crate::backend::conv::ret_usize_infallible;
10 use crate::ugid::{Gid, Uid};
11 
12 #[inline]
getuid() -> Uid13 pub(crate) fn getuid() -> Uid {
14     #[cfg(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86"))]
15     unsafe {
16         let uid = ret_usize_infallible(syscall_readonly!(__NR_getuid32)) as c::uid_t;
17         Uid::from_raw(uid)
18     }
19     #[cfg(not(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86")))]
20     unsafe {
21         let uid = ret_usize_infallible(syscall_readonly!(__NR_getuid)) as c::uid_t;
22         Uid::from_raw(uid)
23     }
24 }
25 
26 #[inline]
geteuid() -> Uid27 pub(crate) fn geteuid() -> Uid {
28     #[cfg(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86"))]
29     unsafe {
30         let uid = ret_usize_infallible(syscall_readonly!(__NR_geteuid32)) as c::uid_t;
31         Uid::from_raw(uid)
32     }
33     #[cfg(not(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86")))]
34     unsafe {
35         let uid = ret_usize_infallible(syscall_readonly!(__NR_geteuid)) as c::uid_t;
36         Uid::from_raw(uid)
37     }
38 }
39 
40 #[inline]
getgid() -> Gid41 pub(crate) fn getgid() -> Gid {
42     #[cfg(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86"))]
43     unsafe {
44         let gid = ret_usize_infallible(syscall_readonly!(__NR_getgid32)) as c::gid_t;
45         Gid::from_raw(gid)
46     }
47     #[cfg(not(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86")))]
48     unsafe {
49         let gid = ret_usize_infallible(syscall_readonly!(__NR_getgid)) as c::gid_t;
50         Gid::from_raw(gid)
51     }
52 }
53 
54 #[inline]
getegid() -> Gid55 pub(crate) fn getegid() -> Gid {
56     #[cfg(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86"))]
57     unsafe {
58         let gid = ret_usize_infallible(syscall_readonly!(__NR_getegid32)) as c::gid_t;
59         Gid::from_raw(gid)
60     }
61     #[cfg(not(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86")))]
62     unsafe {
63         let gid = ret_usize_infallible(syscall_readonly!(__NR_getegid)) as c::gid_t;
64         Gid::from_raw(gid)
65     }
66 }
67