| #![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); |
| } |
| } |
| } |