about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarco A L Barbosa <malbarbo@gmail.com>2019-08-22 14:40:21 -0300
committerMarco A L Barbosa <malbarbo@gmail.com>2019-08-23 10:48:38 -0300
commitc8838efe355df9a9834e96a0d853743d21f06ce2 (patch)
treeab28e974502cc02b7453e098c96d6508fa011b2c
parent201e52e5fe73ccf3dd22946b1216ad8d64f8c2ba (diff)
downloadrust-c8838efe355df9a9834e96a0d853743d21f06ce2.tar.gz
rust-c8838efe355df9a9834e96a0d853743d21f06ce2.zip
Implement decode_error_kind for wasi
Based on the implementation for unix targets
-rw-r--r--src/libstd/sys/wasi/mod.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/libstd/sys/wasi/mod.rs b/src/libstd/sys/wasi/mod.rs
index f842869e08e..57da81b41e7 100644
--- a/src/libstd/sys/wasi/mod.rs
+++ b/src/libstd/sys/wasi/mod.rs
@@ -64,8 +64,24 @@ pub fn unsupported_err() -> Error {
     Error::new(ErrorKind::Other, "operation not supported on wasm yet")
 }
 
-pub fn decode_error_kind(_code: i32) -> ErrorKind {
-    ErrorKind::Other
+pub fn decode_error_kind(errno: i32) -> ErrorKind {
+    match errno as libc::c_int {
+        libc::ECONNREFUSED => ErrorKind::ConnectionRefused,
+        libc::ECONNRESET => ErrorKind::ConnectionReset,
+        libc::EPERM | libc::EACCES => ErrorKind::PermissionDenied,
+        libc::EPIPE => ErrorKind::BrokenPipe,
+        libc::ENOTCONN => ErrorKind::NotConnected,
+        libc::ECONNABORTED => ErrorKind::ConnectionAborted,
+        libc::EADDRNOTAVAIL => ErrorKind::AddrNotAvailable,
+        libc::EADDRINUSE => ErrorKind::AddrInUse,
+        libc::ENOENT => ErrorKind::NotFound,
+        libc::EINTR => ErrorKind::Interrupted,
+        libc::EINVAL => ErrorKind::InvalidInput,
+        libc::ETIMEDOUT => ErrorKind::TimedOut,
+        libc::EEXIST => ErrorKind::AlreadyExists,
+        libc::EAGAIN => ErrorKind::WouldBlock,
+        _ => ErrorKind::Other,
+    }
 }
 
 // This enum is used as the storage for a bunch of types which can't actually