use core::mem::MaybeUninit;
use super::abi::*;
use crate::{
Error,
OwnedFd,
};
pub const O_NOTIFICATION_PIPE: u32 = super::O_EXCL;
#[inline]
pub fn pipe() -> crate::Result<(OwnedFd, OwnedFd)> {
let mut fds = [MaybeUninit::uninit(); 2];
let ret = unsafe { syscall_1(22, fds.as_mut_ptr() as usize) as i32 };
if let Ok(err) = Error::try_from(ret) {
return Err(err);
}
let first = OwnedFd::new(unsafe { fds[0].assume_init() });
let second = OwnedFd::new(unsafe { fds[1].assume_init() });
Ok((first, second))
}
#[inline]
pub fn pipe2(flags: u32) -> crate::Result<(OwnedFd, OwnedFd)> {
let mut fds = [MaybeUninit::uninit(); 2];
let ret = unsafe { syscall_2(293, fds.as_mut_ptr() as usize, flags as usize) as i32 };
if let Ok(err) = Error::try_from(ret) {
return Err(err);
}
let first = OwnedFd::new(unsafe { fds[0].assume_init() });
let second = OwnedFd::new(unsafe { fds[1].assume_init() });
Ok((first, second))
}