From c88e6a75f5f681610142aaba351cdd6e30deed95 Mon Sep 17 00:00:00 2001 From: Carsten Andrich Date: Fri, 1 May 2020 17:52:16 +0200 Subject: [PATCH 1/4] add Windows system error codes that map to io::ErrorKind::TimedOut --- src/libstd/io/error.rs | 5 +++++ src/libstd/sys/windows/c.rs | 17 +++++++++++++++-- src/libstd/sys/windows/mod.rs | 15 +++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/libstd/io/error.rs b/src/libstd/io/error.rs index d80a38819ead0..f7248e7547e27 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 134f508dfab09..d2c4cc3bbff53 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 d745e87a07258..a0d207e932e2c 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, _ => {} } From 86679967e3cc895d2b5ab4bb974664ff283fe043 Mon Sep 17 00:00:00 2001 From: Carsten Andrich Date: Sat, 2 May 2020 10:56:42 +0200 Subject: [PATCH 2/4] use or pattern to match error codes that map to ErrorKind::TimedOut --- src/libstd/sys/windows/mod.rs | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/libstd/sys/windows/mod.rs b/src/libstd/sys/windows/mod.rs index a0d207e932e2c..b34686d42b7c9 100644 --- a/src/libstd/sys/windows/mod.rs +++ b/src/libstd/sys/windows/mod.rs @@ -61,21 +61,21 @@ 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_SEM_TIMEOUT | + c::WAIT_TIMEOUT | + c::ERROR_DRIVER_CANCEL_TIMEOUT | + c::ERROR_OPERATION_ABORTED | + c::ERROR_SERVICE_REQUEST_TIMEOUT | + c::ERROR_COUNTER_TIMEOUT | + c::ERROR_TIMEOUT | + c::ERROR_RESOURCE_CALL_TIMED_OUT | + c::ERROR_CTX_MODEM_RESPONSE_TIMEOUT | + c::ERROR_CTX_CLIENT_QUERY_TIMEOUT | + c::FRS_ERR_SYSVOL_POPULATE_TIMEOUT | + c::ERROR_DS_TIMELIMIT_EXCEEDED | + c::DNS_ERROR_RECORD_TIMED_OUT | + c::ERROR_IPSEC_IKE_TIMED_OUT | + c::ERROR_RUNLEVEL_SWITCH_TIMEOUT | c::ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT => return ErrorKind::TimedOut, _ => {} } From c69d6c84c7042d767e55f69ff544de0098a6042f Mon Sep 17 00:00:00 2001 From: Carsten Andrich Date: Sat, 2 May 2020 14:05:56 +0200 Subject: [PATCH 3/4] fix formatting issues that fail tidy test --- src/libstd/sys/windows/mod.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/libstd/sys/windows/mod.rs b/src/libstd/sys/windows/mod.rs index b34686d42b7c9..712085dbba4e4 100644 --- a/src/libstd/sys/windows/mod.rs +++ b/src/libstd/sys/windows/mod.rs @@ -61,22 +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 | - c::WAIT_TIMEOUT | - c::ERROR_DRIVER_CANCEL_TIMEOUT | - c::ERROR_OPERATION_ABORTED | - c::ERROR_SERVICE_REQUEST_TIMEOUT | - c::ERROR_COUNTER_TIMEOUT | - c::ERROR_TIMEOUT | - c::ERROR_RESOURCE_CALL_TIMED_OUT | - c::ERROR_CTX_MODEM_RESPONSE_TIMEOUT | - c::ERROR_CTX_CLIENT_QUERY_TIMEOUT | - c::FRS_ERR_SYSVOL_POPULATE_TIMEOUT | - c::ERROR_DS_TIMELIMIT_EXCEEDED | - c::DNS_ERROR_RECORD_TIMED_OUT | - c::ERROR_IPSEC_IKE_TIMED_OUT | - c::ERROR_RUNLEVEL_SWITCH_TIMEOUT | - c::ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT => return ErrorKind::TimedOut, + c::ERROR_SEM_TIMEOUT + | c::WAIT_TIMEOUT + | c::ERROR_DRIVER_CANCEL_TIMEOUT + | c::ERROR_OPERATION_ABORTED + | c::ERROR_SERVICE_REQUEST_TIMEOUT + | c::ERROR_COUNTER_TIMEOUT + | c::ERROR_TIMEOUT + | c::ERROR_RESOURCE_CALL_TIMED_OUT + | c::ERROR_CTX_MODEM_RESPONSE_TIMEOUT + | c::ERROR_CTX_CLIENT_QUERY_TIMEOUT + | c::FRS_ERR_SYSVOL_POPULATE_TIMEOUT + | c::ERROR_DS_TIMELIMIT_EXCEEDED + | c::DNS_ERROR_RECORD_TIMED_OUT + | c::ERROR_IPSEC_IKE_TIMED_OUT + | c::ERROR_RUNLEVEL_SWITCH_TIMEOUT + | c::ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT => return ErrorKind::TimedOut, _ => {} } From e27a8b59ed8046c9a9c73b680e0f767f4252077d Mon Sep 17 00:00:00 2001 From: Carsten Andrich Date: Sat, 13 Jun 2020 10:02:52 +0200 Subject: [PATCH 4/4] add link list of error codes on docs.microsoft.com --- src/libstd/sys/windows/c.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libstd/sys/windows/c.rs b/src/libstd/sys/windows/c.rs index d2c4cc3bbff53..4d7177226aaa8 100644 --- a/src/libstd/sys/windows/c.rs +++ b/src/libstd/sys/windows/c.rs @@ -161,6 +161,8 @@ pub const STD_ERROR_HANDLE: DWORD = -12i32 as DWORD; pub const PROGRESS_CONTINUE: DWORD = 0; +// List of Windows system error codes with descriptions: +// https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes#system-error-codes pub const ERROR_FILE_NOT_FOUND: DWORD = 2; pub const ERROR_PATH_NOT_FOUND: DWORD = 3; pub const ERROR_ACCESS_DENIED: DWORD = 5;