lx 0.4.0

A no_std crate to use Linux system calls
Documentation
use core::mem;

use super::abi::*;
use crate::{
    result_from_value,
    sigset_t,
    OwnedFd,
};

pub const SFD_NONBLOCK: i32 = 0x800;
pub const SFD_CLOEXEC: i32 = 0x80000;

#[allow(non_camel_case_types)]
#[repr(C)]
pub struct signalfd_siginfo {
    pub ssi_signo: u32,
    pub ssi_errno: i32,
    pub ssi_code: i32,
    pub ssi_pid: u32,
    pub ssi_uid: u32,
    pub ssi_fd: i32,
    pub ssi_tid: u32,
    pub ssi_band: u32,
    pub ssi_overrun: u32,
    pub ssi_trapno: u32,
    pub ssi_status: i32,
    pub ssi_int: i32,
    pub ssi_ptr: u64,
    pub ssi_utime: u64,
    pub ssi_stime: u64,
    pub ssi_addr: u64,
    pub ssi_addr_lsb: u16,
    zero: u16,
    pub ssi_syscall: i32,
    pub ssi_call_addr: u64,
    pub ssi_arch: u32,
    zero2: [u8; 28],
}

#[inline]
pub fn signalfd4(fd: i32, mask: &sigset_t, flags: i32) -> crate::Result<OwnedFd> {
    let ret = unsafe {
        syscall_4(
            289,
            fd as usize,
            mask as *const sigset_t as usize,
            mem::size_of_val(mask),
            flags as usize,
        ) as i32
    };
    result_from_value(ret).map(OwnedFd::new)
}