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