From 9154f8b22c56c071e78e1f3d706fd75f43ff218c Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Wed, 3 Aug 2022 10:39:43 -0400 Subject: [PATCH] Add additional raw error mappings for the nightly `io_error_more` feature Some crates are using nightly and failing when mapping these errors, for example : ``` error: unsupported operation: io error NotADirectory cannot be translated into a raw os error --> /root/.rustup/toolchains/miri/lib/rustlib/src/rust/library/std/src/sys/unix/fs.rs:1203:19 ``` --- src/helpers.rs | 47 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/src/helpers.rs b/src/helpers.rs index acc2367afa2..ee2c39b5115 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -23,26 +23,49 @@ impl<'mir, 'tcx: 'mir> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {} +// This mapping is the reverse of `decode_error_kind` in +// +// and should be kept in sync. const UNIX_IO_ERROR_TABLE: &[(std::io::ErrorKind, &str)] = { use std::io::ErrorKind::*; &[ + (ArgumentListTooLong, "E2BIG"), + (AddrInUse, "EADDRINUSE"), + (AddrNotAvailable, "EADDRNOTAVAIL"), + (ResourceBusy, "EBUSY"), + (ConnectionAborted, "ECONNABORTED"), (ConnectionRefused, "ECONNREFUSED"), (ConnectionReset, "ECONNRESET"), - (PermissionDenied, "EPERM"), - (BrokenPipe, "EPIPE"), - (NotConnected, "ENOTCONN"), - (ConnectionAborted, "ECONNABORTED"), - (AddrNotAvailable, "EADDRNOTAVAIL"), - (AddrInUse, "EADDRINUSE"), - (NotFound, "ENOENT"), + (Deadlock, "EDEADLK"), + (FilesystemQuotaExceeded, "EDQUOT"), + (AlreadyExists, "EEXIST"), + (FileTooLarge, "EFBIG"), + (HostUnreachable, "EHOSTUNREACH"), (Interrupted, "EINTR"), (InvalidInput, "EINVAL"), - (InvalidFilename, "ENAMETOOLONG"), - (TimedOut, "ETIMEDOUT"), - (AlreadyExists, "EEXIST"), - (WouldBlock, "EWOULDBLOCK"), - (DirectoryNotEmpty, "ENOTEMPTY"), + (IsADirectory, "EISDIR"), (FilesystemLoop, "ELOOP"), + (NotFound, "ENOENT"), + (OutOfMemory, "ENOMEM"), + (StorageFull, "ENOSPC"), + (Unsupported, "ENOSYS"), + (TooManyLinks, "EMLINK"), + (InvalidFilename, "ENAMETOOLONG"), + (NetworkDown, "ENETDOWN"), + (NetworkUnreachable, "ENETUNREACH"), + (NotConnected, "ENOTCONN"), + (NotADirectory, "ENOTDIR"), + (DirectoryNotEmpty, "ENOTEMPTY"), + (BrokenPipe, "EPIPE"), + (ReadOnlyFilesystem, "EROFS"), + (NotSeekable, "ESPIPE"), + (StaleNetworkFileHandle, "ESTALE"), + (TimedOut, "ETIMEDOUT"), + (ExecutableFileBusy, "ETXTBSY"), + (CrossesDevices, "EXDEV"), + // The following have two valid options...we pick one. + (PermissionDenied, "EPERM"), + (WouldBlock, "EWOULDBLOCK"), ] };