refactor: use libc for unistd

This commit is contained in:
dignifiedquire 2020-05-24 16:10:20 +02:00
parent b3358ef275
commit b500e5ce2b
2 changed files with 40 additions and 4 deletions

View File

@ -127,7 +127,7 @@ mod linux {
}
pub fn try_clone(&self) -> Result<EventFd, io::Error> {
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<usize, std::io::Error> {
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<usize, std::io::Error> {
unistd::write(self.0, buf).map_err(io_err)
unistd::write(self.0, buf)
}
#[inline]

View File

@ -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<RawFd, std::io::Error> {
let res = unsafe { libc::dup(oldfd) };
check_err(res)
}
pub fn read(fd: RawFd, buf: &mut [u8]) -> Result<usize, std::io::Error> {
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<usize, std::io::Error> {
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")]