diff --git a/src/io_event.rs b/src/io_event.rs index b4ca1b2..30ccd5c 100644 --- a/src/io_event.rs +++ b/src/io_event.rs @@ -127,7 +127,7 @@ mod linux { } pub fn try_clone(&self) -> Result { - unistd::dup(self.0).map(EventFd).map_err(io_err) + unistd::dup(self.0).map(EventFd) } } @@ -153,14 +153,14 @@ mod linux { impl Read for &EventFd { #[inline] fn read(&mut self, buf: &mut [u8]) -> std::result::Result { - unistd::read(self.0, buf).map_err(io_err) + unistd::read(self.0, buf) } } impl Write for &EventFd { #[inline] fn write(&mut self, buf: &[u8]) -> std::result::Result { - unistd::write(self.0, buf).map_err(io_err) + unistd::write(self.0, buf) } #[inline] diff --git a/src/sys.rs b/src/sys.rs index 61a95c6..3051d3f 100644 --- a/src/sys.rs +++ b/src/sys.rs @@ -5,7 +5,43 @@ pub mod eventfd { #[cfg(target_os = "linux")] pub mod unistd { - pub use nix::unistd::{close, dup, read, write}; + use super::check_err; + use std::os::unix::io::RawFd; + + pub fn close(fd: RawFd) -> Result<(), std::io::Error> { + let res = unsafe { libc::close(fd) }; + + check_err(res).map(drop) + } + + pub fn dup(oldfd: RawFd) -> Result { + let res = unsafe { libc::dup(oldfd) }; + check_err(res) + } + + pub fn read(fd: RawFd, buf: &mut [u8]) -> Result { + let res = unsafe { + libc::read( + fd, + buf.as_mut_ptr() as *mut libc::c_void, + buf.len() as libc::size_t, + ) + }; + + check_err(res as _).map(|r| r as usize) + } + + pub fn write(fd: RawFd, buf: &[u8]) -> Result { + let res = unsafe { + libc::write( + fd, + buf.as_ptr() as *const libc::c_void, + buf.len() as libc::size_t, + ) + }; + + check_err(res as _).map(|r| r as usize) + } } #[cfg(target_os = "linux")]