1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use crate::*;
use std::{convert::TryInto, ptr};

#[man(epoll_create1(2))]
pub fn epoll_create1(flags: c::c_int) -> Result<OwnedFd> {
    let res = unsafe { c::epoll_create1(flags) };
    map_err!(res).map(OwnedFd::new)
}

#[man(epoll_ctl(2))]
pub fn epoll_ctl(
    epfd: c::c_int,
    op: c::c_int,
    fd: c::c_int,
    event: Option<&c::epoll_event>,
) -> Result<()> {
    let res = unsafe {
        c::epoll_ctl(
            epfd,
            op,
            fd,
            event.map(|v| v as *const _).unwrap_or(ptr::null()) as *mut _,
        )
    };
    map_err!(res).map(drop)
}

#[man(epoll_wait(2))]
pub fn epoll_wait(
    epfd: c::c_int,
    events: &mut [c::epoll_event],
    timeout: c::c_int,
) -> Result<usize> {
    let len = events.len().try_into().unwrap_or(c::c_int::max_value());
    let res = unsafe { c::epoll_wait(epfd, events.as_mut_ptr(), len, timeout) };
    map_err!(res).map(|v| v as usize)
}