1 use crate::ffi::CStr;
2
3 use crate::backend::c;
4 use crate::backend::conv::{c_str, ret, ret_owned_fd};
5 use crate::fd::OwnedFd;
6 use crate::fs::Mode;
7 use crate::io;
8 use crate::shm::ShmOFlags;
9
shm_open(name: &CStr, oflags: ShmOFlags, mode: Mode) -> io::Result<OwnedFd>10 pub(crate) fn shm_open(name: &CStr, oflags: ShmOFlags, mode: Mode) -> io::Result<OwnedFd> {
11 // On this platforms, `mode_t` is `u16` and can't be passed directly to a
12 // variadic function.
13 #[cfg(apple)]
14 let mode: c::c_uint = mode.bits().into();
15
16 // Otherwise, cast to `mode_t` as that's what `open` is documented to take.
17 #[cfg(not(apple))]
18 let mode: c::mode_t = mode.bits() as _;
19
20 unsafe { ret_owned_fd(c::shm_open(c_str(name), bitflags_bits!(oflags), mode)) }
21 }
22
shm_unlink(name: &CStr) -> io::Result<()>23 pub(crate) fn shm_unlink(name: &CStr) -> io::Result<()> {
24 unsafe { ret(c::shm_unlink(c_str(name))) }
25 }
26