From b9653e689bd1f4d94e670315c7a4c4a0cac1785e Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Sat, 7 Sep 2024 12:48:38 +0200 Subject: [PATCH] Implement From<Errno> for io::Error. --- src/error.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/error.rs b/src/error.rs index f99feac7..9b3051ed 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) - }, + } } } } -- GitLab