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)
}