diff --git a/src/error.rs b/src/error.rs index f99feac78c279ae9cb3398bf18101ea2502bab8c..9b3051edb01658b9c87ce426954d81e1a272b3a0 100644 --- a/src/error.rs +++ b/src/error.rs @@ -7,17 +7,26 @@ pub struct Errno(pub c_int); #[cfg(target_os = "redox")] impl From<syscall::Error> for Errno { + #[inline] fn from(value: syscall::Error) -> Self { Errno(value.errno) } } #[cfg(target_os = "redox")] impl From<Errno> for syscall::Error { + #[inline] fn from(value: Errno) -> Self { syscall::Error::new(value.0) } } +impl From<Errno> for crate::io::Error { + #[inline] + fn from(Errno(errno): Errno) -> Self { + Self::from_raw_os_error(errno) + } +} + pub trait ResultExt<T> { fn or_minus_one_errno(self) -> T; } @@ -25,10 +34,10 @@ impl<T: From<i8>> ResultExt<T> for Result<T, Errno> { fn or_minus_one_errno(self) -> T { match self { Self::Ok(v) => v, - Self::Err(Errno(errno)) => unsafe { + Self::Err(Errno(errno)) => { crate::platform::ERRNO.set(errno); T::from(-1) - }, + } } } }