Some(p) => self.create_dir_all(p)?,
None => {
return Err(io::Error::new_const(
- io::ErrorKind::Unknown,
+ io::ErrorKind::Uncategorized,
&"failed to create whole tree",
));
}
match (a.created(), b.created()) {
(Ok(t1), Ok(t2)) => assert!(t1 <= t2),
(Err(e1), Err(e2))
- if e1.kind() == ErrorKind::Unknown && e2.kind() == ErrorKind::Unknown
+ if e1.kind() == ErrorKind::Uncategorized
+ && e2.kind() == ErrorKind::Uncategorized
|| e1.kind() == ErrorKind::Unsupported
&& e2.kind() == ErrorKind::Unsupported => {}
(a, b) => {
/// Any I/O error from the standard library that's not part of this list.
///
- /// Errors that are `Unknown` now may move to a different or a new
+ /// Errors that are `Uncategorized` now may move to a different or a new
/// [`ErrorKind`] variant in the future. It is not recommended to match
- /// an error against `Unknown`; use a wildcard match (`_`) instead.
- #[unstable(feature = "io_error_unknown", issue = "none")]
+ /// an error against `Uncategorized`; use a wildcard match (`_`) instead.
+ #[unstable(feature = "io_error_uncategorized", issue = "none")]
#[doc(hidden)]
- Unknown,
+ Uncategorized,
}
impl ErrorKind {
ErrorKind::Unsupported => "unsupported",
ErrorKind::OutOfMemory => "out of memory",
ErrorKind::Other => "other error",
- ErrorKind::Unknown => "other os error",
+ ErrorKind::Uncategorized => "uncategorized error",
}
}
}
/// }
///
/// fn main() {
- /// // Will print "Unknown".
+ /// // Will print "Uncategorized".
/// print_error(Error::last_os_error());
/// // Will print "AddrInUse".
/// print_error(Error::new(ErrorKind::AddrInUse, "oh no!"));
if output.error.is_err() {
output.error
} else {
- Err(Error::new_const(ErrorKind::Unknown, &"formatter error"))
+ Err(Error::new_const(ErrorKind::Uncategorized, &"formatter error"))
}
}
}
Err(e) => {
assert!(
e.kind() == ErrorKind::ConnectionRefused
- || e.kind() == ErrorKind::Unknown
+ || e.kind() == ErrorKind::Uncategorized
|| e.kind() == ErrorKind::AddrInUse,
"unknown error: {} {:?}",
e,
}
fn osstr2str(f: &OsStr) -> io::Result<&str> {
- f.to_str().ok_or_else(|| io::Error::new_const(io::ErrorKind::Unknown, &"input must be utf-8"))
+ f.to_str()
+ .ok_or_else(|| io::Error::new_const(io::ErrorKind::Uncategorized, &"input must be utf-8"))
}
x if x == 1 as i32 => ErrorKind::PermissionDenied,
x if x == 32 as i32 => ErrorKind::BrokenPipe,
x if x == 110 as i32 => ErrorKind::TimedOut,
- _ => ErrorKind::Unknown,
+ _ => ErrorKind::Uncategorized,
}
}
pub fn init() -> io::Result<()> {
if abi::network_init() < 0 {
return Err(io::Error::new_const(
- ErrorKind::Unknown,
+ ErrorKind::Uncategorized,
&"Unable to initialize network interface",
));
}
match abi::tcpstream::connect(addr.ip().to_string().as_bytes(), addr.port(), None) {
Ok(handle) => Ok(TcpStream(Arc::new(Socket(handle)))),
_ => Err(io::Error::new_const(
- ErrorKind::Unknown,
+ ErrorKind::Uncategorized,
&"Unable to initiate a connection on a socket",
)),
}
) {
Ok(handle) => Ok(TcpStream(Arc::new(Socket(handle)))),
_ => Err(io::Error::new_const(
- ErrorKind::Unknown,
+ ErrorKind::Uncategorized,
&"Unable to initiate a connection on a socket",
)),
}
pub fn set_read_timeout(&self, duration: Option<Duration>) -> io::Result<()> {
abi::tcpstream::set_read_timeout(*self.0.as_inner(), duration.map(|d| d.as_millis() as u64))
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"Unable to set timeout value"))
+ .map_err(|_| {
+ io::Error::new_const(ErrorKind::Uncategorized, &"Unable to set timeout value")
+ })
}
pub fn set_write_timeout(&self, duration: Option<Duration>) -> io::Result<()> {
*self.0.as_inner(),
duration.map(|d| d.as_millis() as u64),
)
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"Unable to set timeout value"))
+ .map_err(|_| io::Error::new_const(ErrorKind::Uncategorized, &"Unable to set timeout value"))
}
pub fn read_timeout(&self) -> io::Result<Option<Duration>> {
let duration = abi::tcpstream::get_read_timeout(*self.0.as_inner()).map_err(|_| {
- io::Error::new_const(ErrorKind::Unknown, &"Unable to determine timeout value")
+ io::Error::new_const(ErrorKind::Uncategorized, &"Unable to determine timeout value")
})?;
Ok(duration.map(|d| Duration::from_millis(d)))
pub fn write_timeout(&self) -> io::Result<Option<Duration>> {
let duration = abi::tcpstream::get_write_timeout(*self.0.as_inner()).map_err(|_| {
- io::Error::new_const(ErrorKind::Unknown, &"Unable to determine timeout value")
+ io::Error::new_const(ErrorKind::Uncategorized, &"Unable to determine timeout value")
})?;
Ok(duration.map(|d| Duration::from_millis(d)))
pub fn peek(&self, buf: &mut [u8]) -> io::Result<usize> {
abi::tcpstream::peek(*self.0.as_inner(), buf)
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"peek failed"))
+ .map_err(|_| io::Error::new_const(ErrorKind::Uncategorized, &"peek failed"))
}
pub fn read(&self, buffer: &mut [u8]) -> io::Result<usize> {
for i in ioslice.iter_mut() {
let ret = abi::tcpstream::read(*self.0.as_inner(), &mut i[0..]).map_err(|_| {
- io::Error::new_const(ErrorKind::Unknown, &"Unable to read on socket")
+ io::Error::new_const(ErrorKind::Uncategorized, &"Unable to read on socket")
})?;
if ret != 0 {
for i in ioslice.iter() {
size += abi::tcpstream::write(*self.0.as_inner(), i).map_err(|_| {
- io::Error::new_const(ErrorKind::Unknown, &"Unable to write on socket")
+ io::Error::new_const(ErrorKind::Uncategorized, &"Unable to write on socket")
})?;
}
pub fn peer_addr(&self) -> io::Result<SocketAddr> {
let (ipaddr, port) = abi::tcpstream::peer_addr(*self.0.as_inner())
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"peer_addr failed"))?;
+ .map_err(|_| io::Error::new_const(ErrorKind::Uncategorized, &"peer_addr failed"))?;
let saddr = match ipaddr {
Ipv4(ref addr) => SocketAddr::new(IpAddr::V4(Ipv4Addr::from(addr.0)), port),
Ipv6(ref addr) => SocketAddr::new(IpAddr::V6(Ipv6Addr::from(addr.0)), port),
_ => {
- return Err(io::Error::new_const(ErrorKind::Unknown, &"peer_addr failed"));
+ return Err(io::Error::new_const(ErrorKind::Uncategorized, &"peer_addr failed"));
}
};
}
pub fn shutdown(&self, how: Shutdown) -> io::Result<()> {
- abi::tcpstream::shutdown(*self.0.as_inner(), how as i32)
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"unable to shutdown socket"))
+ abi::tcpstream::shutdown(*self.0.as_inner(), how as i32).map_err(|_| {
+ io::Error::new_const(ErrorKind::Uncategorized, &"unable to shutdown socket")
+ })
}
pub fn duplicate(&self) -> io::Result<TcpStream> {
pub fn set_nodelay(&self, mode: bool) -> io::Result<()> {
abi::tcpstream::set_nodelay(*self.0.as_inner(), mode)
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"set_nodelay failed"))
+ .map_err(|_| io::Error::new_const(ErrorKind::Uncategorized, &"set_nodelay failed"))
}
pub fn nodelay(&self) -> io::Result<bool> {
abi::tcpstream::nodelay(*self.0.as_inner())
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"nodelay failed"))
+ .map_err(|_| io::Error::new_const(ErrorKind::Uncategorized, &"nodelay failed"))
}
pub fn set_ttl(&self, tll: u32) -> io::Result<()> {
abi::tcpstream::set_tll(*self.0.as_inner(), tll)
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"unable to set TTL"))
+ .map_err(|_| io::Error::new_const(ErrorKind::Uncategorized, &"unable to set TTL"))
}
pub fn ttl(&self) -> io::Result<u32> {
abi::tcpstream::get_tll(*self.0.as_inner())
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"unable to get TTL"))
+ .map_err(|_| io::Error::new_const(ErrorKind::Uncategorized, &"unable to get TTL"))
}
pub fn take_error(&self) -> io::Result<Option<io::Error>> {
}
pub fn set_nonblocking(&self, mode: bool) -> io::Result<()> {
- abi::tcpstream::set_nonblocking(*self.0.as_inner(), mode)
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"unable to set blocking mode"))
+ abi::tcpstream::set_nonblocking(*self.0.as_inner(), mode).map_err(|_| {
+ io::Error::new_const(ErrorKind::Uncategorized, &"unable to set blocking mode")
+ })
}
}
pub fn accept(&self) -> io::Result<(TcpStream, SocketAddr)> {
let (handle, ipaddr, port) = abi::tcplistener::accept(self.0.port())
- .map_err(|_| io::Error::new_const(ErrorKind::Unknown, &"accept failed"))?;
+ .map_err(|_| io::Error::new_const(ErrorKind::Uncategorized, &"accept failed"))?;
let saddr = match ipaddr {
Ipv4(ref addr) => SocketAddr::new(IpAddr::V4(Ipv4Addr::from(addr.0)), port),
Ipv6(ref addr) => SocketAddr::new(IpAddr::V6(Ipv6Addr::from(addr.0)), port),
_ => {
- return Err(io::Error::new_const(ErrorKind::Unknown, &"accept failed"));
+ return Err(io::Error::new_const(ErrorKind::Uncategorized, &"accept failed"));
}
};
unsafe { len = abi::write(1, data.as_ptr() as *const u8, data.len()) }
if len < 0 {
- Err(io::Error::new_const(io::ErrorKind::Unknown, &"Stdout is not able to print"))
+ Err(io::Error::new_const(io::ErrorKind::Uncategorized, &"Stdout is not able to print"))
} else {
Ok(len as usize)
}
unsafe { len = abi::write(1, data.as_ptr() as *const u8, data.len()) }
if len < 0 {
- Err(io::Error::new_const(io::ErrorKind::Unknown, &"Stdout is not able to print"))
+ Err(io::Error::new_const(io::ErrorKind::Uncategorized, &"Stdout is not able to print"))
} else {
Ok(len as usize)
}
unsafe { len = abi::write(2, data.as_ptr() as *const u8, data.len()) }
if len < 0 {
- Err(io::Error::new_const(io::ErrorKind::Unknown, &"Stderr is not able to print"))
+ Err(io::Error::new_const(io::ErrorKind::Uncategorized, &"Stderr is not able to print"))
} else {
Ok(len as usize)
}
unsafe { len = abi::write(2, data.as_ptr() as *const u8, data.len()) }
if len < 0 {
- Err(io::Error::new_const(io::ErrorKind::Unknown, &"Stderr is not able to print"))
+ Err(io::Error::new_const(io::ErrorKind::Uncategorized, &"Stderr is not able to print"))
} else {
Ok(len as usize)
}
// The thread failed to start and as a result p was not consumed. Therefore, it is
// safe to reconstruct the box so that it gets deallocated.
drop(Box::from_raw(p));
- Err(io::Error::new_const(io::ErrorKind::Unknown, &"Unable to create thread!"))
+ Err(io::Error::new_const(io::ErrorKind::Uncategorized, &"Unable to create thread!"))
} else {
Ok(Thread { tid: tid })
};
static SGX_INEFFECTIVE_ERROR: AtomicBool = AtomicBool::new(false);
if SGX_INEFFECTIVE_ERROR.load(Ordering::Relaxed) {
Err(crate::io::Error::new_const(
- ErrorKind::Unknown,
+ ErrorKind::Uncategorized,
&"operation can't be trusted to have any effect on SGX",
))
} else {
} else if code == Error::Interrupted as _ {
ErrorKind::Interrupted
} else if code == Error::Other as _ {
- ErrorKind::Unknown
+ ErrorKind::Uncategorized
} else if code == Error::UnexpectedEof as _ {
ErrorKind::UnexpectedEof
} else {
- ErrorKind::Unknown
+ ErrorKind::Uncategorized
}
}
impl LookupHost {
fn new(host: String) -> io::Result<LookupHost> {
- Err(io::Error::new(io::ErrorKind::Unknown, NonIpSockAddr { host }))
+ Err(io::Error::new(io::ErrorKind::Uncategorized, NonIpSockAddr { host }))
}
pub fn port(&self) -> u16 {
pub const STDIN_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE;
pub fn is_ebadf(err: &io::Error) -> bool {
- // FIXME: Rust normally maps Unix EBADF to `Unknown`
+ // FIXME: Rust normally maps Unix EBADF to `Uncategorized`
err.raw_os_error() == Some(abi::Error::BrokenPipe as _)
}
}))
} else {
Err(io::Error::new_const(
- io::ErrorKind::Unknown,
+ io::ErrorKind::Uncategorized,
&"creation time is not available for the filesystem",
))
};
// clause
x if x == libc::EAGAIN || x == libc::EWOULDBLOCK => ErrorKind::WouldBlock,
- _ => ErrorKind::Unknown,
+ _ => ErrorKind::Uncategorized,
}
}
str::from_utf8(CStr::from_ptr(libc::gai_strerror(err)).to_bytes()).unwrap().to_owned()
};
Err(io::Error::new(
- io::ErrorKind::Unknown,
+ io::ErrorKind::Uncategorized,
&format!("failed to lookup address information: {}", detail)[..],
))
}
if pollfd.revents & libc::POLLHUP != 0 {
let e = self.take_error()?.unwrap_or_else(|| {
io::Error::new_const(
- io::ErrorKind::Unknown,
+ io::ErrorKind::Uncategorized,
&"no error set after POLLHUP",
)
});
))?;
if path_len <= 1 {
return Err(io::Error::new_const(
- io::ErrorKind::Unknown,
+ io::ErrorKind::Uncategorized,
&"KERN_PROC_PATHNAME sysctl returned zero-length string",
));
}
return crate::fs::read_link(curproc_exe);
}
Err(io::Error::new_const(
- io::ErrorKind::Unknown,
+ io::ErrorKind::Uncategorized,
&"/proc/curproc/exe doesn't point to regular file.",
))
}
cvt(libc::sysctl(mib, 4, argv.as_mut_ptr() as *mut _, &mut argv_len, ptr::null_mut(), 0))?;
argv.set_len(argv_len as usize);
if argv[0].is_null() {
- return Err(io::Error::new_const(io::ErrorKind::Unknown, &"no current exe available"));
+ return Err(io::Error::new_const(
+ io::ErrorKind::Uncategorized,
+ &"no current exe available",
+ ));
}
let argv0 = CStr::from_ptr(argv[0]).to_bytes();
if argv0[0] == b'.' || argv0.iter().any(|b| *b == b'/') {
pub fn current_exe() -> io::Result<PathBuf> {
match crate::fs::read_link("/proc/self/exe") {
Err(ref e) if e.kind() == io::ErrorKind::NotFound => Err(io::Error::new_const(
- io::ErrorKind::Unknown,
+ io::ErrorKind::Uncategorized,
&"no /proc/self/exe available. Is /proc mounted?",
)),
other => other,
_get_next_image_info(0, &mut cookie, &mut info, mem::size_of::<image_info>() as i32);
if result != 0 {
use crate::io::ErrorKind;
- Err(io::Error::new_const(ErrorKind::Unknown, &"Error getting executable path"))
+ Err(io::Error::new_const(ErrorKind::Uncategorized, &"Error getting executable path"))
} else {
let name = CStr::from_ptr(info.name.as_ptr()).to_bytes();
Ok(PathBuf::from(OsStr::from_bytes(name)))
}
pub fn decode_error_kind(_code: i32) -> crate::io::ErrorKind {
- crate::io::ErrorKind::Unknown
+ crate::io::ErrorKind::Uncategorized
}
pub fn abort_internal() -> ! {
through which {:?} could be opened",
p
);
- return Err(io::Error::new(io::ErrorKind::Unknown, msg));
+ return Err(io::Error::new(io::ErrorKind::Uncategorized, msg));
}
let relative = CStr::from_ptr(relative_path).to_bytes().to_vec();
}
pub fn osstr2str(f: &OsStr) -> io::Result<&str> {
- f.to_str().ok_or_else(|| io::Error::new_const(io::ErrorKind::Unknown, &"input must be utf-8"))
+ f.to_str()
+ .ok_or_else(|| io::Error::new_const(io::ErrorKind::Uncategorized, &"input must be utf-8"))
}
pub fn copy(from: &Path, to: &Path) -> io::Result<u64> {
pub fn decode_error_kind(errno: i32) -> std_io::ErrorKind {
use std_io::ErrorKind::*;
if errno > u16::MAX as i32 || errno < 0 {
- return Unknown;
+ return Uncategorized;
}
match errno as u16 {
wasi::ERRNO_CONNREFUSED => ConnectionRefused,
wasi::ERRNO_AGAIN => WouldBlock,
wasi::ERRNO_NOSYS => Unsupported,
wasi::ERRNO_NOMEM => OutOfMemory,
- _ => Unknown,
+ _ => Uncategorized,
}
}
}
_ => {
return Err(io::Error::new_const(
- io::ErrorKind::Unknown,
+ io::ErrorKind::Uncategorized,
&"Unsupported reparse point type",
));
}
c::WSAEWOULDBLOCK => ErrorKind::WouldBlock,
c::WSAETIMEDOUT => ErrorKind::TimedOut,
- _ => ErrorKind::Unknown,
+ _ => ErrorKind::Uncategorized,
}
}
// run-pass
-#![feature(io_error_unknown)]
+#![feature(io_error_uncategorized)]
use std::fmt;
use std::io::{self, Error, Write, sink};
struct ErrorWriter;
-const FORMAT_ERROR: io::ErrorKind = io::ErrorKind::Unknown;
+const FORMAT_ERROR: io::ErrorKind = io::ErrorKind::Uncategorized;
const WRITER_ERROR: io::ErrorKind = io::ErrorKind::NotConnected;
impl Write for ErrorWriter {