136 lines
2.7 KiB
Rust
136 lines
2.7 KiB
Rust
#![no_std]
|
|
#[allow(unused_imports)]
|
|
use libc::{c_int, c_short, c_uint, c_ushort, c_void, intptr_t, size_t, timespec, uintptr_t};
|
|
|
|
#[cfg(not(target_os = "netbsd"))]
|
|
use core::ptr;
|
|
|
|
pub mod constants;
|
|
|
|
pub use self::constants::*;
|
|
|
|
#[cfg(not(target_os = "netbsd"))]
|
|
pub type EventListSize = c_int;
|
|
|
|
#[cfg(target_os = "netbsd")]
|
|
pub type EventListSize = size_t;
|
|
|
|
#[cfg(all(not(target_os = "netbsd"), not(target_os = "freebsd")))]
|
|
#[derive(Clone, Copy, Debug)]
|
|
#[repr(C)]
|
|
pub struct kevent {
|
|
pub ident: uintptr_t,
|
|
pub filter: EventFilter,
|
|
pub flags: EventFlag,
|
|
pub fflags: FilterFlag,
|
|
pub data: i64,
|
|
pub udata: *mut c_void,
|
|
}
|
|
|
|
#[cfg(target_os = "netbsd")]
|
|
#[derive(Clone, Copy, Debug)]
|
|
#[repr(C)]
|
|
pub struct kevent {
|
|
pub ident: uintptr_t,
|
|
pub filter: EventFilter,
|
|
pub flags: EventFlag,
|
|
pub fflags: FilterFlag,
|
|
pub data: i64,
|
|
pub udata: intptr_t,
|
|
}
|
|
|
|
#[cfg(target_os = "freebsd")]
|
|
#[derive(Clone, Copy, Debug)]
|
|
#[repr(C)]
|
|
pub struct kevent {
|
|
pub ident: uintptr_t,
|
|
pub filter: EventFilter,
|
|
pub flags: EventFlag,
|
|
pub fflags: FilterFlag,
|
|
pub data: i64,
|
|
pub udata: *mut c_void,
|
|
pub ext: [i64; 4],
|
|
}
|
|
|
|
impl kevent {
|
|
#[cfg(all(not(target_os = "netbsd"), not(target_os = "freebsd")))]
|
|
pub fn new(
|
|
ident: uintptr_t,
|
|
filter: EventFilter,
|
|
flags: EventFlag,
|
|
fflags: FilterFlag,
|
|
) -> kevent {
|
|
kevent {
|
|
ident,
|
|
filter,
|
|
flags,
|
|
fflags,
|
|
data: 0,
|
|
udata: ptr::null_mut(),
|
|
}
|
|
}
|
|
|
|
#[cfg(target_os = "netbsd")]
|
|
pub fn new(
|
|
ident: uintptr_t,
|
|
filter: EventFilter,
|
|
flags: EventFlag,
|
|
fflags: FilterFlag,
|
|
) -> kevent {
|
|
kevent {
|
|
ident,
|
|
filter,
|
|
flags,
|
|
fflags,
|
|
data: 0,
|
|
udata: 0,
|
|
}
|
|
}
|
|
|
|
#[cfg(target_os = "freebsd")]
|
|
pub fn new(
|
|
ident: uintptr_t,
|
|
filter: EventFilter,
|
|
flags: EventFlag,
|
|
fflags: FilterFlag,
|
|
) -> kevent {
|
|
kevent {
|
|
ident,
|
|
filter,
|
|
flags,
|
|
fflags,
|
|
data: 0,
|
|
udata: ptr::null_mut(),
|
|
ext: [0; 4],
|
|
}
|
|
}
|
|
}
|
|
|
|
#[allow(improper_ctypes)]
|
|
extern "C" {
|
|
pub fn kqueue() -> c_int;
|
|
|
|
pub fn kevent(
|
|
kq: c_int,
|
|
changelist: *const kevent,
|
|
nchanges: EventListSize,
|
|
eventlist: *mut kevent,
|
|
nevents: EventListSize,
|
|
timeout: *const timespec,
|
|
) -> c_int;
|
|
|
|
#[cfg(target_os = "netbsd")]
|
|
pub fn kqueue1(flags: c_int) -> c_int;
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use super::kqueue;
|
|
|
|
#[test]
|
|
fn test_kqueue() {
|
|
unsafe {
|
|
assert!(kqueue() > 0);
|
|
}
|
|
}
|
|
}
|