Implement From<Errno> for io::Error.

This commit is contained in:
4lDO2
2024-09-07 12:48:38 +02:00
parent 4bd0d2a1ef
commit b9653e689b
+11 -2
View File
@@ -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)
},
}
}
}
}