blob: aabd45f8ce7979d9a74abbe4d0c75cba81372996 [file] [log] [blame]
//! The `rustix` `Errno` type.
//!
//! This type holds an OS error code, which conceptually corresponds to an
//! `errno` value.
use crate::backend::c;
use libc_errno::errno;
/// The error type for `rustix` APIs.
///
/// This is similar to `std::io::Error`, but only holds an OS error code,
/// and no extra error value.
#[repr(transparent)]
#[doc(alias = "errno")]
#[derive(Eq, PartialEq, Hash, Copy, Clone)]
pub struct Errno(pub(crate) c::c_int);
impl Errno {
/// `EACCES`
#[doc(alias = "ACCES")]
pub const ACCESS: Self = Self(c::EACCES);
/// `EADDRINUSE`
pub const ADDRINUSE: Self = Self(c::EADDRINUSE);
/// `EADDRNOTAVAIL`
pub const ADDRNOTAVAIL: Self = Self(c::EADDRNOTAVAIL);
/// `EADV`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const ADV: Self = Self(c::EADV);
/// `EAFNOSUPPORT`
#[cfg(not(target_os = "l4re"))]
pub const AFNOSUPPORT: Self = Self(c::EAFNOSUPPORT);
/// `EAGAIN`
pub const AGAIN: Self = Self(c::EAGAIN);
/// `EALREADY`
#[cfg(not(target_os = "l4re"))]
pub const ALREADY: Self = Self(c::EALREADY);
/// `EAUTH`
#[cfg(bsd)]
pub const AUTH: Self = Self(c::EAUTH);
/// `EBADE`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const BADE: Self = Self(c::EBADE);
/// `EBADF`
pub const BADF: Self = Self(c::EBADF);
/// `EBADFD`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const BADFD: Self = Self(c::EBADFD);
/// `EBADMSG`
#[cfg(not(any(windows, target_os = "l4re")))]
pub const BADMSG: Self = Self(c::EBADMSG);
/// `EBADR`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const BADR: Self = Self(c::EBADR);
/// `EBADRPC`
#[cfg(bsd)]
pub const BADRPC: Self = Self(c::EBADRPC);
/// `EBADRQC`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const BADRQC: Self = Self(c::EBADRQC);
/// `EBADSLT`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const BADSLT: Self = Self(c::EBADSLT);
/// `EBFONT`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const BFONT: Self = Self(c::EBFONT);
/// `EBUSY`
#[cfg(not(windows))]
pub const BUSY: Self = Self(c::EBUSY);
/// `ECANCELED`
#[cfg(not(target_os = "l4re"))]
pub const CANCELED: Self = Self(c::ECANCELED);
/// `ECAPMODE`
#[cfg(target_os = "freebsd")]
pub const CAPMODE: Self = Self(c::ECAPMODE);
/// `ECHILD`
#[cfg(not(windows))]
pub const CHILD: Self = Self(c::ECHILD);
/// `ECHRNG`
#[cfg(not(any(
bsd,
windows,
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const CHRNG: Self = Self(c::ECHRNG);
/// `ECOMM`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const COMM: Self = Self(c::ECOMM);
/// `ECONNABORTED`
pub const CONNABORTED: Self = Self(c::ECONNABORTED);
/// `ECONNREFUSED`
pub const CONNREFUSED: Self = Self(c::ECONNREFUSED);
/// `ECONNRESET`
pub const CONNRESET: Self = Self(c::ECONNRESET);
/// `EDEADLK`
#[cfg(not(windows))]
pub const DEADLK: Self = Self(c::EDEADLK);
/// `EDEADLOCK`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "android",
target_os = "espidf",
target_os = "haiku",
target_os = "wasi",
)))]
pub const DEADLOCK: Self = Self(c::EDEADLOCK);
/// `EDESTADDRREQ`
#[cfg(not(target_os = "l4re"))]
pub const DESTADDRREQ: Self = Self(c::EDESTADDRREQ);
/// `EDISCON`
#[cfg(windows)]
pub const DISCON: Self = Self(c::EDISCON);
/// `EDOM`
#[cfg(not(windows))]
pub const DOM: Self = Self(c::EDOM);
/// `EDOOFUS`
#[cfg(freebsdlike)]
pub const DOOFUS: Self = Self(c::EDOOFUS);
/// `EDOTDOT`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const DOTDOT: Self = Self(c::EDOTDOT);
/// `EDQUOT`
pub const DQUOT: Self = Self(c::EDQUOT);
/// `EEXIST`
#[cfg(not(windows))]
pub const EXIST: Self = Self(c::EEXIST);
/// `EFAULT`
pub const FAULT: Self = Self(c::EFAULT);
/// `EFBIG`
#[cfg(not(windows))]
pub const FBIG: Self = Self(c::EFBIG);
/// `EFTYPE`
#[cfg(any(bsd, target_env = "newlib"))]
pub const FTYPE: Self = Self(c::EFTYPE);
/// `EHOSTDOWN`
#[cfg(not(any(target_os = "l4re", target_os = "wasi")))]
pub const HOSTDOWN: Self = Self(c::EHOSTDOWN);
/// `EHOSTUNREACH`
pub const HOSTUNREACH: Self = Self(c::EHOSTUNREACH);
/// `EHWPOISON`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "android",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "redox",
target_os = "wasi",
)))]
pub const HWPOISON: Self = Self(c::EHWPOISON);
/// `EIDRM`
#[cfg(not(any(windows, target_os = "l4re")))]
pub const IDRM: Self = Self(c::EIDRM);
/// `EILSEQ`
#[cfg(not(any(windows, target_os = "l4re")))]
pub const ILSEQ: Self = Self(c::EILSEQ);
/// `EINPROGRESS`
#[cfg(not(target_os = "l4re"))]
pub const INPROGRESS: Self = Self(c::EINPROGRESS);
/// `EINTR`
///
/// For a convenient way to retry system calls that exit with `INTR`, use
/// [`retry_on_intr`].
///
/// [`retry_on_intr`]: crate::io::retry_on_intr
pub const INTR: Self = Self(c::EINTR);
/// `EINVAL`
pub const INVAL: Self = Self(c::EINVAL);
/// `EINVALIDPROCTABLE`
#[cfg(windows)]
pub const INVALIDPROCTABLE: Self = Self(c::EINVALIDPROCTABLE);
/// `EINVALIDPROVIDER`
#[cfg(windows)]
pub const INVALIDPROVIDER: Self = Self(c::EINVALIDPROVIDER);
/// `EIO`
#[cfg(not(windows))]
pub const IO: Self = Self(c::EIO);
/// `EISCONN`
#[cfg(not(target_os = "l4re"))]
pub const ISCONN: Self = Self(c::EISCONN);
/// `EISDIR`
#[cfg(not(windows))]
pub const ISDIR: Self = Self(c::EISDIR);
/// `EISNAM`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const ISNAM: Self = Self(c::EISNAM);
/// `EKEYEXPIRED`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const KEYEXPIRED: Self = Self(c::EKEYEXPIRED);
/// `EKEYREJECTED`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const KEYREJECTED: Self = Self(c::EKEYREJECTED);
/// `EKEYREVOKED`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const KEYREVOKED: Self = Self(c::EKEYREVOKED);
/// `EL2HLT`
#[cfg(not(any(
bsd,
windows,
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const L2HLT: Self = Self(c::EL2HLT);
/// `EL2NSYNC`
#[cfg(not(any(
bsd,
windows,
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const L2NSYNC: Self = Self(c::EL2NSYNC);
/// `EL3HLT`
#[cfg(not(any(
bsd,
windows,
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const L3HLT: Self = Self(c::EL3HLT);
/// `EL3RST`
#[cfg(not(any(
bsd,
windows,
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const L3RST: Self = Self(c::EL3RST);
/// `ELIBACC`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const LIBACC: Self = Self(c::ELIBACC);
/// `ELIBBAD`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const LIBBAD: Self = Self(c::ELIBBAD);
/// `ELIBEXEC`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const LIBEXEC: Self = Self(c::ELIBEXEC);
/// `ELIBMAX`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const LIBMAX: Self = Self(c::ELIBMAX);
/// `ELIBSCN`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const LIBSCN: Self = Self(c::ELIBSCN);
/// `ELNRNG`
#[cfg(not(any(
bsd,
windows,
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const LNRNG: Self = Self(c::ELNRNG);
/// `ELOOP`
pub const LOOP: Self = Self(c::ELOOP);
/// `EMEDIUMTYPE`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const MEDIUMTYPE: Self = Self(c::EMEDIUMTYPE);
/// `EMFILE`
pub const MFILE: Self = Self(c::EMFILE);
/// `EMLINK`
#[cfg(not(windows))]
pub const MLINK: Self = Self(c::EMLINK);
/// `EMSGSIZE`
#[cfg(not(target_os = "l4re"))]
pub const MSGSIZE: Self = Self(c::EMSGSIZE);
/// `EMULTIHOP`
#[cfg(not(any(windows, target_os = "l4re", target_os = "openbsd")))]
pub const MULTIHOP: Self = Self(c::EMULTIHOP);
/// `ENAMETOOLONG`
pub const NAMETOOLONG: Self = Self(c::ENAMETOOLONG);
/// `ENAVAIL`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const NAVAIL: Self = Self(c::ENAVAIL);
/// `ENEEDAUTH`
#[cfg(bsd)]
pub const NEEDAUTH: Self = Self(c::ENEEDAUTH);
/// `ENETDOWN`
pub const NETDOWN: Self = Self(c::ENETDOWN);
/// `ENETRESET`
#[cfg(not(target_os = "l4re"))]
pub const NETRESET: Self = Self(c::ENETRESET);
/// `ENETUNREACH`
pub const NETUNREACH: Self = Self(c::ENETUNREACH);
/// `ENFILE`
#[cfg(not(windows))]
pub const NFILE: Self = Self(c::ENFILE);
/// `ENOANO`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const NOANO: Self = Self(c::ENOANO);
/// `ENOATTR`
#[cfg(any(bsd, target_os = "haiku"))]
pub const NOATTR: Self = Self(c::ENOATTR);
/// `ENOBUFS`
#[cfg(not(target_os = "l4re"))]
pub const NOBUFS: Self = Self(c::ENOBUFS);
/// `ENOCSI`
#[cfg(not(any(
bsd,
windows,
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const NOCSI: Self = Self(c::ENOCSI);
/// `ENODATA`
#[cfg(not(any(
freebsdlike,
windows,
target_os = "haiku",
target_os = "openbsd",
target_os = "wasi",
)))]
pub const NODATA: Self = Self(c::ENODATA);
/// `ENODEV`
#[cfg(not(windows))]
pub const NODEV: Self = Self(c::ENODEV);
/// `ENOENT`
#[cfg(not(windows))]
pub const NOENT: Self = Self(c::ENOENT);
/// `ENOEXEC`
#[cfg(not(windows))]
pub const NOEXEC: Self = Self(c::ENOEXEC);
/// `ENOKEY`
#[cfg(not(any(
solarish,
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const NOKEY: Self = Self(c::ENOKEY);
/// `ENOLCK`
#[cfg(not(any(windows, target_os = "l4re")))]
pub const NOLCK: Self = Self(c::ENOLCK);
/// `ENOLINK`
#[cfg(not(any(windows, target_os = "l4re", target_os = "openbsd")))]
pub const NOLINK: Self = Self(c::ENOLINK);
/// `ENOMEDIUM`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const NOMEDIUM: Self = Self(c::ENOMEDIUM);
/// `ENOMEM`
#[cfg(not(windows))]
pub const NOMEM: Self = Self(c::ENOMEM);
/// `ENOMORE`
#[cfg(windows)]
pub const NOMORE: Self = Self(c::ENOMORE);
/// `ENOMSG`
#[cfg(not(any(windows, target_os = "l4re")))]
pub const NOMSG: Self = Self(c::ENOMSG);
/// `ENONET`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const NONET: Self = Self(c::ENONET);
/// `ENOPKG`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const NOPKG: Self = Self(c::ENOPKG);
/// `ENOPROTOOPT`
#[cfg(not(target_os = "l4re"))]
pub const NOPROTOOPT: Self = Self(c::ENOPROTOOPT);
/// `ENOSPC`
#[cfg(not(windows))]
pub const NOSPC: Self = Self(c::ENOSPC);
/// `ENOSR`
#[cfg(not(any(
freebsdlike,
windows,
target_os = "haiku",
target_os = "l4re",
target_os = "openbsd",
target_os = "wasi",
)))]
pub const NOSR: Self = Self(c::ENOSR);
/// `ENOSTR`
#[cfg(not(any(
freebsdlike,
windows,
target_os = "haiku",
target_os = "l4re",
target_os = "openbsd",
target_os = "wasi",
)))]
pub const NOSTR: Self = Self(c::ENOSTR);
/// `ENOSYS`
#[cfg(not(windows))]
pub const NOSYS: Self = Self(c::ENOSYS);
/// `ENOTBLK`
#[cfg(not(any(windows, target_os = "espidf", target_os = "haiku", target_os = "wasi")))]
pub const NOTBLK: Self = Self(c::ENOTBLK);
/// `ENOTCAPABLE`
#[cfg(any(target_os = "freebsd", target_os = "wasi"))]
pub const NOTCAPABLE: Self = Self(c::ENOTCAPABLE);
/// `ENOTCONN`
pub const NOTCONN: Self = Self(c::ENOTCONN);
/// `ENOTDIR`
#[cfg(not(windows))]
pub const NOTDIR: Self = Self(c::ENOTDIR);
/// `ENOTEMPTY`
pub const NOTEMPTY: Self = Self(c::ENOTEMPTY);
/// `ENOTNAM`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const NOTNAM: Self = Self(c::ENOTNAM);
/// `ENOTRECOVERABLE`
#[cfg(not(any(
freebsdlike,
netbsdlike,
windows,
target_os = "haiku",
target_os = "l4re"
)))]
pub const NOTRECOVERABLE: Self = Self(c::ENOTRECOVERABLE);
/// `ENOTSOCK`
#[cfg(not(target_os = "l4re"))]
pub const NOTSOCK: Self = Self(c::ENOTSOCK);
/// `ENOTSUP`
#[cfg(not(any(windows, target_os = "haiku", target_os = "redox")))]
pub const NOTSUP: Self = Self(c::ENOTSUP);
/// `ENOTTY`
#[cfg(not(windows))]
pub const NOTTY: Self = Self(c::ENOTTY);
/// `ENOTUNIQ`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const NOTUNIQ: Self = Self(c::ENOTUNIQ);
/// `ENXIO`
#[cfg(not(windows))]
pub const NXIO: Self = Self(c::ENXIO);
/// `EOPNOTSUPP`
pub const OPNOTSUPP: Self = Self(c::EOPNOTSUPP);
/// `EOVERFLOW`
#[cfg(not(any(windows, target_os = "l4re")))]
pub const OVERFLOW: Self = Self(c::EOVERFLOW);
/// `EOWNERDEAD`
#[cfg(not(any(
freebsdlike,
netbsdlike,
windows,
target_os = "haiku",
target_os = "l4re"
)))]
pub const OWNERDEAD: Self = Self(c::EOWNERDEAD);
/// `EPERM`
#[cfg(not(windows))]
pub const PERM: Self = Self(c::EPERM);
/// `EPFNOSUPPORT`
#[cfg(not(any(target_os = "l4re", target_os = "wasi")))]
pub const PFNOSUPPORT: Self = Self(c::EPFNOSUPPORT);
/// `EPIPE`
#[cfg(not(windows))]
pub const PIPE: Self = Self(c::EPIPE);
/// `EPROCLIM`
#[cfg(bsd)]
pub const PROCLIM: Self = Self(c::EPROCLIM);
/// `EPROCUNAVAIL`
#[cfg(bsd)]
pub const PROCUNAVAIL: Self = Self(c::EPROCUNAVAIL);
/// `EPROGMISMATCH`
#[cfg(bsd)]
pub const PROGMISMATCH: Self = Self(c::EPROGMISMATCH);
/// `EPROGUNAVAIL`
#[cfg(bsd)]
pub const PROGUNAVAIL: Self = Self(c::EPROGUNAVAIL);
/// `EPROTO`
#[cfg(not(any(windows, target_os = "l4re")))]
pub const PROTO: Self = Self(c::EPROTO);
/// `EPROTONOSUPPORT`
#[cfg(not(target_os = "l4re"))]
pub const PROTONOSUPPORT: Self = Self(c::EPROTONOSUPPORT);
/// `EPROTOTYPE`
#[cfg(not(target_os = "l4re"))]
pub const PROTOTYPE: Self = Self(c::EPROTOTYPE);
/// `EPROVIDERFAILEDINIT`
#[cfg(windows)]
pub const PROVIDERFAILEDINIT: Self = Self(c::EPROVIDERFAILEDINIT);
/// `ERANGE`
#[cfg(not(windows))]
pub const RANGE: Self = Self(c::ERANGE);
/// `EREFUSED`
#[cfg(windows)]
pub const REFUSED: Self = Self(c::EREFUSED);
/// `EREMCHG`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const REMCHG: Self = Self(c::EREMCHG);
/// `EREMOTE`
#[cfg(not(any(
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const REMOTE: Self = Self(c::EREMOTE);
/// `EREMOTEIO`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const REMOTEIO: Self = Self(c::EREMOTEIO);
/// `ERESTART`
#[cfg(not(any(
bsd,
windows,
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const RESTART: Self = Self(c::ERESTART);
/// `ERFKILL`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "android",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "redox",
target_os = "wasi",
)))]
pub const RFKILL: Self = Self(c::ERFKILL);
/// `EROFS`
#[cfg(not(windows))]
pub const ROFS: Self = Self(c::EROFS);
/// `ERPCMISMATCH`
#[cfg(bsd)]
pub const RPCMISMATCH: Self = Self(c::ERPCMISMATCH);
/// `ESHUTDOWN`
#[cfg(not(any(target_os = "espidf", target_os = "l4re", target_os = "wasi")))]
pub const SHUTDOWN: Self = Self(c::ESHUTDOWN);
/// `ESOCKTNOSUPPORT`
#[cfg(not(any(
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const SOCKTNOSUPPORT: Self = Self(c::ESOCKTNOSUPPORT);
/// `ESPIPE`
#[cfg(not(windows))]
pub const SPIPE: Self = Self(c::ESPIPE);
/// `ESRCH`
#[cfg(not(windows))]
pub const SRCH: Self = Self(c::ESRCH);
/// `ESRMNT`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const SRMNT: Self = Self(c::ESRMNT);
/// `ESTALE`
pub const STALE: Self = Self(c::ESTALE);
/// `ESTRPIPE`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const STRPIPE: Self = Self(c::ESTRPIPE);
/// `ETIME`
#[cfg(not(any(
freebsdlike,
windows,
target_os = "l4re",
target_os = "openbsd",
target_os = "wasi"
)))]
pub const TIME: Self = Self(c::ETIME);
/// `ETIMEDOUT`
pub const TIMEDOUT: Self = Self(c::ETIMEDOUT);
/// `E2BIG`
#[cfg(not(windows))]
#[doc(alias = "2BIG")]
pub const TOOBIG: Self = Self(c::E2BIG);
/// `ETOOMANYREFS`
#[cfg(not(any(target_os = "haiku", target_os = "l4re", target_os = "wasi")))]
pub const TOOMANYREFS: Self = Self(c::ETOOMANYREFS);
/// `ETXTBSY`
#[cfg(not(windows))]
pub const TXTBSY: Self = Self(c::ETXTBSY);
/// `EUCLEAN`
#[cfg(not(any(
bsd,
solarish,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "nto",
target_os = "wasi",
)))]
pub const UCLEAN: Self = Self(c::EUCLEAN);
/// `EUNATCH`
#[cfg(not(any(
bsd,
windows,
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const UNATCH: Self = Self(c::EUNATCH);
/// `EUSERS`
#[cfg(not(any(
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi"
)))]
pub const USERS: Self = Self(c::EUSERS);
/// `EWOULDBLOCK`
pub const WOULDBLOCK: Self = Self(c::EWOULDBLOCK);
/// `EXDEV`
#[cfg(not(windows))]
pub const XDEV: Self = Self(c::EXDEV);
/// `EXFULL`
#[cfg(not(any(
bsd,
windows,
target_os = "aix",
target_os = "espidf",
target_os = "haiku",
target_os = "l4re",
target_os = "wasi",
)))]
pub const XFULL: Self = Self(c::EXFULL);
}
impl Errno {
/// Extract an `Errno` value from a `std::io::Error`.
///
/// This isn't a `From` conversion because it's expected to be relatively
/// uncommon.
#[cfg(feature = "std")]
#[inline]
pub fn from_io_error(io_err: &std::io::Error) -> Option<Self> {
io_err
.raw_os_error()
.and_then(|raw| if raw != 0 { Some(Self(raw)) } else { None })
}
/// Extract the raw OS error number from this error.
#[inline]
pub const fn raw_os_error(self) -> i32 {
self.0
}
/// Construct an `Errno` from a raw OS error number.
#[inline]
pub const fn from_raw_os_error(raw: i32) -> Self {
Self(raw)
}
pub(crate) fn last_os_error() -> Self {
Self(errno().0)
}
}