From 4a15bd8eaff4f749113dc49bbcf877e34593726b Mon Sep 17 00:00:00 2001 From: Christiaan Dirkx Date: Fri, 20 Nov 2020 06:14:29 +0100 Subject: [PATCH 1/8] Add and insta-stabilize `std::io::ErrorKind::NotSupported` --- library/std/src/io/error.rs | 5 +++++ library/std/src/sys/unix/l4re.rs | 2 +- library/std/src/sys/unsupported/common.rs | 2 +- library/std/src/sys/unsupported/os.rs | 4 ++-- library/std/src/sys/windows/fs.rs | 2 +- library/std/src/sys/windows/net.rs | 2 +- 6 files changed, 11 insertions(+), 6 deletions(-) diff --git a/library/std/src/io/error.rs b/library/std/src/io/error.rs index 97c92aa350696..62727ec465daa 100644 --- a/library/std/src/io/error.rs +++ b/library/std/src/io/error.rs @@ -180,6 +180,10 @@ pub enum ErrorKind { /// read. #[stable(feature = "read_exact", since = "1.6.0")] UnexpectedEof, + + /// This operation is not supported on this platform. + #[stable(feature = "not_supported_error", since = "1.50.0")] + NotSupported, } impl ErrorKind { @@ -203,6 +207,7 @@ impl ErrorKind { ErrorKind::Interrupted => "operation interrupted", ErrorKind::Other => "other os error", ErrorKind::UnexpectedEof => "unexpected end of file", + ErrorKind::NotSupported => "not supported", } } } diff --git a/library/std/src/sys/unix/l4re.rs b/library/std/src/sys/unix/l4re.rs index d60a4b5591fae..6d2d1c5a84a3b 100644 --- a/library/std/src/sys/unix/l4re.rs +++ b/library/std/src/sys/unix/l4re.rs @@ -1,6 +1,6 @@ macro_rules! unimpl { () => { - return Err(io::Error::new_const(io::ErrorKind::Other, &"No networking available on L4Re.")); + return Err(io::Error::new_const(io::ErrorKind::NotSupported, &"No networking available on L4Re.")); }; } diff --git a/library/std/src/sys/unsupported/common.rs b/library/std/src/sys/unsupported/common.rs index 01e4fd3c994d4..9d18b83d563b0 100644 --- a/library/std/src/sys/unsupported/common.rs +++ b/library/std/src/sys/unsupported/common.rs @@ -18,7 +18,7 @@ pub fn unsupported() -> std_io::Result { } pub fn unsupported_err() -> std_io::Error { - std_io::Error::new_const(std_io::ErrorKind::Other, &"operation not supported on this platform") + std_io::Error::new_const(std_io::ErrorKind::NotSupported, &"operation not supported on this platform") } pub fn decode_error_kind(_code: i32) -> crate::io::ErrorKind { diff --git a/library/std/src/sys/unsupported/os.rs b/library/std/src/sys/unsupported/os.rs index 897927e7b79a7..bd94e2d629efb 100644 --- a/library/std/src/sys/unsupported/os.rs +++ b/library/std/src/sys/unsupported/os.rs @@ -80,11 +80,11 @@ pub fn getenv(_: &OsStr) -> io::Result> { } pub fn setenv(_: &OsStr, _: &OsStr) -> io::Result<()> { - Err(io::Error::new_const(io::ErrorKind::Other, &"cannot set env vars on this platform")) + Err(io::Error::new_const(io::ErrorKind::NotSupported, &"cannot set env vars on this platform")) } pub fn unsetenv(_: &OsStr) -> io::Result<()> { - Err(io::Error::new_const(io::ErrorKind::Other, &"cannot unset env vars on this platform")) + Err(io::Error::new_const(io::ErrorKind::NotSupported, &"cannot unset env vars on this platform")) } pub fn temp_dir() -> PathBuf { diff --git a/library/std/src/sys/windows/fs.rs b/library/std/src/sys/windows/fs.rs index c6509db80c05b..ef68405b1033e 100644 --- a/library/std/src/sys/windows/fs.rs +++ b/library/std/src/sys/windows/fs.rs @@ -802,7 +802,7 @@ pub fn link(original: &Path, link: &Path) -> io::Result<()> { #[cfg(target_vendor = "uwp")] pub fn link(_original: &Path, _link: &Path) -> io::Result<()> { - return Err(io::Error::new_const(io::ErrorKind::Other, &"hard link are not supported on UWP")); + return Err(io::Error::new_const(io::ErrorKind::NotSupported, &"hard link are not supported on UWP")); } pub fn stat(path: &Path) -> io::Result { diff --git a/library/std/src/sys/windows/net.rs b/library/std/src/sys/windows/net.rs index e50adcb28a4b7..f6691ccd3e191 100644 --- a/library/std/src/sys/windows/net.rs +++ b/library/std/src/sys/windows/net.rs @@ -370,7 +370,7 @@ impl Socket { #[cfg(target_vendor = "uwp")] fn set_no_inherit(&self) -> io::Result<()> { - Err(io::Error::new_const(io::ErrorKind::Other, &"Unavailable on UWP")) + Err(io::Error::new_const(io::ErrorKind::NotSupported, &"Unavailable on UWP")) } pub fn shutdown(&self, how: Shutdown) -> io::Result<()> { From 9f589b023fd4e38b6c14b5b174a8e5814c822fb0 Mon Sep 17 00:00:00 2001 From: Christiaan Dirkx Date: Sat, 13 Feb 2021 00:00:54 +0100 Subject: [PATCH 2/8] Update `decode_error_kind` to decode os errors to `NotSupported` --- library/std/src/sys/unix/mod.rs | 1 + library/std/src/sys/vxworks/mod.rs | 1 + library/std/src/sys/wasi/mod.rs | 1 + library/std/src/sys/windows/mod.rs | 1 + 4 files changed, 4 insertions(+) diff --git a/library/std/src/sys/unix/mod.rs b/library/std/src/sys/unix/mod.rs index 44328ffc22e5b..7b99e0fe1f941 100644 --- a/library/std/src/sys/unix/mod.rs +++ b/library/std/src/sys/unix/mod.rs @@ -148,6 +148,7 @@ pub fn decode_error_kind(errno: i32) -> ErrorKind { libc::EINVAL => ErrorKind::InvalidInput, libc::ETIMEDOUT => ErrorKind::TimedOut, libc::EEXIST => ErrorKind::AlreadyExists, + libc::ENOSYS => ErrorKind::NotSupported, // These two constants can have the same value on some systems, // but different values on others, so we can't use a match diff --git a/library/std/src/sys/vxworks/mod.rs b/library/std/src/sys/vxworks/mod.rs index c20edaa1a4778..95e4baf3a6de4 100644 --- a/library/std/src/sys/vxworks/mod.rs +++ b/library/std/src/sys/vxworks/mod.rs @@ -83,6 +83,7 @@ pub fn decode_error_kind(errno: i32) -> ErrorKind { libc::EINVAL => ErrorKind::InvalidInput, libc::ETIMEDOUT => ErrorKind::TimedOut, libc::EEXIST => ErrorKind::AlreadyExists, + libc::ENOSYS => ErrorKind::NotSupported, // These two constants can have the same value on some systems, // but different values on others, so we can't use a match diff --git a/library/std/src/sys/wasi/mod.rs b/library/std/src/sys/wasi/mod.rs index a0a37ef8316a8..c772fc0be69d1 100644 --- a/library/std/src/sys/wasi/mod.rs +++ b/library/std/src/sys/wasi/mod.rs @@ -78,6 +78,7 @@ pub fn decode_error_kind(errno: i32) -> std_io::ErrorKind { wasi::ERRNO_TIMEDOUT => TimedOut, wasi::ERRNO_EXIST => AlreadyExists, wasi::ERRNO_AGAIN => WouldBlock, + wasi::ERRNO_NOSYS => NotSupported, _ => Other, } } diff --git a/library/std/src/sys/windows/mod.rs b/library/std/src/sys/windows/mod.rs index 0353c9811f15f..c8fada3c0c223 100644 --- a/library/std/src/sys/windows/mod.rs +++ b/library/std/src/sys/windows/mod.rs @@ -78,6 +78,7 @@ pub fn decode_error_kind(errno: i32) -> ErrorKind { | c::ERROR_IPSEC_IKE_TIMED_OUT | c::ERROR_RUNLEVEL_SWITCH_TIMEOUT | c::ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT => return ErrorKind::TimedOut, + c::ERROR_CALL_NOT_IMPLEMENTED => return ErrorKind::NotSupported, _ => {} } From 86592b9939df4e5534ea37cda6bc0b7f7ca8b70e Mon Sep 17 00:00:00 2001 From: CDirkx Date: Tue, 23 Feb 2021 05:49:37 +0100 Subject: [PATCH 3/8] Bump since to 1.52.0 --- library/std/src/io/error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/std/src/io/error.rs b/library/std/src/io/error.rs index 62727ec465daa..a300e5459a6bb 100644 --- a/library/std/src/io/error.rs +++ b/library/std/src/io/error.rs @@ -182,7 +182,7 @@ pub enum ErrorKind { UnexpectedEof, /// This operation is not supported on this platform. - #[stable(feature = "not_supported_error", since = "1.50.0")] + #[stable(feature = "not_supported_error", since = "1.52.0")] NotSupported, } From 1b5f117c47dcc1b041c686d4c6016ebf96006f06 Mon Sep 17 00:00:00 2001 From: Christiaan Dirkx Date: Fri, 26 Feb 2021 00:17:36 +0100 Subject: [PATCH 4/8] Use `NotSupported` in more places --- library/std/src/sys/hermit/fd.rs | 9 ++-- library/std/src/sys/hermit/mod.rs | 2 +- library/std/src/sys/hermit/net.rs | 78 +++++++++++++++---------------- library/std/src/sys/sgx/mod.rs | 2 +- library/std/src/sys/unix/fs.rs | 2 +- library/std/src/sys/unix/os.rs | 2 +- 6 files changed, 48 insertions(+), 47 deletions(-) diff --git a/library/std/src/sys/hermit/fd.rs b/library/std/src/sys/hermit/fd.rs index 1c0515a150398..c400f5f2c2e84 100644 --- a/library/std/src/sys/hermit/fd.rs +++ b/library/std/src/sys/hermit/fd.rs @@ -1,9 +1,10 @@ #![unstable(reason = "not public", issue = "none", feature = "fd")] -use crate::io::{self, ErrorKind, Read}; +use crate::io::{self, Read}; use crate::mem; use crate::sys::cvt; use crate::sys::hermit::abi; +use crate::sys::unsupported; use crate::sys_common::AsInner; #[derive(Debug)] @@ -46,7 +47,7 @@ impl FileDesc { self.duplicate_path(&[]) } pub fn duplicate_path(&self, _path: &[u8]) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"duplicate isn't supported")) + unsupported() } pub fn nonblocking(&self) -> io::Result { @@ -54,11 +55,11 @@ impl FileDesc { } pub fn set_cloexec(&self) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"cloexec isn't supported")) + unsupported() } pub fn set_nonblocking(&self, _nonblocking: bool) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"nonblocking isn't supported")) + unsupported() } } diff --git a/library/std/src/sys/hermit/mod.rs b/library/std/src/sys/hermit/mod.rs index 1ecda25c03de5..1fa929e48db0e 100644 --- a/library/std/src/sys/hermit/mod.rs +++ b/library/std/src/sys/hermit/mod.rs @@ -56,7 +56,7 @@ pub fn unsupported() -> crate::io::Result { pub fn unsupported_err() -> crate::io::Error { crate::io::Error::new_const( - crate::io::ErrorKind::Other, + crate::io::ErrorKind::NotSupported, &"operation not supported on HermitCore yet", ) } diff --git a/library/std/src/sys/hermit/net.rs b/library/std/src/sys/hermit/net.rs index 7053487ccfbe0..a9c09b6ceefae 100644 --- a/library/std/src/sys/hermit/net.rs +++ b/library/std/src/sys/hermit/net.rs @@ -166,7 +166,7 @@ impl TcpStream { } pub fn socket_addr(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"socket_addr isn't supported")) + unsupported() } pub fn shutdown(&self, how: Shutdown) -> io::Result<()> { @@ -199,7 +199,7 @@ impl TcpStream { } pub fn take_error(&self) -> io::Result> { - Err(io::Error::new_const(ErrorKind::Other, &"take_error isn't supported")) + unsupported() } pub fn set_nonblocking(&self, mode: bool) -> io::Result<()> { @@ -247,27 +247,27 @@ impl TcpListener { } pub fn set_ttl(&self, _: u32) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn ttl(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn set_only_v6(&self, _: bool) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn only_v6(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn take_error(&self) -> io::Result> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn set_nonblocking(&self, _: bool) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } } @@ -281,127 +281,127 @@ pub struct UdpSocket(abi::Handle); impl UdpSocket { pub fn bind(_: io::Result<&SocketAddr>) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn peer_addr(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn socket_addr(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn recv_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn peek_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn send_to(&self, _: &[u8], _: &SocketAddr) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn duplicate(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn set_read_timeout(&self, _: Option) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn set_write_timeout(&self, _: Option) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn read_timeout(&self) -> io::Result> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn write_timeout(&self) -> io::Result> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn set_broadcast(&self, _: bool) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn broadcast(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn set_multicast_loop_v4(&self, _: bool) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn multicast_loop_v4(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn set_multicast_ttl_v4(&self, _: u32) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn multicast_ttl_v4(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn set_multicast_loop_v6(&self, _: bool) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn multicast_loop_v6(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn join_multicast_v4(&self, _: &Ipv4Addr, _: &Ipv4Addr) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn join_multicast_v6(&self, _: &Ipv6Addr, _: u32) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn leave_multicast_v4(&self, _: &Ipv4Addr, _: &Ipv4Addr) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn leave_multicast_v6(&self, _: &Ipv6Addr, _: u32) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn set_ttl(&self, _: u32) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn ttl(&self) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn take_error(&self) -> io::Result> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn set_nonblocking(&self, _: bool) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn recv(&self, _: &mut [u8]) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn peek(&self, _: &mut [u8]) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn send(&self, _: &[u8]) -> io::Result { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } pub fn connect(&self, _: io::Result<&SocketAddr>) -> io::Result<()> { - Err(io::Error::new_const(ErrorKind::Other, &"not supported")) + unsupported() } } diff --git a/library/std/src/sys/sgx/mod.rs b/library/std/src/sys/sgx/mod.rs index 3cd245f40d967..7636413fefbe2 100644 --- a/library/std/src/sys/sgx/mod.rs +++ b/library/std/src/sys/sgx/mod.rs @@ -50,7 +50,7 @@ pub fn unsupported() -> crate::io::Result { } pub fn unsupported_err() -> crate::io::Error { - crate::io::Error::new_const(ErrorKind::Other, &"operation not supported on SGX yet") + crate::io::Error::new_const(ErrorKind::NotSupported, &"operation not supported on SGX yet") } /// This function is used to implement various functions that doesn't exist, diff --git a/library/std/src/sys/unix/fs.rs b/library/std/src/sys/unix/fs.rs index 759565bab73f3..1113c7821b28c 100644 --- a/library/std/src/sys/unix/fs.rs +++ b/library/std/src/sys/unix/fs.rs @@ -366,7 +366,7 @@ impl FileAttr { } Err(io::Error::new_const( - io::ErrorKind::Other, + io::ErrorKind::NotSupported, &"creation time is not available on this platform \ currently", )) diff --git a/library/std/src/sys/unix/os.rs b/library/std/src/sys/unix/os.rs index ce2c4e88c7e5a..216bc3b5d6dcc 100644 --- a/library/std/src/sys/unix/os.rs +++ b/library/std/src/sys/unix/os.rs @@ -447,7 +447,7 @@ pub fn current_exe() -> io::Result { #[cfg(any(target_os = "fuchsia", target_os = "l4re"))] pub fn current_exe() -> io::Result { use crate::io::ErrorKind; - Err(io::Error::new_const(ErrorKind::Other, &"Not yet implemented!")) + Err(io::Error::new_const(ErrorKind::NotSupported, &"Not yet implemented!")) } #[cfg(target_os = "vxworks")] From af0dec279590a44d4542e13913606481084a4e9f Mon Sep 17 00:00:00 2001 From: Christiaan Dirkx Date: Fri, 19 Mar 2021 01:39:20 +0100 Subject: [PATCH 5/8] Rename `NotSupported` to `Unsupported` --- library/std/src/io/error.rs | 10 ++++++---- library/std/src/sys/hermit/mod.rs | 2 +- library/std/src/sys/sgx/mod.rs | 2 +- library/std/src/sys/unix/fs.rs | 2 +- library/std/src/sys/unix/l4re.rs | 5 ++++- library/std/src/sys/unix/mod.rs | 2 +- library/std/src/sys/unix/os.rs | 2 +- library/std/src/sys/unsupported/common.rs | 5 ++++- library/std/src/sys/unsupported/os.rs | 4 ++-- library/std/src/sys/vxworks/mod.rs | 2 +- library/std/src/sys/wasi/mod.rs | 2 +- library/std/src/sys/windows/fs.rs | 5 ++++- library/std/src/sys/windows/mod.rs | 2 +- library/std/src/sys/windows/net.rs | 2 +- 14 files changed, 29 insertions(+), 18 deletions(-) diff --git a/library/std/src/io/error.rs b/library/std/src/io/error.rs index a300e5459a6bb..f9d45b9aafb77 100644 --- a/library/std/src/io/error.rs +++ b/library/std/src/io/error.rs @@ -181,9 +181,11 @@ pub enum ErrorKind { #[stable(feature = "read_exact", since = "1.6.0")] UnexpectedEof, - /// This operation is not supported on this platform. - #[stable(feature = "not_supported_error", since = "1.52.0")] - NotSupported, + /// This operation is unsupported on this platform. + /// + /// This means that the operation can never succeed. + #[stable(feature = "unsupported_error", since = "1.52.0")] + Unsupported, } impl ErrorKind { @@ -207,7 +209,7 @@ impl ErrorKind { ErrorKind::Interrupted => "operation interrupted", ErrorKind::Other => "other os error", ErrorKind::UnexpectedEof => "unexpected end of file", - ErrorKind::NotSupported => "not supported", + ErrorKind::Unsupported => "unsupported", } } } diff --git a/library/std/src/sys/hermit/mod.rs b/library/std/src/sys/hermit/mod.rs index 1fa929e48db0e..f8c1612d1ca03 100644 --- a/library/std/src/sys/hermit/mod.rs +++ b/library/std/src/sys/hermit/mod.rs @@ -56,7 +56,7 @@ pub fn unsupported() -> crate::io::Result { pub fn unsupported_err() -> crate::io::Error { crate::io::Error::new_const( - crate::io::ErrorKind::NotSupported, + crate::io::ErrorKind::Unsupported, &"operation not supported on HermitCore yet", ) } diff --git a/library/std/src/sys/sgx/mod.rs b/library/std/src/sys/sgx/mod.rs index 7636413fefbe2..da37d1aeb7e74 100644 --- a/library/std/src/sys/sgx/mod.rs +++ b/library/std/src/sys/sgx/mod.rs @@ -50,7 +50,7 @@ pub fn unsupported() -> crate::io::Result { } pub fn unsupported_err() -> crate::io::Error { - crate::io::Error::new_const(ErrorKind::NotSupported, &"operation not supported on SGX yet") + crate::io::Error::new_const(ErrorKind::Unsupported, &"operation not supported on SGX yet") } /// This function is used to implement various functions that doesn't exist, diff --git a/library/std/src/sys/unix/fs.rs b/library/std/src/sys/unix/fs.rs index 1113c7821b28c..16a7f727696ec 100644 --- a/library/std/src/sys/unix/fs.rs +++ b/library/std/src/sys/unix/fs.rs @@ -366,7 +366,7 @@ impl FileAttr { } Err(io::Error::new_const( - io::ErrorKind::NotSupported, + io::ErrorKind::Unsupported, &"creation time is not available on this platform \ currently", )) diff --git a/library/std/src/sys/unix/l4re.rs b/library/std/src/sys/unix/l4re.rs index 6d2d1c5a84a3b..3cf637c82285a 100644 --- a/library/std/src/sys/unix/l4re.rs +++ b/library/std/src/sys/unix/l4re.rs @@ -1,6 +1,9 @@ macro_rules! unimpl { () => { - return Err(io::Error::new_const(io::ErrorKind::NotSupported, &"No networking available on L4Re.")); + return Err(io::Error::new_const( + io::ErrorKind::Unsupported, + &"No networking available on L4Re.", + )); }; } diff --git a/library/std/src/sys/unix/mod.rs b/library/std/src/sys/unix/mod.rs index 7b99e0fe1f941..6e44ac19c7b2c 100644 --- a/library/std/src/sys/unix/mod.rs +++ b/library/std/src/sys/unix/mod.rs @@ -148,7 +148,7 @@ pub fn decode_error_kind(errno: i32) -> ErrorKind { libc::EINVAL => ErrorKind::InvalidInput, libc::ETIMEDOUT => ErrorKind::TimedOut, libc::EEXIST => ErrorKind::AlreadyExists, - libc::ENOSYS => ErrorKind::NotSupported, + libc::ENOSYS => ErrorKind::Unsupported, // These two constants can have the same value on some systems, // but different values on others, so we can't use a match diff --git a/library/std/src/sys/unix/os.rs b/library/std/src/sys/unix/os.rs index 216bc3b5d6dcc..98e578c5255c7 100644 --- a/library/std/src/sys/unix/os.rs +++ b/library/std/src/sys/unix/os.rs @@ -447,7 +447,7 @@ pub fn current_exe() -> io::Result { #[cfg(any(target_os = "fuchsia", target_os = "l4re"))] pub fn current_exe() -> io::Result { use crate::io::ErrorKind; - Err(io::Error::new_const(ErrorKind::NotSupported, &"Not yet implemented!")) + Err(io::Error::new_const(ErrorKind::Unsupported, &"Not yet implemented!")) } #[cfg(target_os = "vxworks")] diff --git a/library/std/src/sys/unsupported/common.rs b/library/std/src/sys/unsupported/common.rs index 9d18b83d563b0..64ec50fa9ec00 100644 --- a/library/std/src/sys/unsupported/common.rs +++ b/library/std/src/sys/unsupported/common.rs @@ -18,7 +18,10 @@ pub fn unsupported() -> std_io::Result { } pub fn unsupported_err() -> std_io::Error { - std_io::Error::new_const(std_io::ErrorKind::NotSupported, &"operation not supported on this platform") + std_io::Error::new_const( + std_io::ErrorKind::Unsupported, + &"operation not supported on this platform", + ) } pub fn decode_error_kind(_code: i32) -> crate::io::ErrorKind { diff --git a/library/std/src/sys/unsupported/os.rs b/library/std/src/sys/unsupported/os.rs index bd94e2d629efb..3754aebf45581 100644 --- a/library/std/src/sys/unsupported/os.rs +++ b/library/std/src/sys/unsupported/os.rs @@ -80,11 +80,11 @@ pub fn getenv(_: &OsStr) -> io::Result> { } pub fn setenv(_: &OsStr, _: &OsStr) -> io::Result<()> { - Err(io::Error::new_const(io::ErrorKind::NotSupported, &"cannot set env vars on this platform")) + Err(io::Error::new_const(io::ErrorKind::Unsupported, &"cannot set env vars on this platform")) } pub fn unsetenv(_: &OsStr) -> io::Result<()> { - Err(io::Error::new_const(io::ErrorKind::NotSupported, &"cannot unset env vars on this platform")) + Err(io::Error::new_const(io::ErrorKind::Unsupported, &"cannot unset env vars on this platform")) } pub fn temp_dir() -> PathBuf { diff --git a/library/std/src/sys/vxworks/mod.rs b/library/std/src/sys/vxworks/mod.rs index 95e4baf3a6de4..12d0147a12981 100644 --- a/library/std/src/sys/vxworks/mod.rs +++ b/library/std/src/sys/vxworks/mod.rs @@ -83,7 +83,7 @@ pub fn decode_error_kind(errno: i32) -> ErrorKind { libc::EINVAL => ErrorKind::InvalidInput, libc::ETIMEDOUT => ErrorKind::TimedOut, libc::EEXIST => ErrorKind::AlreadyExists, - libc::ENOSYS => ErrorKind::NotSupported, + libc::ENOSYS => ErrorKind::Unsupported, // These two constants can have the same value on some systems, // but different values on others, so we can't use a match diff --git a/library/std/src/sys/wasi/mod.rs b/library/std/src/sys/wasi/mod.rs index c772fc0be69d1..b7b640b174fa9 100644 --- a/library/std/src/sys/wasi/mod.rs +++ b/library/std/src/sys/wasi/mod.rs @@ -78,7 +78,7 @@ pub fn decode_error_kind(errno: i32) -> std_io::ErrorKind { wasi::ERRNO_TIMEDOUT => TimedOut, wasi::ERRNO_EXIST => AlreadyExists, wasi::ERRNO_AGAIN => WouldBlock, - wasi::ERRNO_NOSYS => NotSupported, + wasi::ERRNO_NOSYS => Unsupported, _ => Other, } } diff --git a/library/std/src/sys/windows/fs.rs b/library/std/src/sys/windows/fs.rs index ef68405b1033e..8e6bd76f85f06 100644 --- a/library/std/src/sys/windows/fs.rs +++ b/library/std/src/sys/windows/fs.rs @@ -802,7 +802,10 @@ pub fn link(original: &Path, link: &Path) -> io::Result<()> { #[cfg(target_vendor = "uwp")] pub fn link(_original: &Path, _link: &Path) -> io::Result<()> { - return Err(io::Error::new_const(io::ErrorKind::NotSupported, &"hard link are not supported on UWP")); + return Err(io::Error::new_const( + io::ErrorKind::Unsupported, + &"hard link are not supported on UWP", + )); } pub fn stat(path: &Path) -> io::Result { diff --git a/library/std/src/sys/windows/mod.rs b/library/std/src/sys/windows/mod.rs index c8fada3c0c223..973301af2d992 100644 --- a/library/std/src/sys/windows/mod.rs +++ b/library/std/src/sys/windows/mod.rs @@ -78,7 +78,7 @@ pub fn decode_error_kind(errno: i32) -> ErrorKind { | c::ERROR_IPSEC_IKE_TIMED_OUT | c::ERROR_RUNLEVEL_SWITCH_TIMEOUT | c::ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT => return ErrorKind::TimedOut, - c::ERROR_CALL_NOT_IMPLEMENTED => return ErrorKind::NotSupported, + c::ERROR_CALL_NOT_IMPLEMENTED => return ErrorKind::Unsupported, _ => {} } diff --git a/library/std/src/sys/windows/net.rs b/library/std/src/sys/windows/net.rs index f6691ccd3e191..ad04afc0b6d8a 100644 --- a/library/std/src/sys/windows/net.rs +++ b/library/std/src/sys/windows/net.rs @@ -370,7 +370,7 @@ impl Socket { #[cfg(target_vendor = "uwp")] fn set_no_inherit(&self) -> io::Result<()> { - Err(io::Error::new_const(io::ErrorKind::NotSupported, &"Unavailable on UWP")) + Err(io::Error::new_const(io::ErrorKind::Unsupported, &"Unavailable on UWP")) } pub fn shutdown(&self, how: Shutdown) -> io::Result<()> { From 0895a693bdaf1472f2c8036abccaa78299ec71cf Mon Sep 17 00:00:00 2001 From: Christiaan Dirkx Date: Fri, 19 Mar 2021 20:48:48 +0100 Subject: [PATCH 6/8] Fix test `metadata_access_times` to also check for `Unsupported` --- library/std/src/fs/tests.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/library/std/src/fs/tests.rs b/library/std/src/fs/tests.rs index 5c969741592e6..ce8d3a56f7af4 100644 --- a/library/std/src/fs/tests.rs +++ b/library/std/src/fs/tests.rs @@ -1329,7 +1329,9 @@ fn metadata_access_times() { match (a.created(), b.created()) { (Ok(t1), Ok(t2)) => assert!(t1 <= t2), (Err(e1), Err(e2)) - if e1.kind() == ErrorKind::Other && e2.kind() == ErrorKind::Other => {} + if e1.kind() == ErrorKind::Other && e2.kind() == ErrorKind::Other + || e1.kind() == ErrorKind::Unsupported + && e2.kind() == ErrorKind::Unsupported => {} (a, b) => { panic!("creation time must be always supported or not supported: {:?} {:?}", a, b,) } From b42e52f2cce4bddaa6baef2010061347790ab420 Mon Sep 17 00:00:00 2001 From: CDirkx Date: Mon, 22 Mar 2021 00:29:17 +0100 Subject: [PATCH 7/8] Bump to 1.53.0 Co-authored-by: Mara Bos --- library/std/src/io/error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/std/src/io/error.rs b/library/std/src/io/error.rs index f9d45b9aafb77..9bed12bf2ae2b 100644 --- a/library/std/src/io/error.rs +++ b/library/std/src/io/error.rs @@ -184,7 +184,7 @@ pub enum ErrorKind { /// This operation is unsupported on this platform. /// /// This means that the operation can never succeed. - #[stable(feature = "unsupported_error", since = "1.52.0")] + #[stable(feature = "unsupported_error", since = "1.53.0")] Unsupported, } From 5b5afaefff5bdfc01911b9013318145466abec68 Mon Sep 17 00:00:00 2001 From: Christiaan Dirkx Date: Mon, 29 Mar 2021 12:35:16 +0200 Subject: [PATCH 8/8] Fix clippy test using `ErrorKind` --- src/tools/clippy/tests/ui/wildcard_enum_match_arm.fixed | 3 ++- src/tools/clippy/tests/ui/wildcard_enum_match_arm.rs | 1 + src/tools/clippy/tests/ui/wildcard_enum_match_arm.stderr | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/tools/clippy/tests/ui/wildcard_enum_match_arm.fixed b/src/tools/clippy/tests/ui/wildcard_enum_match_arm.fixed index fd754e4c794f6..129d82652d759 100644 --- a/src/tools/clippy/tests/ui/wildcard_enum_match_arm.fixed +++ b/src/tools/clippy/tests/ui/wildcard_enum_match_arm.fixed @@ -77,7 +77,7 @@ fn main() { let error_kind = ErrorKind::NotFound; match error_kind { ErrorKind::NotFound => {}, - ErrorKind::PermissionDenied | ErrorKind::ConnectionRefused | ErrorKind::ConnectionReset | ErrorKind::ConnectionAborted | ErrorKind::NotConnected | ErrorKind::AddrInUse | ErrorKind::AddrNotAvailable | ErrorKind::BrokenPipe | ErrorKind::AlreadyExists | ErrorKind::WouldBlock | ErrorKind::InvalidInput | ErrorKind::InvalidData | ErrorKind::TimedOut | ErrorKind::WriteZero | ErrorKind::Interrupted | ErrorKind::Other | ErrorKind::UnexpectedEof | _ => {}, + ErrorKind::PermissionDenied | ErrorKind::ConnectionRefused | ErrorKind::ConnectionReset | ErrorKind::ConnectionAborted | ErrorKind::NotConnected | ErrorKind::AddrInUse | ErrorKind::AddrNotAvailable | ErrorKind::BrokenPipe | ErrorKind::AlreadyExists | ErrorKind::WouldBlock | ErrorKind::InvalidInput | ErrorKind::InvalidData | ErrorKind::TimedOut | ErrorKind::WriteZero | ErrorKind::Interrupted | ErrorKind::Other | ErrorKind::UnexpectedEof | ErrorKind::Unsupported | _ => {}, } match error_kind { ErrorKind::NotFound => {}, @@ -98,6 +98,7 @@ fn main() { ErrorKind::Interrupted => {}, ErrorKind::Other => {}, ErrorKind::UnexpectedEof => {}, + ErrorKind::Unsupported => {}, _ => {}, } } diff --git a/src/tools/clippy/tests/ui/wildcard_enum_match_arm.rs b/src/tools/clippy/tests/ui/wildcard_enum_match_arm.rs index 2dbf726d5d072..028ecb63e7e6d 100644 --- a/src/tools/clippy/tests/ui/wildcard_enum_match_arm.rs +++ b/src/tools/clippy/tests/ui/wildcard_enum_match_arm.rs @@ -98,6 +98,7 @@ fn main() { ErrorKind::Interrupted => {}, ErrorKind::Other => {}, ErrorKind::UnexpectedEof => {}, + ErrorKind::Unsupported => {}, _ => {}, } } diff --git a/src/tools/clippy/tests/ui/wildcard_enum_match_arm.stderr b/src/tools/clippy/tests/ui/wildcard_enum_match_arm.stderr index a513a62c748d6..fd45cad00d6b5 100644 --- a/src/tools/clippy/tests/ui/wildcard_enum_match_arm.stderr +++ b/src/tools/clippy/tests/ui/wildcard_enum_match_arm.stderr @@ -32,7 +32,7 @@ error: wildcard matches known variants and will also match future added variants --> $DIR/wildcard_enum_match_arm.rs:80:9 | LL | _ => {}, - | ^ help: try this: `ErrorKind::PermissionDenied | ErrorKind::ConnectionRefused | ErrorKind::ConnectionReset | ErrorKind::ConnectionAborted | ErrorKind::NotConnected | ErrorKind::AddrInUse | ErrorKind::AddrNotAvailable | ErrorKind::BrokenPipe | ErrorKind::AlreadyExists | ErrorKind::WouldBlock | ErrorKind::InvalidInput | ErrorKind::InvalidData | ErrorKind::TimedOut | ErrorKind::WriteZero | ErrorKind::Interrupted | ErrorKind::Other | ErrorKind::UnexpectedEof | _` + | ^ help: try this: `ErrorKind::PermissionDenied | ErrorKind::ConnectionRefused | ErrorKind::ConnectionReset | ErrorKind::ConnectionAborted | ErrorKind::NotConnected | ErrorKind::AddrInUse | ErrorKind::AddrNotAvailable | ErrorKind::BrokenPipe | ErrorKind::AlreadyExists | ErrorKind::WouldBlock | ErrorKind::InvalidInput | ErrorKind::InvalidData | ErrorKind::TimedOut | ErrorKind::WriteZero | ErrorKind::Interrupted | ErrorKind::Other | ErrorKind::UnexpectedEof | ErrorKind::Unsupported | _` error: aborting due to 5 previous errors