about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCarsten Andrich <carsten.andrich@tu-ilmenau.de>2020-05-01 17:52:16 +0200
committerCarsten Andrich <carsten.andrich@tu-ilmenau.de>2020-05-01 17:52:16 +0200
commitc88e6a75f5f681610142aaba351cdd6e30deed95 (patch)
tree358b4df1f908b00ed2e55f7eb9fc6139c291105e
parentbd0bacc694d7d8175804bb6f690cb846bfa4a9ee (diff)
downloadrust-c88e6a75f5f681610142aaba351cdd6e30deed95.tar.gz
rust-c88e6a75f5f681610142aaba351cdd6e30deed95.zip
add Windows system error codes that map to io::ErrorKind::TimedOut
-rw-r--r--src/libstd/io/error.rs5
-rw-r--r--src/libstd/sys/windows/c.rs17
-rw-r--r--src/libstd/sys/windows/mod.rs15
3 files changed, 35 insertions, 2 deletions
diff --git a/src/libstd/io/error.rs b/src/libstd/io/error.rs
index d80a38819ea..f7248e7547e 100644
--- a/src/libstd/io/error.rs
+++ b/src/libstd/io/error.rs
@@ -160,6 +160,11 @@ pub enum ErrorKind {
     #[stable(feature = "rust1", since = "1.0.0")]
     Interrupted,
     /// Any I/O error not part of this list.
+    ///
+    /// Errors that are `Other` now may move to a different or a new
+    /// [`ErrorKind`] variant in the future. It is not recommended to match
+    /// an error against `Other` and to expect any additional characteristics,
+    /// e.g., a specific [`Error::raw_os_error`] return value.
     #[stable(feature = "rust1", since = "1.0.0")]
     Other,
 
diff --git a/src/libstd/sys/windows/c.rs b/src/libstd/sys/windows/c.rs
index 134f508dfab..d2c4cc3bbff 100644
--- a/src/libstd/sys/windows/c.rs
+++ b/src/libstd/sys/windows/c.rs
@@ -171,13 +171,26 @@ pub const ERROR_FILE_EXISTS: DWORD = 80;
 pub const ERROR_INVALID_PARAMETER: DWORD = 87;
 pub const ERROR_BROKEN_PIPE: DWORD = 109;
 pub const ERROR_CALL_NOT_IMPLEMENTED: DWORD = 120;
+pub const ERROR_SEM_TIMEOUT: DWORD = 121;
 pub const ERROR_INSUFFICIENT_BUFFER: DWORD = 122;
 pub const ERROR_ALREADY_EXISTS: DWORD = 183;
-pub const ERROR_NO_DATA: DWORD = 232;
 pub const ERROR_ENVVAR_NOT_FOUND: DWORD = 203;
+pub const ERROR_NO_DATA: DWORD = 232;
+pub const ERROR_DRIVER_CANCEL_TIMEOUT: DWORD = 594;
 pub const ERROR_OPERATION_ABORTED: DWORD = 995;
 pub const ERROR_IO_PENDING: DWORD = 997;
-pub const ERROR_TIMEOUT: DWORD = 0x5B4;
+pub const ERROR_SERVICE_REQUEST_TIMEOUT: DWORD = 1053;
+pub const ERROR_COUNTER_TIMEOUT: DWORD = 1121;
+pub const ERROR_TIMEOUT: DWORD = 1460;
+pub const ERROR_RESOURCE_CALL_TIMED_OUT: DWORD = 5910;
+pub const ERROR_CTX_MODEM_RESPONSE_TIMEOUT: DWORD = 7012;
+pub const ERROR_CTX_CLIENT_QUERY_TIMEOUT: DWORD = 7040;
+pub const FRS_ERR_SYSVOL_POPULATE_TIMEOUT: DWORD = 8014;
+pub const ERROR_DS_TIMELIMIT_EXCEEDED: DWORD = 8226;
+pub const DNS_ERROR_RECORD_TIMED_OUT: DWORD = 9705;
+pub const ERROR_IPSEC_IKE_TIMED_OUT: DWORD = 13805;
+pub const ERROR_RUNLEVEL_SWITCH_TIMEOUT: DWORD = 15402;
+pub const ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT: DWORD = 15403;
 
 pub const E_NOTIMPL: HRESULT = 0x80004001u32 as HRESULT;
 
diff --git a/src/libstd/sys/windows/mod.rs b/src/libstd/sys/windows/mod.rs
index d745e87a072..a0d207e932e 100644
--- a/src/libstd/sys/windows/mod.rs
+++ b/src/libstd/sys/windows/mod.rs
@@ -61,7 +61,22 @@ pub fn decode_error_kind(errno: i32) -> ErrorKind {
         c::ERROR_FILE_NOT_FOUND => return ErrorKind::NotFound,
         c::ERROR_PATH_NOT_FOUND => return ErrorKind::NotFound,
         c::ERROR_NO_DATA => return ErrorKind::BrokenPipe,
+        c::ERROR_SEM_TIMEOUT => return ErrorKind::TimedOut,
+        c::WAIT_TIMEOUT => return ErrorKind::TimedOut,
+        c::ERROR_DRIVER_CANCEL_TIMEOUT => return ErrorKind::TimedOut,
         c::ERROR_OPERATION_ABORTED => return ErrorKind::TimedOut,
+        c::ERROR_SERVICE_REQUEST_TIMEOUT => return ErrorKind::TimedOut,
+        c::ERROR_COUNTER_TIMEOUT => return ErrorKind::TimedOut,
+        c::ERROR_TIMEOUT => return ErrorKind::TimedOut,
+        c::ERROR_RESOURCE_CALL_TIMED_OUT => return ErrorKind::TimedOut,
+        c::ERROR_CTX_MODEM_RESPONSE_TIMEOUT => return ErrorKind::TimedOut,
+        c::ERROR_CTX_CLIENT_QUERY_TIMEOUT => return ErrorKind::TimedOut,
+        c::FRS_ERR_SYSVOL_POPULATE_TIMEOUT => return ErrorKind::TimedOut,
+        c::ERROR_DS_TIMELIMIT_EXCEEDED => return ErrorKind::TimedOut,
+        c::DNS_ERROR_RECORD_TIMED_OUT => return ErrorKind::TimedOut,
+        c::ERROR_IPSEC_IKE_TIMED_OUT => return ErrorKind::TimedOut,
+        c::ERROR_RUNLEVEL_SWITCH_TIMEOUT => return ErrorKind::TimedOut,
+        c::ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT => return ErrorKind::TimedOut,
         _ => {}
     }