diff options
author | Luca Barbieri <luca@luca-barbieri.com> | 2015-09-20 15:05:55 +0200 |
---|---|---|
committer | Carl Lerche <me@carllerche.com> | 2015-09-28 14:35:06 -0700 |
commit | c17d5b32a77e49bc2c53b21f25a7ebf9be607cba (patch) | |
tree | 5bf61bcd0fcc0579fa0020a28e116ace0a71d5a6 /src/sys/event.rs | |
parent | 5ef1f7acd3b325fc642aa4af6ff25a9dfd0ac618 (diff) | |
download | nix-c17d5b32a77e49bc2c53b21f25a7ebf9be607cba.zip |
sys/event: add kevent_ts to better expose kevent timeout
This allows to specify no timeout and allows to specify any timespec
timeout.
Diffstat (limited to 'src/sys/event.rs')
-rw-r--r-- | src/sys/event.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/sys/event.rs b/src/sys/event.rs index 23d8c679..d95b2107 100644 --- a/src/sys/event.rs +++ b/src/sys/event.rs @@ -5,6 +5,7 @@ use {Error, Result}; use errno::Errno; use libc::{timespec, time_t, c_int, c_long, uintptr_t}; use std::os::unix::io::RawFd; +use std::ptr; pub use self::ffi::kevent as KEvent; @@ -214,6 +215,13 @@ pub fn kevent(kq: RawFd, tv_nsec: ((timeout_ms % 1000) * 1_000_000) as c_long }; + kevent_ts(kq, changelist, eventlist, Some(timeout)) +} + +pub fn kevent_ts(kq: RawFd, + changelist: &[KEvent], + eventlist: &mut [KEvent], + timeout_opt: Option<timespec>) -> Result<usize> { let res = unsafe { ffi::kevent( kq, @@ -221,7 +229,7 @@ pub fn kevent(kq: RawFd, changelist.len() as c_int, eventlist.as_mut_ptr(), eventlist.len() as c_int, - &timeout as *const timespec) + if let Some(ref timeout) = timeout_opt {timeout as *const timespec} else {ptr::null()}) }; if res < 0 { |