about summary refs log tree commit diff
path: root/library/std/src/sys/uefi/mod.rs
diff options
context:
space:
mode:
authorAyush Singh <ayushsingh1325@gmail.com>2023-05-11 11:35:15 +0530
committerAyush Singh <ayushdevel1325@gmail.com>2023-09-22 17:23:33 +0530
commit40c3dacc767a4fbf42ea5dfa686a54acf9ded5fb (patch)
treef5c05e52da53ada413e383e23ca6fe4a7ef0ac21 /library/std/src/sys/uefi/mod.rs
parent7a956441a15e6056448233d79f2d03581ce0ccfc (diff)
downloadrust-40c3dacc767a4fbf42ea5dfa686a54acf9ded5fb.tar.gz
rust-40c3dacc767a4fbf42ea5dfa686a54acf9ded5fb.zip
Use RawOsError for UEFI
Some changes from this commit will probably be converted to its own PR.

Signed-off-by: Ayush Singh <ayushsingh1325@gmail.com>
Diffstat (limited to 'library/std/src/sys/uefi/mod.rs')
-rw-r--r--library/std/src/sys/uefi/mod.rs49
1 files changed, 43 insertions, 6 deletions
diff --git a/library/std/src/sys/uefi/mod.rs b/library/std/src/sys/uefi/mod.rs
index 27f76f04c05..85d00caf149 100644
--- a/library/std/src/sys/uefi/mod.rs
+++ b/library/std/src/sys/uefi/mod.rs
@@ -29,7 +29,6 @@ pub mod locks;
 pub mod net;
 #[path = "../unsupported/once.rs"]
 pub mod once;
-#[path = "../unsupported/os.rs"]
 pub mod os;
 #[path = "../windows/os_str.rs"]
 pub mod os_str;
@@ -52,6 +51,8 @@ mod helpers;
 #[cfg(test)]
 mod tests;
 
+pub type RawOsError = usize;
+
 use crate::cell::Cell;
 use crate::io as std_io;
 use crate::os::uefi;
@@ -110,14 +111,50 @@ pub const fn unsupported_err() -> std_io::Error {
     std_io::const_io_error!(std_io::ErrorKind::Unsupported, "operation not supported on UEFI",)
 }
 
-pub fn decode_error_kind(code: i32) -> crate::io::ErrorKind {
+pub fn decode_error_kind(code: RawOsError) -> crate::io::ErrorKind {
     use crate::io::ErrorKind;
     use r_efi::efi::Status;
 
-    if let Ok(code) = usize::try_from(code) {
-        helpers::status_to_io_error(Status::from_usize(code)).kind()
-    } else {
-        ErrorKind::Uncategorized
+    match r_efi::efi::Status::from_usize(code) {
+        Status::ALREADY_STARTED
+        | Status::COMPROMISED_DATA
+        | Status::CONNECTION_FIN
+        | Status::CRC_ERROR
+        | Status::DEVICE_ERROR
+        | Status::END_OF_MEDIA
+        | Status::HTTP_ERROR
+        | Status::ICMP_ERROR
+        | Status::INCOMPATIBLE_VERSION
+        | Status::LOAD_ERROR
+        | Status::MEDIA_CHANGED
+        | Status::NO_MAPPING
+        | Status::NO_MEDIA
+        | Status::NOT_STARTED
+        | Status::PROTOCOL_ERROR
+        | Status::PROTOCOL_UNREACHABLE
+        | Status::TFTP_ERROR
+        | Status::VOLUME_CORRUPTED => ErrorKind::Other,
+        Status::BAD_BUFFER_SIZE | Status::INVALID_LANGUAGE => ErrorKind::InvalidData,
+        Status::ABORTED => ErrorKind::ConnectionAborted,
+        Status::ACCESS_DENIED => ErrorKind::PermissionDenied,
+        Status::BUFFER_TOO_SMALL => ErrorKind::FileTooLarge,
+        Status::CONNECTION_REFUSED => ErrorKind::ConnectionRefused,
+        Status::CONNECTION_RESET => ErrorKind::ConnectionReset,
+        Status::END_OF_FILE => ErrorKind::UnexpectedEof,
+        Status::HOST_UNREACHABLE => ErrorKind::HostUnreachable,
+        Status::INVALID_PARAMETER => ErrorKind::InvalidInput,
+        Status::IP_ADDRESS_CONFLICT => ErrorKind::AddrInUse,
+        Status::NETWORK_UNREACHABLE => ErrorKind::NetworkUnreachable,
+        Status::NO_RESPONSE => ErrorKind::HostUnreachable,
+        Status::NOT_FOUND => ErrorKind::NotFound,
+        Status::NOT_READY => ErrorKind::ResourceBusy,
+        Status::OUT_OF_RESOURCES => ErrorKind::OutOfMemory,
+        Status::SECURITY_VIOLATION => ErrorKind::PermissionDenied,
+        Status::TIMEOUT => ErrorKind::TimedOut,
+        Status::UNSUPPORTED => ErrorKind::Unsupported,
+        Status::VOLUME_FULL => ErrorKind::StorageFull,
+        Status::WRITE_PROTECTED => ErrorKind::ReadOnlyFilesystem,
+        _ => ErrorKind::Uncategorized,
     }
 }