lx 0.4.0

A no_std crate to use Linux system calls
Documentation
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))
}