rustix/backend/libc/io/types.rs
1use crate::backend::c;
2use bitflags::bitflags;
3
4bitflags! {
5 /// `FD_*` constants for use with [`fcntl_getfd`] and [`fcntl_setfd`].
6 ///
7 /// [`fcntl_getfd`]: crate::io::fcntl_getfd
8 /// [`fcntl_setfd`]: crate::io::fcntl_setfd
9 #[repr(transparent)]
10 #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
11 pub struct FdFlags: u32 {
12 /// `FD_CLOEXEC`
13 const CLOEXEC = bitcast!(c::FD_CLOEXEC);
14
15 /// <https://docs.rs/bitflags/*/bitflags/#externally-defined-flags>
16 const _ = !0;
17 }
18}
19
20#[cfg(linux_kernel)]
21bitflags! {
22 /// `RWF_*` constants for use with [`preadv2`] and [`pwritev2`].
23 ///
24 /// [`preadv2`]: crate::io::preadv2
25 /// [`pwritev2`]: crate::io::pwritev
26 #[repr(transparent)]
27 #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
28 pub struct ReadWriteFlags: u32 {
29 /// `RWF_DSYNC` (since Linux 4.7)
30 const DSYNC = linux_raw_sys::general::RWF_DSYNC;
31 /// `RWF_HIPRI` (since Linux 4.6)
32 const HIPRI = linux_raw_sys::general::RWF_HIPRI;
33 /// `RWF_SYNC` (since Linux 4.7)
34 const SYNC = linux_raw_sys::general::RWF_SYNC;
35 /// `RWF_NOWAIT` (since Linux 4.14)
36 const NOWAIT = linux_raw_sys::general::RWF_NOWAIT;
37 /// `RWF_APPEND` (since Linux 4.16)
38 const APPEND = linux_raw_sys::general::RWF_APPEND;
39
40 /// <https://docs.rs/bitflags/*/bitflags/#externally-defined-flags>
41 const _ = !0;
42 }
43}
44
45#[cfg(not(target_os = "wasi"))]
46bitflags! {
47 /// `O_*` constants for use with [`dup2`].
48 ///
49 /// [`dup2`]: crate::io::dup2
50 #[repr(transparent)]
51 #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
52 pub struct DupFlags: u32 {
53 /// `O_CLOEXEC`
54 #[cfg(not(any(
55 apple,
56 target_os = "aix",
57 target_os = "android",
58 target_os = "redox",
59 )))] // Android 5.0 has dup3, but libc doesn't have bindings
60 const CLOEXEC = bitcast!(c::O_CLOEXEC);
61
62 /// <https://docs.rs/bitflags/*/bitflags/#externally-defined-flags>
63 const _ = !0;
64 }
65}