nix/
errno.rs

1//! Safe wrappers around errno functions
2//!
3//! # Example
4//! ```
5//! use nix::errno::Errno;
6//!
7//! Errno::EIO.set();
8//! assert_eq!(Errno::last(), Errno::EIO);
9//!
10//! Errno::clear();
11//! assert_eq!(Errno::last(), Errno::from_raw(0));
12//! ```
13
14use crate::Result;
15use cfg_if::cfg_if;
16use libc::{c_int, c_void};
17use std::{error, fmt, io};
18
19pub use self::consts::*;
20
21cfg_if! {
22    if #[cfg(any(target_os = "freebsd",
23                 apple_targets,))] {
24        unsafe fn errno_location() -> *mut c_int {
25            unsafe { libc::__error() }
26        }
27    } else if #[cfg(any(target_os = "android", netbsdlike))] {
28        unsafe fn errno_location() -> *mut c_int {
29            unsafe { libc::__errno() }
30        }
31    } else if #[cfg(any(target_os = "linux",
32                        target_os = "redox",
33                        target_os = "dragonfly",
34                        target_os = "fuchsia",
35                        target_os = "hurd"))] {
36        unsafe fn errno_location() -> *mut c_int {
37            unsafe { libc::__errno_location() }
38        }
39    } else if #[cfg(solarish)] {
40        unsafe fn errno_location() -> *mut c_int {
41            unsafe { libc::___errno() }
42        }
43    } else if #[cfg(any(target_os = "haiku",))] {
44        unsafe fn errno_location() -> *mut c_int {
45            unsafe { libc::_errnop() }
46        }
47    } else if #[cfg(any(target_os = "aix"))] {
48        unsafe fn errno_location() -> *mut c_int {
49            unsafe { libc::_Errno() }
50        }
51    }
52}
53
54/// Returns the platform-specific value of errno
55#[deprecated(since = "0.28.0", note = "please use `Errno::last_raw()` instead")]
56pub fn errno() -> i32 {
57    Errno::last_raw()
58}
59
60impl Errno {
61    /// Returns the current value of errno
62    pub fn last() -> Self {
63        Self::from_raw(Self::last_raw())
64    }
65
66    /// Returns the current raw i32 value of errno
67    pub fn last_raw() -> i32 {
68        unsafe { *errno_location() }
69    }
70
71    /// Sets the value of errno.
72    ///
73    /// # Example
74    /// ```
75    /// use nix::errno::Errno;
76    ///
77    /// Errno::EIO.set();
78    ///
79    /// assert_eq!(Errno::last(), Errno::EIO);
80    /// ```
81    pub fn set(self) {
82        Self::set_raw(self as i32)
83    }
84
85    /// Sets the raw i32 value of errno.
86    pub fn set_raw(errno: i32) {
87        // Safe because errno is a thread-local variable
88        unsafe {
89            *errno_location() = errno;
90        }
91    }
92
93    #[deprecated(
94        since = "0.28.0",
95        note = "please use `Errno::from_raw()` instead"
96    )]
97    pub const fn from_i32(err: i32) -> Errno {
98        Self::from_raw(err)
99    }
100
101    pub const fn from_raw(err: i32) -> Errno {
102        #[allow(deprecated)]
103        from_i32(err)
104    }
105
106    pub fn desc(self) -> &'static str {
107        desc(self)
108    }
109
110    /// Sets the platform-specific errno to no-error
111    ///
112    /// ```
113    /// use nix::errno::Errno;
114    ///
115    /// Errno::EIO.set();
116    ///
117    /// Errno::clear();
118    ///
119    /// let err = Errno::last();
120    /// assert_ne!(err, Errno::EIO);
121    /// assert_eq!(err, Errno::from_raw(0));
122    /// ```
123    pub fn clear() {
124        Self::set_raw(0)
125    }
126
127    /// Returns `Ok(value)` if it does not contain the sentinel value. This
128    /// should not be used when `-1` is not the errno sentinel value.
129    #[inline]
130    pub fn result<S: ErrnoSentinel + PartialEq<S>>(value: S) -> Result<S> {
131        if value == S::sentinel() {
132            Err(Self::last())
133        } else {
134            Ok(value)
135        }
136    }
137}
138
139/// The sentinel value indicates that a function failed and more detailed
140/// information about the error can be found in `errno`
141pub trait ErrnoSentinel: Sized {
142    fn sentinel() -> Self;
143}
144
145impl ErrnoSentinel for isize {
146    fn sentinel() -> Self {
147        -1
148    }
149}
150
151impl ErrnoSentinel for i32 {
152    fn sentinel() -> Self {
153        -1
154    }
155}
156
157impl ErrnoSentinel for i64 {
158    fn sentinel() -> Self {
159        -1
160    }
161}
162
163impl ErrnoSentinel for *mut c_void {
164    fn sentinel() -> Self {
165        -1isize as *mut c_void
166    }
167}
168
169impl ErrnoSentinel for libc::sighandler_t {
170    fn sentinel() -> Self {
171        libc::SIG_ERR
172    }
173}
174
175impl error::Error for Errno {}
176
177impl fmt::Display for Errno {
178    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
179        write!(f, "{:?}: {}", self, self.desc())
180    }
181}
182
183impl From<Errno> for io::Error {
184    fn from(err: Errno) -> Self {
185        io::Error::from_raw_os_error(err as i32)
186    }
187}
188
189impl TryFrom<io::Error> for Errno {
190    type Error = io::Error;
191
192    fn try_from(ioerror: io::Error) -> std::result::Result<Self, io::Error> {
193        ioerror.raw_os_error().map(Errno::from_raw).ok_or(ioerror)
194    }
195}
196
197fn desc(errno: Errno) -> &'static str {
198    use self::Errno::*;
199    match errno {
200        UnknownErrno => "Unknown errno",
201        EPERM => "Operation not permitted",
202        ENOENT => "No such file or directory",
203        ESRCH => "No such process",
204        EINTR => "Interrupted system call",
205        EIO => "I/O error",
206        ENXIO => "No such device or address",
207        E2BIG => "Argument list too long",
208        ENOEXEC => "Exec format error",
209        EBADF => "Bad file number",
210        ECHILD => "No child processes",
211        EAGAIN => "Try again",
212        ENOMEM => "Out of memory",
213        EACCES => "Permission denied",
214        EFAULT => "Bad address",
215        #[cfg(not(target_os = "haiku"))]
216        ENOTBLK => "Block device required",
217        EBUSY => "Device or resource busy",
218        EEXIST => "File exists",
219        EXDEV => "Cross-device link",
220        ENODEV => "No such device",
221        ENOTDIR => "Not a directory",
222        EISDIR => "Is a directory",
223        EINVAL => "Invalid argument",
224        ENFILE => "File table overflow",
225        EMFILE => "Too many open files",
226        ENOTTY => "Not a typewriter",
227        ETXTBSY => "Text file busy",
228        EFBIG => "File too large",
229        ENOSPC => "No space left on device",
230        ESPIPE => "Illegal seek",
231        EROFS => "Read-only file system",
232        EMLINK => "Too many links",
233        EPIPE => "Broken pipe",
234        EDOM => "Math argument out of domain of func",
235        ERANGE => "Math result not representable",
236        EDEADLK => "Resource deadlock would occur",
237        ENAMETOOLONG => "File name too long",
238        ENOLCK => "No record locks available",
239        ENOSYS => "Function not implemented",
240        ENOTEMPTY => "Directory not empty",
241        ELOOP => "Too many symbolic links encountered",
242        ENOMSG => "No message of desired type",
243        EIDRM => "Identifier removed",
244        EINPROGRESS => "Operation now in progress",
245        EALREADY => "Operation already in progress",
246        ENOTSOCK => "Socket operation on non-socket",
247        EDESTADDRREQ => "Destination address required",
248        EMSGSIZE => "Message too long",
249        EPROTOTYPE => "Protocol wrong type for socket",
250        ENOPROTOOPT => "Protocol not available",
251        EPROTONOSUPPORT => "Protocol not supported",
252        #[cfg(not(target_os = "haiku"))]
253        ESOCKTNOSUPPORT => "Socket type not supported",
254        #[cfg(not(target_os = "haiku"))]
255        EPFNOSUPPORT => "Protocol family not supported",
256        #[cfg(not(target_os = "haiku"))]
257        EAFNOSUPPORT => "Address family not supported by protocol",
258        EADDRINUSE => "Address already in use",
259        EADDRNOTAVAIL => "Cannot assign requested address",
260        ENETDOWN => "Network is down",
261        ENETUNREACH => "Network is unreachable",
262        ENETRESET => "Network dropped connection because of reset",
263        ECONNABORTED => "Software caused connection abort",
264        ECONNRESET => "Connection reset by peer",
265        ENOBUFS => "No buffer space available",
266        EISCONN => "Transport endpoint is already connected",
267        ENOTCONN => "Transport endpoint is not connected",
268        ESHUTDOWN => "Cannot send after transport endpoint shutdown",
269        #[cfg(not(target_os = "haiku"))]
270        ETOOMANYREFS => "Too many references: cannot splice",
271        ETIMEDOUT => "Connection timed out",
272        ECONNREFUSED => "Connection refused",
273        EHOSTDOWN => "Host is down",
274        EHOSTUNREACH => "No route to host",
275
276        #[cfg(any(
277            linux_android,
278            solarish,
279            target_os = "aix",
280            target_os = "fuchsia"
281        ))]
282        ECHRNG => "Channel number out of range",
283
284        #[cfg(any(
285            linux_android,
286            solarish,
287            target_os = "aix",
288            target_os = "fuchsia"
289        ))]
290        EL2NSYNC => "Level 2 not synchronized",
291
292        #[cfg(any(
293            linux_android,
294            solarish,
295            target_os = "aix",
296            target_os = "fuchsia"
297        ))]
298        EL3HLT => "Level 3 halted",
299
300        #[cfg(any(
301            linux_android,
302            solarish,
303            target_os = "aix",
304            target_os = "fuchsia"
305        ))]
306        EL3RST => "Level 3 reset",
307
308        #[cfg(any(
309            linux_android,
310            solarish,
311            target_os = "aix",
312            target_os = "fuchsia"
313        ))]
314        ELNRNG => "Link number out of range",
315
316        #[cfg(any(
317            linux_android,
318            solarish,
319            target_os = "aix",
320            target_os = "fuchsia"
321        ))]
322        EUNATCH => "Protocol driver not attached",
323
324        #[cfg(any(
325            linux_android,
326            solarish,
327            target_os = "aix",
328            target_os = "fuchsia"
329        ))]
330        ENOCSI => "No CSI structure available",
331
332        #[cfg(any(
333            linux_android,
334            solarish,
335            target_os = "aix",
336            target_os = "fuchsia"
337        ))]
338        EL2HLT => "Level 2 halted",
339
340        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
341        EBADE => "Invalid exchange",
342
343        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
344        EBADR => "Invalid request descriptor",
345
346        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
347        EXFULL => "Exchange full",
348
349        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
350        ENOANO => "No anode",
351
352        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
353        EBADRQC => "Invalid request code",
354
355        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
356        EBADSLT => "Invalid slot",
357
358        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
359        EBFONT => "Bad font file format",
360
361        #[cfg(any(
362            linux_android,
363            solarish,
364            target_os = "fuchsia",
365            target_os = "hurd"
366        ))]
367        ENOSTR => "Device not a stream",
368
369        #[cfg(any(
370            linux_android,
371            solarish,
372            target_os = "fuchsia",
373            target_os = "hurd"
374        ))]
375        ENODATA => "No data available",
376
377        #[cfg(any(
378            linux_android,
379            solarish,
380            target_os = "fuchsia",
381            target_os = "hurd"
382        ))]
383        ETIME => "Timer expired",
384
385        #[cfg(any(
386            linux_android,
387            solarish,
388            target_os = "fuchsia",
389            target_os = "hurd"
390        ))]
391        ENOSR => "Out of streams resources",
392
393        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
394        ENONET => "Machine is not on the network",
395
396        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
397        ENOPKG => "Package not installed",
398
399        #[cfg(any(
400            linux_android,
401            solarish,
402            target_os = "fuchsia",
403            target_os = "hurd"
404        ))]
405        EREMOTE => "Object is remote",
406
407        #[cfg(any(
408            linux_android,
409            solarish,
410            target_os = "aix",
411            target_os = "fuchsia"
412        ))]
413        ENOLINK => "Link has been severed",
414
415        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
416        EADV => "Advertise error",
417
418        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
419        ESRMNT => "Srmount error",
420
421        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
422        ECOMM => "Communication error on send",
423
424        #[cfg(any(
425            linux_android,
426            solarish,
427            target_os = "aix",
428            target_os = "fuchsia",
429        ))]
430        EPROTO => "Protocol error",
431
432        #[cfg(any(
433            linux_android,
434            solarish,
435            target_os = "aix",
436            target_os = "fuchsia"
437        ))]
438        EMULTIHOP => "Multihop attempted",
439
440        #[cfg(any(linux_android, target_os = "fuchsia"))]
441        EDOTDOT => "RFS specific error",
442
443        #[cfg(any(linux_android, target_os = "aix", target_os = "fuchsia"))]
444        EBADMSG => "Not a data message",
445
446        #[cfg(solarish)]
447        EBADMSG => "Trying to read unreadable message",
448
449        #[cfg(any(
450            linux_android,
451            target_os = "aix",
452            target_os = "fuchsia",
453            target_os = "haiku",
454            target_os = "hurd"
455        ))]
456        EOVERFLOW => "Value too large for defined data type",
457
458        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
459        ENOTUNIQ => "Name not unique on network",
460
461        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
462        EBADFD => "File descriptor in bad state",
463
464        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
465        EREMCHG => "Remote address changed",
466
467        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
468        ELIBACC => "Can not access a needed shared library",
469
470        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
471        ELIBBAD => "Accessing a corrupted shared library",
472
473        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
474        ELIBSCN => ".lib section in a.out corrupted",
475
476        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
477        ELIBMAX => "Attempting to link in too many shared libraries",
478
479        #[cfg(any(
480            linux_android,
481            solarish,
482            target_os = "fuchsia",
483            target_os = "hurd"
484        ))]
485        ELIBEXEC => "Cannot exec a shared library directly",
486
487        #[cfg(any(
488            linux_android,
489            solarish,
490            target_os = "aix",
491            target_os = "fuchsia",
492            target_os = "openbsd"
493        ))]
494        EILSEQ => "Illegal byte sequence",
495
496        #[cfg(any(
497            linux_android,
498            solarish,
499            target_os = "aix",
500            target_os = "fuchsia"
501        ))]
502        ERESTART => "Interrupted system call should be restarted",
503
504        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
505        ESTRPIPE => "Streams pipe error",
506
507        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
508        EUSERS => "Too many users",
509
510        #[cfg(any(
511            linux_android,
512            target_os = "fuchsia",
513            target_os = "netbsd",
514            target_os = "redox"
515        ))]
516        EOPNOTSUPP => "Operation not supported on transport endpoint",
517
518        #[cfg(any(linux_android, target_os = "fuchsia", target_os = "hurd"))]
519        ESTALE => "Stale file handle",
520
521        #[cfg(any(linux_android, target_os = "fuchsia"))]
522        EUCLEAN => "Structure needs cleaning",
523
524        #[cfg(any(linux_android, target_os = "fuchsia"))]
525        ENOTNAM => "Not a XENIX named type file",
526
527        #[cfg(any(linux_android, target_os = "fuchsia"))]
528        ENAVAIL => "No XENIX semaphores available",
529
530        #[cfg(any(linux_android, target_os = "fuchsia"))]
531        EISNAM => "Is a named type file",
532
533        #[cfg(any(linux_android, target_os = "fuchsia"))]
534        EREMOTEIO => "Remote I/O error",
535
536        #[cfg(any(linux_android, target_os = "fuchsia"))]
537        EDQUOT => "Quota exceeded",
538
539        #[cfg(any(
540            linux_android,
541            target_os = "fuchsia",
542            target_os = "openbsd",
543            target_os = "dragonfly"
544        ))]
545        ENOMEDIUM => "No medium found",
546
547        #[cfg(any(
548            linux_android,
549            target_os = "fuchsia",
550            target_os = "openbsd"
551        ))]
552        EMEDIUMTYPE => "Wrong medium type",
553
554        #[cfg(any(
555            linux_android,
556            solarish,
557            target_os = "fuchsia",
558            target_os = "haiku"
559        ))]
560        ECANCELED => "Operation canceled",
561
562        #[cfg(any(linux_android, target_os = "fuchsia"))]
563        ENOKEY => "Required key not available",
564
565        #[cfg(any(linux_android, target_os = "fuchsia"))]
566        EKEYEXPIRED => "Key has expired",
567
568        #[cfg(any(linux_android, target_os = "fuchsia"))]
569        EKEYREVOKED => "Key has been revoked",
570
571        #[cfg(any(linux_android, target_os = "fuchsia"))]
572        EKEYREJECTED => "Key was rejected by service",
573
574        #[cfg(any(
575            linux_android,
576            target_os = "aix",
577            target_os = "fuchsia",
578            target_os = "hurd"
579        ))]
580        EOWNERDEAD => "Owner died",
581
582        #[cfg(solarish)]
583        EOWNERDEAD => "Process died with lock",
584
585        #[cfg(any(linux_android, target_os = "aix", target_os = "fuchsia"))]
586        ENOTRECOVERABLE => "State not recoverable",
587
588        #[cfg(solarish)]
589        ENOTRECOVERABLE => "Lock is not recoverable",
590
591        #[cfg(any(
592            all(target_os = "linux", not(target_arch = "mips")),
593            target_os = "fuchsia"
594        ))]
595        ERFKILL => "Operation not possible due to RF-kill",
596
597        #[cfg(any(
598            all(target_os = "linux", not(target_arch = "mips")),
599            target_os = "fuchsia"
600        ))]
601        EHWPOISON => "Memory page has hardware error",
602
603        #[cfg(freebsdlike)]
604        EDOOFUS => "Programming error",
605
606        #[cfg(any(freebsdlike, target_os = "hurd", target_os = "redox"))]
607        EMULTIHOP => "Multihop attempted",
608
609        #[cfg(any(freebsdlike, target_os = "hurd", target_os = "redox"))]
610        ENOLINK => "Link has been severed",
611
612        #[cfg(target_os = "freebsd")]
613        ENOTCAPABLE => "Capabilities insufficient",
614
615        #[cfg(target_os = "freebsd")]
616        ECAPMODE => "Not permitted in capability mode",
617
618        #[cfg(any(bsd, target_os = "hurd"))]
619        ENEEDAUTH => "Need authenticator",
620
621        #[cfg(any(bsd, target_os = "redox", solarish))]
622        EOVERFLOW => "Value too large to be stored in data type",
623
624        #[cfg(any(
625            freebsdlike,
626            apple_targets,
627            target_os = "netbsd",
628            target_os = "redox",
629            target_os = "haiku",
630            target_os = "hurd"
631        ))]
632        EILSEQ => "Illegal byte sequence",
633
634        #[cfg(any(bsd, target_os = "haiku"))]
635        ENOATTR => "Attribute not found",
636
637        #[cfg(any(
638            bsd,
639            target_os = "redox",
640            target_os = "haiku",
641            target_os = "hurd"
642        ))]
643        EBADMSG => "Bad message",
644
645        #[cfg(any(
646            bsd,
647            target_os = "haiku",
648            target_os = "hurd",
649            target_os = "redox"
650        ))]
651        EPROTO => "Protocol error",
652
653        #[cfg(any(
654            freebsdlike,
655            apple_targets,
656            target_os = "openbsd",
657            target_os = "hurd"
658        ))]
659        ENOTRECOVERABLE => "State not recoverable",
660
661        #[cfg(any(freebsdlike, apple_targets, target_os = "openbsd"))]
662        EOWNERDEAD => "Previous owner died",
663
664        #[cfg(any(
665            bsd,
666            target_os = "aix",
667            solarish,
668            target_os = "haiku",
669            target_os = "hurd"
670        ))]
671        ENOTSUP => "Operation not supported",
672
673        #[cfg(any(bsd, target_os = "aix", target_os = "hurd"))]
674        EPROCLIM => "Too many processes",
675
676        #[cfg(any(
677            bsd,
678            target_os = "aix",
679            target_os = "hurd",
680            target_os = "redox"
681        ))]
682        EUSERS => "Too many users",
683
684        #[cfg(any(
685            bsd,
686            solarish,
687            target_os = "redox",
688            target_os = "aix",
689            target_os = "haiku",
690            target_os = "hurd"
691        ))]
692        EDQUOT => "Disc quota exceeded",
693
694        #[cfg(any(
695            bsd,
696            solarish,
697            target_os = "redox",
698            target_os = "aix",
699            target_os = "haiku"
700        ))]
701        ESTALE => "Stale NFS file handle",
702
703        #[cfg(any(bsd, target_os = "aix", target_os = "redox"))]
704        EREMOTE => "Too many levels of remote in path",
705
706        #[cfg(any(bsd, target_os = "hurd"))]
707        EBADRPC => "RPC struct is bad",
708
709        #[cfg(any(bsd, target_os = "hurd"))]
710        ERPCMISMATCH => "RPC version wrong",
711
712        #[cfg(any(bsd, target_os = "hurd"))]
713        EPROGUNAVAIL => "RPC prog. not avail",
714
715        #[cfg(any(bsd, target_os = "hurd"))]
716        EPROGMISMATCH => "Program version wrong",
717
718        #[cfg(any(bsd, target_os = "hurd"))]
719        EPROCUNAVAIL => "Bad procedure for program",
720
721        #[cfg(any(bsd, target_os = "hurd"))]
722        EFTYPE => "Inappropriate file type or format",
723
724        #[cfg(any(bsd, target_os = "hurd"))]
725        EAUTH => "Authentication error",
726
727        #[cfg(any(
728            bsd,
729            target_os = "aix",
730            target_os = "hurd",
731            target_os = "redox"
732        ))]
733        ECANCELED => "Operation canceled",
734
735        #[cfg(apple_targets)]
736        EPWROFF => "Device power is off",
737
738        #[cfg(apple_targets)]
739        EDEVERR => "Device error, e.g. paper out",
740
741        #[cfg(apple_targets)]
742        EBADEXEC => "Bad executable",
743
744        #[cfg(apple_targets)]
745        EBADARCH => "Bad CPU type in executable",
746
747        #[cfg(apple_targets)]
748        ESHLIBVERS => "Shared library version mismatch",
749
750        #[cfg(apple_targets)]
751        EBADMACHO => "Malformed Macho file",
752
753        #[cfg(any(apple_targets, target_os = "netbsd", target_os = "haiku"))]
754        EMULTIHOP => "Reserved",
755
756        #[cfg(any(
757            apple_targets,
758            target_os = "aix",
759            target_os = "netbsd",
760            target_os = "redox"
761        ))]
762        ENODATA => "No message available on STREAM",
763
764        #[cfg(any(apple_targets, target_os = "netbsd", target_os = "haiku"))]
765        ENOLINK => "Reserved",
766
767        #[cfg(any(
768            apple_targets,
769            target_os = "aix",
770            target_os = "netbsd",
771            target_os = "redox"
772        ))]
773        ENOSR => "No STREAM resources",
774
775        #[cfg(any(
776            apple_targets,
777            target_os = "aix",
778            target_os = "netbsd",
779            target_os = "redox"
780        ))]
781        ENOSTR => "Not a STREAM",
782
783        #[cfg(any(
784            apple_targets,
785            target_os = "aix",
786            target_os = "netbsd",
787            target_os = "redox"
788        ))]
789        ETIME => "STREAM ioctl timeout",
790
791        #[cfg(any(apple_targets, solarish, target_os = "aix"))]
792        EOPNOTSUPP => "Operation not supported on socket",
793
794        #[cfg(apple_targets)]
795        ENOPOLICY => "No such policy registered",
796
797        #[cfg(apple_targets)]
798        EQFULL => "Interface output queue is full",
799
800        #[cfg(any(target_os = "openbsd", target_os = "hurd"))]
801        EOPNOTSUPP => "Operation not supported",
802
803        #[cfg(target_os = "openbsd")]
804        EIPSEC => "IPsec processing failure",
805
806        #[cfg(target_os = "dragonfly")]
807        EASYNC => "Async",
808
809        #[cfg(solarish)]
810        EDEADLOCK => "Resource deadlock would occur",
811
812        #[cfg(solarish)]
813        ELOCKUNMAPPED => "Locked lock was unmapped",
814
815        #[cfg(solarish)]
816        ENOTACTIVE => "Facility is not active",
817
818        #[cfg(target_os = "hurd")]
819        EBACKGROUND => "Inappropriate operation for background process",
820
821        #[cfg(target_os = "hurd")]
822        EDIED => "Translator died",
823
824        #[cfg(target_os = "hurd")]
825        EGREGIOUS => "You really blew it this time",
826
827        #[cfg(target_os = "hurd")]
828        EIEIO => "Computer bought the farm",
829
830        #[cfg(target_os = "hurd")]
831        EGRATUITOUS => "Gratuitous error",
832    }
833}
834
835#[cfg(any(linux_android, target_os = "fuchsia"))]
836mod consts {
837    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
838    #[repr(i32)]
839    #[non_exhaustive]
840    pub enum Errno {
841        UnknownErrno = 0,
842        EPERM = libc::EPERM,
843        ENOENT = libc::ENOENT,
844        ESRCH = libc::ESRCH,
845        EINTR = libc::EINTR,
846        EIO = libc::EIO,
847        ENXIO = libc::ENXIO,
848        E2BIG = libc::E2BIG,
849        ENOEXEC = libc::ENOEXEC,
850        EBADF = libc::EBADF,
851        ECHILD = libc::ECHILD,
852        EAGAIN = libc::EAGAIN,
853        ENOMEM = libc::ENOMEM,
854        EACCES = libc::EACCES,
855        EFAULT = libc::EFAULT,
856        ENOTBLK = libc::ENOTBLK,
857        EBUSY = libc::EBUSY,
858        EEXIST = libc::EEXIST,
859        EXDEV = libc::EXDEV,
860        ENODEV = libc::ENODEV,
861        ENOTDIR = libc::ENOTDIR,
862        EISDIR = libc::EISDIR,
863        EINVAL = libc::EINVAL,
864        ENFILE = libc::ENFILE,
865        EMFILE = libc::EMFILE,
866        ENOTTY = libc::ENOTTY,
867        ETXTBSY = libc::ETXTBSY,
868        EFBIG = libc::EFBIG,
869        ENOSPC = libc::ENOSPC,
870        ESPIPE = libc::ESPIPE,
871        EROFS = libc::EROFS,
872        EMLINK = libc::EMLINK,
873        EPIPE = libc::EPIPE,
874        EDOM = libc::EDOM,
875        ERANGE = libc::ERANGE,
876        EDEADLK = libc::EDEADLK,
877        ENAMETOOLONG = libc::ENAMETOOLONG,
878        ENOLCK = libc::ENOLCK,
879        ENOSYS = libc::ENOSYS,
880        ENOTEMPTY = libc::ENOTEMPTY,
881        ELOOP = libc::ELOOP,
882        ENOMSG = libc::ENOMSG,
883        EIDRM = libc::EIDRM,
884        ECHRNG = libc::ECHRNG,
885        EL2NSYNC = libc::EL2NSYNC,
886        EL3HLT = libc::EL3HLT,
887        EL3RST = libc::EL3RST,
888        ELNRNG = libc::ELNRNG,
889        EUNATCH = libc::EUNATCH,
890        ENOCSI = libc::ENOCSI,
891        EL2HLT = libc::EL2HLT,
892        EBADE = libc::EBADE,
893        EBADR = libc::EBADR,
894        EXFULL = libc::EXFULL,
895        ENOANO = libc::ENOANO,
896        EBADRQC = libc::EBADRQC,
897        EBADSLT = libc::EBADSLT,
898        EBFONT = libc::EBFONT,
899        ENOSTR = libc::ENOSTR,
900        ENODATA = libc::ENODATA,
901        ETIME = libc::ETIME,
902        ENOSR = libc::ENOSR,
903        ENONET = libc::ENONET,
904        ENOPKG = libc::ENOPKG,
905        EREMOTE = libc::EREMOTE,
906        ENOLINK = libc::ENOLINK,
907        EADV = libc::EADV,
908        ESRMNT = libc::ESRMNT,
909        ECOMM = libc::ECOMM,
910        EPROTO = libc::EPROTO,
911        EMULTIHOP = libc::EMULTIHOP,
912        EDOTDOT = libc::EDOTDOT,
913        EBADMSG = libc::EBADMSG,
914        EOVERFLOW = libc::EOVERFLOW,
915        ENOTUNIQ = libc::ENOTUNIQ,
916        EBADFD = libc::EBADFD,
917        EREMCHG = libc::EREMCHG,
918        ELIBACC = libc::ELIBACC,
919        ELIBBAD = libc::ELIBBAD,
920        ELIBSCN = libc::ELIBSCN,
921        ELIBMAX = libc::ELIBMAX,
922        ELIBEXEC = libc::ELIBEXEC,
923        EILSEQ = libc::EILSEQ,
924        ERESTART = libc::ERESTART,
925        ESTRPIPE = libc::ESTRPIPE,
926        EUSERS = libc::EUSERS,
927        ENOTSOCK = libc::ENOTSOCK,
928        EDESTADDRREQ = libc::EDESTADDRREQ,
929        EMSGSIZE = libc::EMSGSIZE,
930        EPROTOTYPE = libc::EPROTOTYPE,
931        ENOPROTOOPT = libc::ENOPROTOOPT,
932        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
933        ESOCKTNOSUPPORT = libc::ESOCKTNOSUPPORT,
934        EOPNOTSUPP = libc::EOPNOTSUPP,
935        EPFNOSUPPORT = libc::EPFNOSUPPORT,
936        EAFNOSUPPORT = libc::EAFNOSUPPORT,
937        EADDRINUSE = libc::EADDRINUSE,
938        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
939        ENETDOWN = libc::ENETDOWN,
940        ENETUNREACH = libc::ENETUNREACH,
941        ENETRESET = libc::ENETRESET,
942        ECONNABORTED = libc::ECONNABORTED,
943        ECONNRESET = libc::ECONNRESET,
944        ENOBUFS = libc::ENOBUFS,
945        EISCONN = libc::EISCONN,
946        ENOTCONN = libc::ENOTCONN,
947        ESHUTDOWN = libc::ESHUTDOWN,
948        ETOOMANYREFS = libc::ETOOMANYREFS,
949        ETIMEDOUT = libc::ETIMEDOUT,
950        ECONNREFUSED = libc::ECONNREFUSED,
951        EHOSTDOWN = libc::EHOSTDOWN,
952        EHOSTUNREACH = libc::EHOSTUNREACH,
953        EALREADY = libc::EALREADY,
954        EINPROGRESS = libc::EINPROGRESS,
955        ESTALE = libc::ESTALE,
956        EUCLEAN = libc::EUCLEAN,
957        ENOTNAM = libc::ENOTNAM,
958        ENAVAIL = libc::ENAVAIL,
959        EISNAM = libc::EISNAM,
960        EREMOTEIO = libc::EREMOTEIO,
961        EDQUOT = libc::EDQUOT,
962        ENOMEDIUM = libc::ENOMEDIUM,
963        EMEDIUMTYPE = libc::EMEDIUMTYPE,
964        ECANCELED = libc::ECANCELED,
965        ENOKEY = libc::ENOKEY,
966        EKEYEXPIRED = libc::EKEYEXPIRED,
967        EKEYREVOKED = libc::EKEYREVOKED,
968        EKEYREJECTED = libc::EKEYREJECTED,
969        EOWNERDEAD = libc::EOWNERDEAD,
970        ENOTRECOVERABLE = libc::ENOTRECOVERABLE,
971        #[cfg(not(any(target_os = "android", target_arch = "mips")))]
972        ERFKILL = libc::ERFKILL,
973        #[cfg(not(any(target_os = "android", target_arch = "mips")))]
974        EHWPOISON = libc::EHWPOISON,
975    }
976
977    impl Errno {
978        pub const EWOULDBLOCK: Errno = Errno::EAGAIN;
979        pub const EDEADLOCK: Errno = Errno::EDEADLK;
980        pub const ENOTSUP: Errno = Errno::EOPNOTSUPP;
981    }
982
983    #[deprecated(
984        since = "0.28.0",
985        note = "please use `Errno::from_raw()` instead"
986    )]
987    pub const fn from_i32(e: i32) -> Errno {
988        use self::Errno::*;
989
990        match e {
991            libc::EPERM => EPERM,
992            libc::ENOENT => ENOENT,
993            libc::ESRCH => ESRCH,
994            libc::EINTR => EINTR,
995            libc::EIO => EIO,
996            libc::ENXIO => ENXIO,
997            libc::E2BIG => E2BIG,
998            libc::ENOEXEC => ENOEXEC,
999            libc::EBADF => EBADF,
1000            libc::ECHILD => ECHILD,
1001            libc::EAGAIN => EAGAIN,
1002            libc::ENOMEM => ENOMEM,
1003            libc::EACCES => EACCES,
1004            libc::EFAULT => EFAULT,
1005            libc::ENOTBLK => ENOTBLK,
1006            libc::EBUSY => EBUSY,
1007            libc::EEXIST => EEXIST,
1008            libc::EXDEV => EXDEV,
1009            libc::ENODEV => ENODEV,
1010            libc::ENOTDIR => ENOTDIR,
1011            libc::EISDIR => EISDIR,
1012            libc::EINVAL => EINVAL,
1013            libc::ENFILE => ENFILE,
1014            libc::EMFILE => EMFILE,
1015            libc::ENOTTY => ENOTTY,
1016            libc::ETXTBSY => ETXTBSY,
1017            libc::EFBIG => EFBIG,
1018            libc::ENOSPC => ENOSPC,
1019            libc::ESPIPE => ESPIPE,
1020            libc::EROFS => EROFS,
1021            libc::EMLINK => EMLINK,
1022            libc::EPIPE => EPIPE,
1023            libc::EDOM => EDOM,
1024            libc::ERANGE => ERANGE,
1025            libc::EDEADLK => EDEADLK,
1026            libc::ENAMETOOLONG => ENAMETOOLONG,
1027            libc::ENOLCK => ENOLCK,
1028            libc::ENOSYS => ENOSYS,
1029            libc::ENOTEMPTY => ENOTEMPTY,
1030            libc::ELOOP => ELOOP,
1031            libc::ENOMSG => ENOMSG,
1032            libc::EIDRM => EIDRM,
1033            libc::ECHRNG => ECHRNG,
1034            libc::EL2NSYNC => EL2NSYNC,
1035            libc::EL3HLT => EL3HLT,
1036            libc::EL3RST => EL3RST,
1037            libc::ELNRNG => ELNRNG,
1038            libc::EUNATCH => EUNATCH,
1039            libc::ENOCSI => ENOCSI,
1040            libc::EL2HLT => EL2HLT,
1041            libc::EBADE => EBADE,
1042            libc::EBADR => EBADR,
1043            libc::EXFULL => EXFULL,
1044            libc::ENOANO => ENOANO,
1045            libc::EBADRQC => EBADRQC,
1046            libc::EBADSLT => EBADSLT,
1047            libc::EBFONT => EBFONT,
1048            libc::ENOSTR => ENOSTR,
1049            libc::ENODATA => ENODATA,
1050            libc::ETIME => ETIME,
1051            libc::ENOSR => ENOSR,
1052            libc::ENONET => ENONET,
1053            libc::ENOPKG => ENOPKG,
1054            libc::EREMOTE => EREMOTE,
1055            libc::ENOLINK => ENOLINK,
1056            libc::EADV => EADV,
1057            libc::ESRMNT => ESRMNT,
1058            libc::ECOMM => ECOMM,
1059            libc::EPROTO => EPROTO,
1060            libc::EMULTIHOP => EMULTIHOP,
1061            libc::EDOTDOT => EDOTDOT,
1062            libc::EBADMSG => EBADMSG,
1063            libc::EOVERFLOW => EOVERFLOW,
1064            libc::ENOTUNIQ => ENOTUNIQ,
1065            libc::EBADFD => EBADFD,
1066            libc::EREMCHG => EREMCHG,
1067            libc::ELIBACC => ELIBACC,
1068            libc::ELIBBAD => ELIBBAD,
1069            libc::ELIBSCN => ELIBSCN,
1070            libc::ELIBMAX => ELIBMAX,
1071            libc::ELIBEXEC => ELIBEXEC,
1072            libc::EILSEQ => EILSEQ,
1073            libc::ERESTART => ERESTART,
1074            libc::ESTRPIPE => ESTRPIPE,
1075            libc::EUSERS => EUSERS,
1076            libc::ENOTSOCK => ENOTSOCK,
1077            libc::EDESTADDRREQ => EDESTADDRREQ,
1078            libc::EMSGSIZE => EMSGSIZE,
1079            libc::EPROTOTYPE => EPROTOTYPE,
1080            libc::ENOPROTOOPT => ENOPROTOOPT,
1081            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
1082            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
1083            libc::EOPNOTSUPP => EOPNOTSUPP,
1084            libc::EPFNOSUPPORT => EPFNOSUPPORT,
1085            libc::EAFNOSUPPORT => EAFNOSUPPORT,
1086            libc::EADDRINUSE => EADDRINUSE,
1087            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
1088            libc::ENETDOWN => ENETDOWN,
1089            libc::ENETUNREACH => ENETUNREACH,
1090            libc::ENETRESET => ENETRESET,
1091            libc::ECONNABORTED => ECONNABORTED,
1092            libc::ECONNRESET => ECONNRESET,
1093            libc::ENOBUFS => ENOBUFS,
1094            libc::EISCONN => EISCONN,
1095            libc::ENOTCONN => ENOTCONN,
1096            libc::ESHUTDOWN => ESHUTDOWN,
1097            libc::ETOOMANYREFS => ETOOMANYREFS,
1098            libc::ETIMEDOUT => ETIMEDOUT,
1099            libc::ECONNREFUSED => ECONNREFUSED,
1100            libc::EHOSTDOWN => EHOSTDOWN,
1101            libc::EHOSTUNREACH => EHOSTUNREACH,
1102            libc::EALREADY => EALREADY,
1103            libc::EINPROGRESS => EINPROGRESS,
1104            libc::ESTALE => ESTALE,
1105            libc::EUCLEAN => EUCLEAN,
1106            libc::ENOTNAM => ENOTNAM,
1107            libc::ENAVAIL => ENAVAIL,
1108            libc::EISNAM => EISNAM,
1109            libc::EREMOTEIO => EREMOTEIO,
1110            libc::EDQUOT => EDQUOT,
1111            libc::ENOMEDIUM => ENOMEDIUM,
1112            libc::EMEDIUMTYPE => EMEDIUMTYPE,
1113            libc::ECANCELED => ECANCELED,
1114            libc::ENOKEY => ENOKEY,
1115            libc::EKEYEXPIRED => EKEYEXPIRED,
1116            libc::EKEYREVOKED => EKEYREVOKED,
1117            libc::EKEYREJECTED => EKEYREJECTED,
1118            libc::EOWNERDEAD => EOWNERDEAD,
1119            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
1120            #[cfg(not(any(target_os = "android", target_arch = "mips")))]
1121            libc::ERFKILL => ERFKILL,
1122            #[cfg(not(any(target_os = "android", target_arch = "mips")))]
1123            libc::EHWPOISON => EHWPOISON,
1124            _ => UnknownErrno,
1125        }
1126    }
1127}
1128
1129#[cfg(apple_targets)]
1130mod consts {
1131    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1132    #[repr(i32)]
1133    #[non_exhaustive]
1134    pub enum Errno {
1135        UnknownErrno = 0,
1136        EPERM = libc::EPERM,
1137        ENOENT = libc::ENOENT,
1138        ESRCH = libc::ESRCH,
1139        EINTR = libc::EINTR,
1140        EIO = libc::EIO,
1141        ENXIO = libc::ENXIO,
1142        E2BIG = libc::E2BIG,
1143        ENOEXEC = libc::ENOEXEC,
1144        EBADF = libc::EBADF,
1145        ECHILD = libc::ECHILD,
1146        EDEADLK = libc::EDEADLK,
1147        ENOMEM = libc::ENOMEM,
1148        EACCES = libc::EACCES,
1149        EFAULT = libc::EFAULT,
1150        ENOTBLK = libc::ENOTBLK,
1151        EBUSY = libc::EBUSY,
1152        EEXIST = libc::EEXIST,
1153        EXDEV = libc::EXDEV,
1154        ENODEV = libc::ENODEV,
1155        ENOTDIR = libc::ENOTDIR,
1156        EISDIR = libc::EISDIR,
1157        EINVAL = libc::EINVAL,
1158        ENFILE = libc::ENFILE,
1159        EMFILE = libc::EMFILE,
1160        ENOTTY = libc::ENOTTY,
1161        ETXTBSY = libc::ETXTBSY,
1162        EFBIG = libc::EFBIG,
1163        ENOSPC = libc::ENOSPC,
1164        ESPIPE = libc::ESPIPE,
1165        EROFS = libc::EROFS,
1166        EMLINK = libc::EMLINK,
1167        EPIPE = libc::EPIPE,
1168        EDOM = libc::EDOM,
1169        ERANGE = libc::ERANGE,
1170        EAGAIN = libc::EAGAIN,
1171        EINPROGRESS = libc::EINPROGRESS,
1172        EALREADY = libc::EALREADY,
1173        ENOTSOCK = libc::ENOTSOCK,
1174        EDESTADDRREQ = libc::EDESTADDRREQ,
1175        EMSGSIZE = libc::EMSGSIZE,
1176        EPROTOTYPE = libc::EPROTOTYPE,
1177        ENOPROTOOPT = libc::ENOPROTOOPT,
1178        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
1179        ESOCKTNOSUPPORT = libc::ESOCKTNOSUPPORT,
1180        ENOTSUP = libc::ENOTSUP,
1181        EPFNOSUPPORT = libc::EPFNOSUPPORT,
1182        EAFNOSUPPORT = libc::EAFNOSUPPORT,
1183        EADDRINUSE = libc::EADDRINUSE,
1184        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
1185        ENETDOWN = libc::ENETDOWN,
1186        ENETUNREACH = libc::ENETUNREACH,
1187        ENETRESET = libc::ENETRESET,
1188        ECONNABORTED = libc::ECONNABORTED,
1189        ECONNRESET = libc::ECONNRESET,
1190        ENOBUFS = libc::ENOBUFS,
1191        EISCONN = libc::EISCONN,
1192        ENOTCONN = libc::ENOTCONN,
1193        ESHUTDOWN = libc::ESHUTDOWN,
1194        ETOOMANYREFS = libc::ETOOMANYREFS,
1195        ETIMEDOUT = libc::ETIMEDOUT,
1196        ECONNREFUSED = libc::ECONNREFUSED,
1197        ELOOP = libc::ELOOP,
1198        ENAMETOOLONG = libc::ENAMETOOLONG,
1199        EHOSTDOWN = libc::EHOSTDOWN,
1200        EHOSTUNREACH = libc::EHOSTUNREACH,
1201        ENOTEMPTY = libc::ENOTEMPTY,
1202        EPROCLIM = libc::EPROCLIM,
1203        EUSERS = libc::EUSERS,
1204        EDQUOT = libc::EDQUOT,
1205        ESTALE = libc::ESTALE,
1206        EREMOTE = libc::EREMOTE,
1207        EBADRPC = libc::EBADRPC,
1208        ERPCMISMATCH = libc::ERPCMISMATCH,
1209        EPROGUNAVAIL = libc::EPROGUNAVAIL,
1210        EPROGMISMATCH = libc::EPROGMISMATCH,
1211        EPROCUNAVAIL = libc::EPROCUNAVAIL,
1212        ENOLCK = libc::ENOLCK,
1213        ENOSYS = libc::ENOSYS,
1214        EFTYPE = libc::EFTYPE,
1215        EAUTH = libc::EAUTH,
1216        ENEEDAUTH = libc::ENEEDAUTH,
1217        EPWROFF = libc::EPWROFF,
1218        EDEVERR = libc::EDEVERR,
1219        EOVERFLOW = libc::EOVERFLOW,
1220        EBADEXEC = libc::EBADEXEC,
1221        EBADARCH = libc::EBADARCH,
1222        ESHLIBVERS = libc::ESHLIBVERS,
1223        EBADMACHO = libc::EBADMACHO,
1224        ECANCELED = libc::ECANCELED,
1225        EIDRM = libc::EIDRM,
1226        ENOMSG = libc::ENOMSG,
1227        EILSEQ = libc::EILSEQ,
1228        ENOATTR = libc::ENOATTR,
1229        EBADMSG = libc::EBADMSG,
1230        EMULTIHOP = libc::EMULTIHOP,
1231        ENODATA = libc::ENODATA,
1232        ENOLINK = libc::ENOLINK,
1233        ENOSR = libc::ENOSR,
1234        ENOSTR = libc::ENOSTR,
1235        EPROTO = libc::EPROTO,
1236        ETIME = libc::ETIME,
1237        EOPNOTSUPP = libc::EOPNOTSUPP,
1238        ENOPOLICY = libc::ENOPOLICY,
1239        ENOTRECOVERABLE = libc::ENOTRECOVERABLE,
1240        EOWNERDEAD = libc::EOWNERDEAD,
1241        EQFULL = libc::EQFULL,
1242    }
1243
1244    impl Errno {
1245        pub const ELAST: Errno = Errno::EQFULL;
1246        pub const EWOULDBLOCK: Errno = Errno::EAGAIN;
1247        pub const EDEADLOCK: Errno = Errno::EDEADLK;
1248    }
1249
1250    #[deprecated(
1251        since = "0.28.0",
1252        note = "please use `Errno::from_raw()` instead"
1253    )]
1254    pub const fn from_i32(e: i32) -> Errno {
1255        use self::Errno::*;
1256
1257        match e {
1258            libc::EPERM => EPERM,
1259            libc::ENOENT => ENOENT,
1260            libc::ESRCH => ESRCH,
1261            libc::EINTR => EINTR,
1262            libc::EIO => EIO,
1263            libc::ENXIO => ENXIO,
1264            libc::E2BIG => E2BIG,
1265            libc::ENOEXEC => ENOEXEC,
1266            libc::EBADF => EBADF,
1267            libc::ECHILD => ECHILD,
1268            libc::EDEADLK => EDEADLK,
1269            libc::ENOMEM => ENOMEM,
1270            libc::EACCES => EACCES,
1271            libc::EFAULT => EFAULT,
1272            libc::ENOTBLK => ENOTBLK,
1273            libc::EBUSY => EBUSY,
1274            libc::EEXIST => EEXIST,
1275            libc::EXDEV => EXDEV,
1276            libc::ENODEV => ENODEV,
1277            libc::ENOTDIR => ENOTDIR,
1278            libc::EISDIR => EISDIR,
1279            libc::EINVAL => EINVAL,
1280            libc::ENFILE => ENFILE,
1281            libc::EMFILE => EMFILE,
1282            libc::ENOTTY => ENOTTY,
1283            libc::ETXTBSY => ETXTBSY,
1284            libc::EFBIG => EFBIG,
1285            libc::ENOSPC => ENOSPC,
1286            libc::ESPIPE => ESPIPE,
1287            libc::EROFS => EROFS,
1288            libc::EMLINK => EMLINK,
1289            libc::EPIPE => EPIPE,
1290            libc::EDOM => EDOM,
1291            libc::ERANGE => ERANGE,
1292            libc::EAGAIN => EAGAIN,
1293            libc::EINPROGRESS => EINPROGRESS,
1294            libc::EALREADY => EALREADY,
1295            libc::ENOTSOCK => ENOTSOCK,
1296            libc::EDESTADDRREQ => EDESTADDRREQ,
1297            libc::EMSGSIZE => EMSGSIZE,
1298            libc::EPROTOTYPE => EPROTOTYPE,
1299            libc::ENOPROTOOPT => ENOPROTOOPT,
1300            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
1301            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
1302            libc::ENOTSUP => ENOTSUP,
1303            libc::EPFNOSUPPORT => EPFNOSUPPORT,
1304            libc::EAFNOSUPPORT => EAFNOSUPPORT,
1305            libc::EADDRINUSE => EADDRINUSE,
1306            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
1307            libc::ENETDOWN => ENETDOWN,
1308            libc::ENETUNREACH => ENETUNREACH,
1309            libc::ENETRESET => ENETRESET,
1310            libc::ECONNABORTED => ECONNABORTED,
1311            libc::ECONNRESET => ECONNRESET,
1312            libc::ENOBUFS => ENOBUFS,
1313            libc::EISCONN => EISCONN,
1314            libc::ENOTCONN => ENOTCONN,
1315            libc::ESHUTDOWN => ESHUTDOWN,
1316            libc::ETOOMANYREFS => ETOOMANYREFS,
1317            libc::ETIMEDOUT => ETIMEDOUT,
1318            libc::ECONNREFUSED => ECONNREFUSED,
1319            libc::ELOOP => ELOOP,
1320            libc::ENAMETOOLONG => ENAMETOOLONG,
1321            libc::EHOSTDOWN => EHOSTDOWN,
1322            libc::EHOSTUNREACH => EHOSTUNREACH,
1323            libc::ENOTEMPTY => ENOTEMPTY,
1324            libc::EPROCLIM => EPROCLIM,
1325            libc::EUSERS => EUSERS,
1326            libc::EDQUOT => EDQUOT,
1327            libc::ESTALE => ESTALE,
1328            libc::EREMOTE => EREMOTE,
1329            libc::EBADRPC => EBADRPC,
1330            libc::ERPCMISMATCH => ERPCMISMATCH,
1331            libc::EPROGUNAVAIL => EPROGUNAVAIL,
1332            libc::EPROGMISMATCH => EPROGMISMATCH,
1333            libc::EPROCUNAVAIL => EPROCUNAVAIL,
1334            libc::ENOLCK => ENOLCK,
1335            libc::ENOSYS => ENOSYS,
1336            libc::EFTYPE => EFTYPE,
1337            libc::EAUTH => EAUTH,
1338            libc::ENEEDAUTH => ENEEDAUTH,
1339            libc::EPWROFF => EPWROFF,
1340            libc::EDEVERR => EDEVERR,
1341            libc::EOVERFLOW => EOVERFLOW,
1342            libc::EBADEXEC => EBADEXEC,
1343            libc::EBADARCH => EBADARCH,
1344            libc::ESHLIBVERS => ESHLIBVERS,
1345            libc::EBADMACHO => EBADMACHO,
1346            libc::ECANCELED => ECANCELED,
1347            libc::EIDRM => EIDRM,
1348            libc::ENOMSG => ENOMSG,
1349            libc::EILSEQ => EILSEQ,
1350            libc::ENOATTR => ENOATTR,
1351            libc::EBADMSG => EBADMSG,
1352            libc::EMULTIHOP => EMULTIHOP,
1353            libc::ENODATA => ENODATA,
1354            libc::ENOLINK => ENOLINK,
1355            libc::ENOSR => ENOSR,
1356            libc::ENOSTR => ENOSTR,
1357            libc::EPROTO => EPROTO,
1358            libc::ETIME => ETIME,
1359            libc::EOPNOTSUPP => EOPNOTSUPP,
1360            libc::ENOPOLICY => ENOPOLICY,
1361            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
1362            libc::EOWNERDEAD => EOWNERDEAD,
1363            libc::EQFULL => EQFULL,
1364            _ => UnknownErrno,
1365        }
1366    }
1367}
1368
1369#[cfg(target_os = "freebsd")]
1370mod consts {
1371    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1372    #[repr(i32)]
1373    #[non_exhaustive]
1374    pub enum Errno {
1375        UnknownErrno = 0,
1376        EPERM = libc::EPERM,
1377        ENOENT = libc::ENOENT,
1378        ESRCH = libc::ESRCH,
1379        EINTR = libc::EINTR,
1380        EIO = libc::EIO,
1381        ENXIO = libc::ENXIO,
1382        E2BIG = libc::E2BIG,
1383        ENOEXEC = libc::ENOEXEC,
1384        EBADF = libc::EBADF,
1385        ECHILD = libc::ECHILD,
1386        EDEADLK = libc::EDEADLK,
1387        ENOMEM = libc::ENOMEM,
1388        EACCES = libc::EACCES,
1389        EFAULT = libc::EFAULT,
1390        ENOTBLK = libc::ENOTBLK,
1391        EBUSY = libc::EBUSY,
1392        EEXIST = libc::EEXIST,
1393        EXDEV = libc::EXDEV,
1394        ENODEV = libc::ENODEV,
1395        ENOTDIR = libc::ENOTDIR,
1396        EISDIR = libc::EISDIR,
1397        EINVAL = libc::EINVAL,
1398        ENFILE = libc::ENFILE,
1399        EMFILE = libc::EMFILE,
1400        ENOTTY = libc::ENOTTY,
1401        ETXTBSY = libc::ETXTBSY,
1402        EFBIG = libc::EFBIG,
1403        ENOSPC = libc::ENOSPC,
1404        ESPIPE = libc::ESPIPE,
1405        EROFS = libc::EROFS,
1406        EMLINK = libc::EMLINK,
1407        EPIPE = libc::EPIPE,
1408        EDOM = libc::EDOM,
1409        ERANGE = libc::ERANGE,
1410        EAGAIN = libc::EAGAIN,
1411        EINPROGRESS = libc::EINPROGRESS,
1412        EALREADY = libc::EALREADY,
1413        ENOTSOCK = libc::ENOTSOCK,
1414        EDESTADDRREQ = libc::EDESTADDRREQ,
1415        EMSGSIZE = libc::EMSGSIZE,
1416        EPROTOTYPE = libc::EPROTOTYPE,
1417        ENOPROTOOPT = libc::ENOPROTOOPT,
1418        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
1419        ESOCKTNOSUPPORT = libc::ESOCKTNOSUPPORT,
1420        ENOTSUP = libc::ENOTSUP,
1421        EPFNOSUPPORT = libc::EPFNOSUPPORT,
1422        EAFNOSUPPORT = libc::EAFNOSUPPORT,
1423        EADDRINUSE = libc::EADDRINUSE,
1424        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
1425        ENETDOWN = libc::ENETDOWN,
1426        ENETUNREACH = libc::ENETUNREACH,
1427        ENETRESET = libc::ENETRESET,
1428        ECONNABORTED = libc::ECONNABORTED,
1429        ECONNRESET = libc::ECONNRESET,
1430        ENOBUFS = libc::ENOBUFS,
1431        EISCONN = libc::EISCONN,
1432        ENOTCONN = libc::ENOTCONN,
1433        ESHUTDOWN = libc::ESHUTDOWN,
1434        ETOOMANYREFS = libc::ETOOMANYREFS,
1435        ETIMEDOUT = libc::ETIMEDOUT,
1436        ECONNREFUSED = libc::ECONNREFUSED,
1437        ELOOP = libc::ELOOP,
1438        ENAMETOOLONG = libc::ENAMETOOLONG,
1439        EHOSTDOWN = libc::EHOSTDOWN,
1440        EHOSTUNREACH = libc::EHOSTUNREACH,
1441        ENOTEMPTY = libc::ENOTEMPTY,
1442        EPROCLIM = libc::EPROCLIM,
1443        EUSERS = libc::EUSERS,
1444        EDQUOT = libc::EDQUOT,
1445        ESTALE = libc::ESTALE,
1446        EREMOTE = libc::EREMOTE,
1447        EBADRPC = libc::EBADRPC,
1448        ERPCMISMATCH = libc::ERPCMISMATCH,
1449        EPROGUNAVAIL = libc::EPROGUNAVAIL,
1450        EPROGMISMATCH = libc::EPROGMISMATCH,
1451        EPROCUNAVAIL = libc::EPROCUNAVAIL,
1452        ENOLCK = libc::ENOLCK,
1453        ENOSYS = libc::ENOSYS,
1454        EFTYPE = libc::EFTYPE,
1455        EAUTH = libc::EAUTH,
1456        ENEEDAUTH = libc::ENEEDAUTH,
1457        EIDRM = libc::EIDRM,
1458        ENOMSG = libc::ENOMSG,
1459        EOVERFLOW = libc::EOVERFLOW,
1460        ECANCELED = libc::ECANCELED,
1461        EILSEQ = libc::EILSEQ,
1462        ENOATTR = libc::ENOATTR,
1463        EDOOFUS = libc::EDOOFUS,
1464        EBADMSG = libc::EBADMSG,
1465        EMULTIHOP = libc::EMULTIHOP,
1466        ENOLINK = libc::ENOLINK,
1467        EPROTO = libc::EPROTO,
1468        ENOTCAPABLE = libc::ENOTCAPABLE,
1469        ECAPMODE = libc::ECAPMODE,
1470        ENOTRECOVERABLE = libc::ENOTRECOVERABLE,
1471        EOWNERDEAD = libc::EOWNERDEAD,
1472    }
1473
1474    impl Errno {
1475        pub const ELAST: Errno = Errno::EOWNERDEAD;
1476        pub const EWOULDBLOCK: Errno = Errno::EAGAIN;
1477        pub const EDEADLOCK: Errno = Errno::EDEADLK;
1478        pub const EOPNOTSUPP: Errno = Errno::ENOTSUP;
1479    }
1480
1481    #[deprecated(
1482        since = "0.28.0",
1483        note = "please use `Errno::from_raw()` instead"
1484    )]
1485    pub const fn from_i32(e: i32) -> Errno {
1486        use self::Errno::*;
1487
1488        match e {
1489            libc::EPERM => EPERM,
1490            libc::ENOENT => ENOENT,
1491            libc::ESRCH => ESRCH,
1492            libc::EINTR => EINTR,
1493            libc::EIO => EIO,
1494            libc::ENXIO => ENXIO,
1495            libc::E2BIG => E2BIG,
1496            libc::ENOEXEC => ENOEXEC,
1497            libc::EBADF => EBADF,
1498            libc::ECHILD => ECHILD,
1499            libc::EDEADLK => EDEADLK,
1500            libc::ENOMEM => ENOMEM,
1501            libc::EACCES => EACCES,
1502            libc::EFAULT => EFAULT,
1503            libc::ENOTBLK => ENOTBLK,
1504            libc::EBUSY => EBUSY,
1505            libc::EEXIST => EEXIST,
1506            libc::EXDEV => EXDEV,
1507            libc::ENODEV => ENODEV,
1508            libc::ENOTDIR => ENOTDIR,
1509            libc::EISDIR => EISDIR,
1510            libc::EINVAL => EINVAL,
1511            libc::ENFILE => ENFILE,
1512            libc::EMFILE => EMFILE,
1513            libc::ENOTTY => ENOTTY,
1514            libc::ETXTBSY => ETXTBSY,
1515            libc::EFBIG => EFBIG,
1516            libc::ENOSPC => ENOSPC,
1517            libc::ESPIPE => ESPIPE,
1518            libc::EROFS => EROFS,
1519            libc::EMLINK => EMLINK,
1520            libc::EPIPE => EPIPE,
1521            libc::EDOM => EDOM,
1522            libc::ERANGE => ERANGE,
1523            libc::EAGAIN => EAGAIN,
1524            libc::EINPROGRESS => EINPROGRESS,
1525            libc::EALREADY => EALREADY,
1526            libc::ENOTSOCK => ENOTSOCK,
1527            libc::EDESTADDRREQ => EDESTADDRREQ,
1528            libc::EMSGSIZE => EMSGSIZE,
1529            libc::EPROTOTYPE => EPROTOTYPE,
1530            libc::ENOPROTOOPT => ENOPROTOOPT,
1531            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
1532            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
1533            libc::ENOTSUP => ENOTSUP,
1534            libc::EPFNOSUPPORT => EPFNOSUPPORT,
1535            libc::EAFNOSUPPORT => EAFNOSUPPORT,
1536            libc::EADDRINUSE => EADDRINUSE,
1537            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
1538            libc::ENETDOWN => ENETDOWN,
1539            libc::ENETUNREACH => ENETUNREACH,
1540            libc::ENETRESET => ENETRESET,
1541            libc::ECONNABORTED => ECONNABORTED,
1542            libc::ECONNRESET => ECONNRESET,
1543            libc::ENOBUFS => ENOBUFS,
1544            libc::EISCONN => EISCONN,
1545            libc::ENOTCONN => ENOTCONN,
1546            libc::ESHUTDOWN => ESHUTDOWN,
1547            libc::ETOOMANYREFS => ETOOMANYREFS,
1548            libc::ETIMEDOUT => ETIMEDOUT,
1549            libc::ECONNREFUSED => ECONNREFUSED,
1550            libc::ELOOP => ELOOP,
1551            libc::ENAMETOOLONG => ENAMETOOLONG,
1552            libc::EHOSTDOWN => EHOSTDOWN,
1553            libc::EHOSTUNREACH => EHOSTUNREACH,
1554            libc::ENOTEMPTY => ENOTEMPTY,
1555            libc::EPROCLIM => EPROCLIM,
1556            libc::EUSERS => EUSERS,
1557            libc::EDQUOT => EDQUOT,
1558            libc::ESTALE => ESTALE,
1559            libc::EREMOTE => EREMOTE,
1560            libc::EBADRPC => EBADRPC,
1561            libc::ERPCMISMATCH => ERPCMISMATCH,
1562            libc::EPROGUNAVAIL => EPROGUNAVAIL,
1563            libc::EPROGMISMATCH => EPROGMISMATCH,
1564            libc::EPROCUNAVAIL => EPROCUNAVAIL,
1565            libc::ENOLCK => ENOLCK,
1566            libc::ENOSYS => ENOSYS,
1567            libc::EFTYPE => EFTYPE,
1568            libc::EAUTH => EAUTH,
1569            libc::ENEEDAUTH => ENEEDAUTH,
1570            libc::EIDRM => EIDRM,
1571            libc::ENOMSG => ENOMSG,
1572            libc::EOVERFLOW => EOVERFLOW,
1573            libc::ECANCELED => ECANCELED,
1574            libc::EILSEQ => EILSEQ,
1575            libc::ENOATTR => ENOATTR,
1576            libc::EDOOFUS => EDOOFUS,
1577            libc::EBADMSG => EBADMSG,
1578            libc::EMULTIHOP => EMULTIHOP,
1579            libc::ENOLINK => ENOLINK,
1580            libc::EPROTO => EPROTO,
1581            libc::ENOTCAPABLE => ENOTCAPABLE,
1582            libc::ECAPMODE => ECAPMODE,
1583            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
1584            libc::EOWNERDEAD => EOWNERDEAD,
1585            _ => UnknownErrno,
1586        }
1587    }
1588}
1589
1590#[cfg(target_os = "dragonfly")]
1591mod consts {
1592    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1593    #[repr(i32)]
1594    #[non_exhaustive]
1595    pub enum Errno {
1596        UnknownErrno = 0,
1597        EPERM = libc::EPERM,
1598        ENOENT = libc::ENOENT,
1599        ESRCH = libc::ESRCH,
1600        EINTR = libc::EINTR,
1601        EIO = libc::EIO,
1602        ENXIO = libc::ENXIO,
1603        E2BIG = libc::E2BIG,
1604        ENOEXEC = libc::ENOEXEC,
1605        EBADF = libc::EBADF,
1606        ECHILD = libc::ECHILD,
1607        EDEADLK = libc::EDEADLK,
1608        ENOMEM = libc::ENOMEM,
1609        EACCES = libc::EACCES,
1610        EFAULT = libc::EFAULT,
1611        ENOTBLK = libc::ENOTBLK,
1612        EBUSY = libc::EBUSY,
1613        EEXIST = libc::EEXIST,
1614        EXDEV = libc::EXDEV,
1615        ENODEV = libc::ENODEV,
1616        ENOTDIR = libc::ENOTDIR,
1617        EISDIR = libc::EISDIR,
1618        EINVAL = libc::EINVAL,
1619        ENFILE = libc::ENFILE,
1620        EMFILE = libc::EMFILE,
1621        ENOTTY = libc::ENOTTY,
1622        ETXTBSY = libc::ETXTBSY,
1623        EFBIG = libc::EFBIG,
1624        ENOSPC = libc::ENOSPC,
1625        ESPIPE = libc::ESPIPE,
1626        EROFS = libc::EROFS,
1627        EMLINK = libc::EMLINK,
1628        EPIPE = libc::EPIPE,
1629        EDOM = libc::EDOM,
1630        ERANGE = libc::ERANGE,
1631        EAGAIN = libc::EAGAIN,
1632        EINPROGRESS = libc::EINPROGRESS,
1633        EALREADY = libc::EALREADY,
1634        ENOTSOCK = libc::ENOTSOCK,
1635        EDESTADDRREQ = libc::EDESTADDRREQ,
1636        EMSGSIZE = libc::EMSGSIZE,
1637        EPROTOTYPE = libc::EPROTOTYPE,
1638        ENOPROTOOPT = libc::ENOPROTOOPT,
1639        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
1640        ESOCKTNOSUPPORT = libc::ESOCKTNOSUPPORT,
1641        ENOTSUP = libc::ENOTSUP,
1642        EPFNOSUPPORT = libc::EPFNOSUPPORT,
1643        EAFNOSUPPORT = libc::EAFNOSUPPORT,
1644        EADDRINUSE = libc::EADDRINUSE,
1645        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
1646        ENETDOWN = libc::ENETDOWN,
1647        ENETUNREACH = libc::ENETUNREACH,
1648        ENETRESET = libc::ENETRESET,
1649        ECONNABORTED = libc::ECONNABORTED,
1650        ECONNRESET = libc::ECONNRESET,
1651        ENOBUFS = libc::ENOBUFS,
1652        EISCONN = libc::EISCONN,
1653        ENOTCONN = libc::ENOTCONN,
1654        ESHUTDOWN = libc::ESHUTDOWN,
1655        ETOOMANYREFS = libc::ETOOMANYREFS,
1656        ETIMEDOUT = libc::ETIMEDOUT,
1657        ECONNREFUSED = libc::ECONNREFUSED,
1658        ELOOP = libc::ELOOP,
1659        ENAMETOOLONG = libc::ENAMETOOLONG,
1660        EHOSTDOWN = libc::EHOSTDOWN,
1661        EHOSTUNREACH = libc::EHOSTUNREACH,
1662        ENOTEMPTY = libc::ENOTEMPTY,
1663        EPROCLIM = libc::EPROCLIM,
1664        EUSERS = libc::EUSERS,
1665        EDQUOT = libc::EDQUOT,
1666        ESTALE = libc::ESTALE,
1667        EREMOTE = libc::EREMOTE,
1668        EBADRPC = libc::EBADRPC,
1669        ERPCMISMATCH = libc::ERPCMISMATCH,
1670        EPROGUNAVAIL = libc::EPROGUNAVAIL,
1671        EPROGMISMATCH = libc::EPROGMISMATCH,
1672        EPROCUNAVAIL = libc::EPROCUNAVAIL,
1673        ENOLCK = libc::ENOLCK,
1674        ENOSYS = libc::ENOSYS,
1675        EFTYPE = libc::EFTYPE,
1676        EAUTH = libc::EAUTH,
1677        ENEEDAUTH = libc::ENEEDAUTH,
1678        EIDRM = libc::EIDRM,
1679        ENOMSG = libc::ENOMSG,
1680        EOVERFLOW = libc::EOVERFLOW,
1681        ECANCELED = libc::ECANCELED,
1682        EILSEQ = libc::EILSEQ,
1683        ENOATTR = libc::ENOATTR,
1684        EDOOFUS = libc::EDOOFUS,
1685        EBADMSG = libc::EBADMSG,
1686        EMULTIHOP = libc::EMULTIHOP,
1687        ENOLINK = libc::ENOLINK,
1688        EPROTO = libc::EPROTO,
1689        ENOMEDIUM = libc::ENOMEDIUM,
1690        ENOTRECOVERABLE = libc::ENOTRECOVERABLE,
1691        EOWNERDEAD = libc::EOWNERDEAD,
1692        EASYNC = libc::EASYNC,
1693    }
1694
1695    impl Errno {
1696        pub const ELAST: Errno = Errno::EASYNC;
1697        pub const EWOULDBLOCK: Errno = Errno::EAGAIN;
1698        pub const EDEADLOCK: Errno = Errno::EDEADLK;
1699        pub const EOPNOTSUPP: Errno = Errno::ENOTSUP;
1700    }
1701
1702    #[deprecated(
1703        since = "0.28.0",
1704        note = "please use `Errno::from_raw()` instead"
1705    )]
1706    pub const fn from_i32(e: i32) -> Errno {
1707        use self::Errno::*;
1708
1709        match e {
1710            libc::EPERM => EPERM,
1711            libc::ENOENT => ENOENT,
1712            libc::ESRCH => ESRCH,
1713            libc::EINTR => EINTR,
1714            libc::EIO => EIO,
1715            libc::ENXIO => ENXIO,
1716            libc::E2BIG => E2BIG,
1717            libc::ENOEXEC => ENOEXEC,
1718            libc::EBADF => EBADF,
1719            libc::ECHILD => ECHILD,
1720            libc::EDEADLK => EDEADLK,
1721            libc::ENOMEM => ENOMEM,
1722            libc::EACCES => EACCES,
1723            libc::EFAULT => EFAULT,
1724            libc::ENOTBLK => ENOTBLK,
1725            libc::EBUSY => EBUSY,
1726            libc::EEXIST => EEXIST,
1727            libc::EXDEV => EXDEV,
1728            libc::ENODEV => ENODEV,
1729            libc::ENOTDIR => ENOTDIR,
1730            libc::EISDIR => EISDIR,
1731            libc::EINVAL => EINVAL,
1732            libc::ENFILE => ENFILE,
1733            libc::EMFILE => EMFILE,
1734            libc::ENOTTY => ENOTTY,
1735            libc::ETXTBSY => ETXTBSY,
1736            libc::EFBIG => EFBIG,
1737            libc::ENOSPC => ENOSPC,
1738            libc::ESPIPE => ESPIPE,
1739            libc::EROFS => EROFS,
1740            libc::EMLINK => EMLINK,
1741            libc::EPIPE => EPIPE,
1742            libc::EDOM => EDOM,
1743            libc::ERANGE => ERANGE,
1744            libc::EAGAIN => EAGAIN,
1745            libc::EINPROGRESS => EINPROGRESS,
1746            libc::EALREADY => EALREADY,
1747            libc::ENOTSOCK => ENOTSOCK,
1748            libc::EDESTADDRREQ => EDESTADDRREQ,
1749            libc::EMSGSIZE => EMSGSIZE,
1750            libc::EPROTOTYPE => EPROTOTYPE,
1751            libc::ENOPROTOOPT => ENOPROTOOPT,
1752            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
1753            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
1754            libc::ENOTSUP => ENOTSUP,
1755            libc::EPFNOSUPPORT => EPFNOSUPPORT,
1756            libc::EAFNOSUPPORT => EAFNOSUPPORT,
1757            libc::EADDRINUSE => EADDRINUSE,
1758            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
1759            libc::ENETDOWN => ENETDOWN,
1760            libc::ENETUNREACH => ENETUNREACH,
1761            libc::ENETRESET => ENETRESET,
1762            libc::ECONNABORTED => ECONNABORTED,
1763            libc::ECONNRESET => ECONNRESET,
1764            libc::ENOBUFS => ENOBUFS,
1765            libc::EISCONN => EISCONN,
1766            libc::ENOTCONN => ENOTCONN,
1767            libc::ESHUTDOWN => ESHUTDOWN,
1768            libc::ETOOMANYREFS => ETOOMANYREFS,
1769            libc::ETIMEDOUT => ETIMEDOUT,
1770            libc::ECONNREFUSED => ECONNREFUSED,
1771            libc::ELOOP => ELOOP,
1772            libc::ENAMETOOLONG => ENAMETOOLONG,
1773            libc::EHOSTDOWN => EHOSTDOWN,
1774            libc::EHOSTUNREACH => EHOSTUNREACH,
1775            libc::ENOTEMPTY => ENOTEMPTY,
1776            libc::EPROCLIM => EPROCLIM,
1777            libc::EUSERS => EUSERS,
1778            libc::EDQUOT => EDQUOT,
1779            libc::ESTALE => ESTALE,
1780            libc::EREMOTE => EREMOTE,
1781            libc::EBADRPC => EBADRPC,
1782            libc::ERPCMISMATCH => ERPCMISMATCH,
1783            libc::EPROGUNAVAIL => EPROGUNAVAIL,
1784            libc::EPROGMISMATCH => EPROGMISMATCH,
1785            libc::EPROCUNAVAIL => EPROCUNAVAIL,
1786            libc::ENOLCK => ENOLCK,
1787            libc::ENOSYS => ENOSYS,
1788            libc::EFTYPE => EFTYPE,
1789            libc::EAUTH => EAUTH,
1790            libc::ENEEDAUTH => ENEEDAUTH,
1791            libc::EIDRM => EIDRM,
1792            libc::ENOMSG => ENOMSG,
1793            libc::EOVERFLOW => EOVERFLOW,
1794            libc::ECANCELED => ECANCELED,
1795            libc::EILSEQ => EILSEQ,
1796            libc::ENOATTR => ENOATTR,
1797            libc::EDOOFUS => EDOOFUS,
1798            libc::EBADMSG => EBADMSG,
1799            libc::EMULTIHOP => EMULTIHOP,
1800            libc::ENOLINK => ENOLINK,
1801            libc::EPROTO => EPROTO,
1802            libc::ENOMEDIUM => ENOMEDIUM,
1803            libc::EASYNC => EASYNC,
1804            _ => UnknownErrno,
1805        }
1806    }
1807}
1808
1809#[cfg(target_os = "openbsd")]
1810mod consts {
1811    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1812    #[repr(i32)]
1813    #[non_exhaustive]
1814    pub enum Errno {
1815        UnknownErrno = 0,
1816        EPERM = libc::EPERM,
1817        ENOENT = libc::ENOENT,
1818        ESRCH = libc::ESRCH,
1819        EINTR = libc::EINTR,
1820        EIO = libc::EIO,
1821        ENXIO = libc::ENXIO,
1822        E2BIG = libc::E2BIG,
1823        ENOEXEC = libc::ENOEXEC,
1824        EBADF = libc::EBADF,
1825        ECHILD = libc::ECHILD,
1826        EDEADLK = libc::EDEADLK,
1827        ENOMEM = libc::ENOMEM,
1828        EACCES = libc::EACCES,
1829        EFAULT = libc::EFAULT,
1830        ENOTBLK = libc::ENOTBLK,
1831        EBUSY = libc::EBUSY,
1832        EEXIST = libc::EEXIST,
1833        EXDEV = libc::EXDEV,
1834        ENODEV = libc::ENODEV,
1835        ENOTDIR = libc::ENOTDIR,
1836        EISDIR = libc::EISDIR,
1837        EINVAL = libc::EINVAL,
1838        ENFILE = libc::ENFILE,
1839        EMFILE = libc::EMFILE,
1840        ENOTTY = libc::ENOTTY,
1841        ETXTBSY = libc::ETXTBSY,
1842        EFBIG = libc::EFBIG,
1843        ENOSPC = libc::ENOSPC,
1844        ESPIPE = libc::ESPIPE,
1845        EROFS = libc::EROFS,
1846        EMLINK = libc::EMLINK,
1847        EPIPE = libc::EPIPE,
1848        EDOM = libc::EDOM,
1849        ERANGE = libc::ERANGE,
1850        EAGAIN = libc::EAGAIN,
1851        EINPROGRESS = libc::EINPROGRESS,
1852        EALREADY = libc::EALREADY,
1853        ENOTSOCK = libc::ENOTSOCK,
1854        EDESTADDRREQ = libc::EDESTADDRREQ,
1855        EMSGSIZE = libc::EMSGSIZE,
1856        EPROTOTYPE = libc::EPROTOTYPE,
1857        ENOPROTOOPT = libc::ENOPROTOOPT,
1858        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
1859        ESOCKTNOSUPPORT = libc::ESOCKTNOSUPPORT,
1860        EOPNOTSUPP = libc::EOPNOTSUPP,
1861        EPFNOSUPPORT = libc::EPFNOSUPPORT,
1862        EAFNOSUPPORT = libc::EAFNOSUPPORT,
1863        EADDRINUSE = libc::EADDRINUSE,
1864        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
1865        ENETDOWN = libc::ENETDOWN,
1866        ENETUNREACH = libc::ENETUNREACH,
1867        ENETRESET = libc::ENETRESET,
1868        ECONNABORTED = libc::ECONNABORTED,
1869        ECONNRESET = libc::ECONNRESET,
1870        ENOBUFS = libc::ENOBUFS,
1871        EISCONN = libc::EISCONN,
1872        ENOTCONN = libc::ENOTCONN,
1873        ESHUTDOWN = libc::ESHUTDOWN,
1874        ETOOMANYREFS = libc::ETOOMANYREFS,
1875        ETIMEDOUT = libc::ETIMEDOUT,
1876        ECONNREFUSED = libc::ECONNREFUSED,
1877        ELOOP = libc::ELOOP,
1878        ENAMETOOLONG = libc::ENAMETOOLONG,
1879        EHOSTDOWN = libc::EHOSTDOWN,
1880        EHOSTUNREACH = libc::EHOSTUNREACH,
1881        ENOTEMPTY = libc::ENOTEMPTY,
1882        EPROCLIM = libc::EPROCLIM,
1883        EUSERS = libc::EUSERS,
1884        EDQUOT = libc::EDQUOT,
1885        ESTALE = libc::ESTALE,
1886        EREMOTE = libc::EREMOTE,
1887        EBADRPC = libc::EBADRPC,
1888        ERPCMISMATCH = libc::ERPCMISMATCH,
1889        EPROGUNAVAIL = libc::EPROGUNAVAIL,
1890        EPROGMISMATCH = libc::EPROGMISMATCH,
1891        EPROCUNAVAIL = libc::EPROCUNAVAIL,
1892        ENOLCK = libc::ENOLCK,
1893        ENOSYS = libc::ENOSYS,
1894        EFTYPE = libc::EFTYPE,
1895        EAUTH = libc::EAUTH,
1896        ENEEDAUTH = libc::ENEEDAUTH,
1897        EIPSEC = libc::EIPSEC,
1898        ENOATTR = libc::ENOATTR,
1899        EILSEQ = libc::EILSEQ,
1900        ENOMEDIUM = libc::ENOMEDIUM,
1901        EMEDIUMTYPE = libc::EMEDIUMTYPE,
1902        EOVERFLOW = libc::EOVERFLOW,
1903        ECANCELED = libc::ECANCELED,
1904        EIDRM = libc::EIDRM,
1905        ENOMSG = libc::ENOMSG,
1906        ENOTSUP = libc::ENOTSUP,
1907        EBADMSG = libc::EBADMSG,
1908        ENOTRECOVERABLE = libc::ENOTRECOVERABLE,
1909        EOWNERDEAD = libc::EOWNERDEAD,
1910        EPROTO = libc::EPROTO,
1911    }
1912
1913    impl Errno {
1914        pub const ELAST: Errno = Errno::ENOTSUP;
1915        pub const EWOULDBLOCK: Errno = Errno::EAGAIN;
1916    }
1917
1918    #[deprecated(
1919        since = "0.28.0",
1920        note = "please use `Errno::from_raw()` instead"
1921    )]
1922    pub const fn from_i32(e: i32) -> Errno {
1923        use self::Errno::*;
1924
1925        match e {
1926            libc::EPERM => EPERM,
1927            libc::ENOENT => ENOENT,
1928            libc::ESRCH => ESRCH,
1929            libc::EINTR => EINTR,
1930            libc::EIO => EIO,
1931            libc::ENXIO => ENXIO,
1932            libc::E2BIG => E2BIG,
1933            libc::ENOEXEC => ENOEXEC,
1934            libc::EBADF => EBADF,
1935            libc::ECHILD => ECHILD,
1936            libc::EDEADLK => EDEADLK,
1937            libc::ENOMEM => ENOMEM,
1938            libc::EACCES => EACCES,
1939            libc::EFAULT => EFAULT,
1940            libc::ENOTBLK => ENOTBLK,
1941            libc::EBUSY => EBUSY,
1942            libc::EEXIST => EEXIST,
1943            libc::EXDEV => EXDEV,
1944            libc::ENODEV => ENODEV,
1945            libc::ENOTDIR => ENOTDIR,
1946            libc::EISDIR => EISDIR,
1947            libc::EINVAL => EINVAL,
1948            libc::ENFILE => ENFILE,
1949            libc::EMFILE => EMFILE,
1950            libc::ENOTTY => ENOTTY,
1951            libc::ETXTBSY => ETXTBSY,
1952            libc::EFBIG => EFBIG,
1953            libc::ENOSPC => ENOSPC,
1954            libc::ESPIPE => ESPIPE,
1955            libc::EROFS => EROFS,
1956            libc::EMLINK => EMLINK,
1957            libc::EPIPE => EPIPE,
1958            libc::EDOM => EDOM,
1959            libc::ERANGE => ERANGE,
1960            libc::EAGAIN => EAGAIN,
1961            libc::EINPROGRESS => EINPROGRESS,
1962            libc::EALREADY => EALREADY,
1963            libc::ENOTSOCK => ENOTSOCK,
1964            libc::EDESTADDRREQ => EDESTADDRREQ,
1965            libc::EMSGSIZE => EMSGSIZE,
1966            libc::EPROTOTYPE => EPROTOTYPE,
1967            libc::ENOPROTOOPT => ENOPROTOOPT,
1968            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
1969            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
1970            libc::EOPNOTSUPP => EOPNOTSUPP,
1971            libc::EPFNOSUPPORT => EPFNOSUPPORT,
1972            libc::EAFNOSUPPORT => EAFNOSUPPORT,
1973            libc::EADDRINUSE => EADDRINUSE,
1974            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
1975            libc::ENETDOWN => ENETDOWN,
1976            libc::ENETUNREACH => ENETUNREACH,
1977            libc::ENETRESET => ENETRESET,
1978            libc::ECONNABORTED => ECONNABORTED,
1979            libc::ECONNRESET => ECONNRESET,
1980            libc::ENOBUFS => ENOBUFS,
1981            libc::EISCONN => EISCONN,
1982            libc::ENOTCONN => ENOTCONN,
1983            libc::ESHUTDOWN => ESHUTDOWN,
1984            libc::ETOOMANYREFS => ETOOMANYREFS,
1985            libc::ETIMEDOUT => ETIMEDOUT,
1986            libc::ECONNREFUSED => ECONNREFUSED,
1987            libc::ELOOP => ELOOP,
1988            libc::ENAMETOOLONG => ENAMETOOLONG,
1989            libc::EHOSTDOWN => EHOSTDOWN,
1990            libc::EHOSTUNREACH => EHOSTUNREACH,
1991            libc::ENOTEMPTY => ENOTEMPTY,
1992            libc::EPROCLIM => EPROCLIM,
1993            libc::EUSERS => EUSERS,
1994            libc::EDQUOT => EDQUOT,
1995            libc::ESTALE => ESTALE,
1996            libc::EREMOTE => EREMOTE,
1997            libc::EBADRPC => EBADRPC,
1998            libc::ERPCMISMATCH => ERPCMISMATCH,
1999            libc::EPROGUNAVAIL => EPROGUNAVAIL,
2000            libc::EPROGMISMATCH => EPROGMISMATCH,
2001            libc::EPROCUNAVAIL => EPROCUNAVAIL,
2002            libc::ENOLCK => ENOLCK,
2003            libc::ENOSYS => ENOSYS,
2004            libc::EFTYPE => EFTYPE,
2005            libc::EAUTH => EAUTH,
2006            libc::ENEEDAUTH => ENEEDAUTH,
2007            libc::EIPSEC => EIPSEC,
2008            libc::ENOATTR => ENOATTR,
2009            libc::EILSEQ => EILSEQ,
2010            libc::ENOMEDIUM => ENOMEDIUM,
2011            libc::EMEDIUMTYPE => EMEDIUMTYPE,
2012            libc::EOVERFLOW => EOVERFLOW,
2013            libc::ECANCELED => ECANCELED,
2014            libc::EIDRM => EIDRM,
2015            libc::ENOMSG => ENOMSG,
2016            libc::ENOTSUP => ENOTSUP,
2017            libc::EBADMSG => EBADMSG,
2018            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
2019            libc::EOWNERDEAD => EOWNERDEAD,
2020            libc::EPROTO => EPROTO,
2021            _ => UnknownErrno,
2022        }
2023    }
2024}
2025
2026#[cfg(target_os = "netbsd")]
2027mod consts {
2028    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2029    #[repr(i32)]
2030    #[non_exhaustive]
2031    pub enum Errno {
2032        UnknownErrno = 0,
2033        EPERM = libc::EPERM,
2034        ENOENT = libc::ENOENT,
2035        ESRCH = libc::ESRCH,
2036        EINTR = libc::EINTR,
2037        EIO = libc::EIO,
2038        ENXIO = libc::ENXIO,
2039        E2BIG = libc::E2BIG,
2040        ENOEXEC = libc::ENOEXEC,
2041        EBADF = libc::EBADF,
2042        ECHILD = libc::ECHILD,
2043        EDEADLK = libc::EDEADLK,
2044        ENOMEM = libc::ENOMEM,
2045        EACCES = libc::EACCES,
2046        EFAULT = libc::EFAULT,
2047        ENOTBLK = libc::ENOTBLK,
2048        EBUSY = libc::EBUSY,
2049        EEXIST = libc::EEXIST,
2050        EXDEV = libc::EXDEV,
2051        ENODEV = libc::ENODEV,
2052        ENOTDIR = libc::ENOTDIR,
2053        EISDIR = libc::EISDIR,
2054        EINVAL = libc::EINVAL,
2055        ENFILE = libc::ENFILE,
2056        EMFILE = libc::EMFILE,
2057        ENOTTY = libc::ENOTTY,
2058        ETXTBSY = libc::ETXTBSY,
2059        EFBIG = libc::EFBIG,
2060        ENOSPC = libc::ENOSPC,
2061        ESPIPE = libc::ESPIPE,
2062        EROFS = libc::EROFS,
2063        EMLINK = libc::EMLINK,
2064        EPIPE = libc::EPIPE,
2065        EDOM = libc::EDOM,
2066        ERANGE = libc::ERANGE,
2067        EAGAIN = libc::EAGAIN,
2068        EINPROGRESS = libc::EINPROGRESS,
2069        EALREADY = libc::EALREADY,
2070        ENOTSOCK = libc::ENOTSOCK,
2071        EDESTADDRREQ = libc::EDESTADDRREQ,
2072        EMSGSIZE = libc::EMSGSIZE,
2073        EPROTOTYPE = libc::EPROTOTYPE,
2074        ENOPROTOOPT = libc::ENOPROTOOPT,
2075        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
2076        ESOCKTNOSUPPORT = libc::ESOCKTNOSUPPORT,
2077        EOPNOTSUPP = libc::EOPNOTSUPP,
2078        EPFNOSUPPORT = libc::EPFNOSUPPORT,
2079        EAFNOSUPPORT = libc::EAFNOSUPPORT,
2080        EADDRINUSE = libc::EADDRINUSE,
2081        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
2082        ENETDOWN = libc::ENETDOWN,
2083        ENETUNREACH = libc::ENETUNREACH,
2084        ENETRESET = libc::ENETRESET,
2085        ECONNABORTED = libc::ECONNABORTED,
2086        ECONNRESET = libc::ECONNRESET,
2087        ENOBUFS = libc::ENOBUFS,
2088        EISCONN = libc::EISCONN,
2089        ENOTCONN = libc::ENOTCONN,
2090        ESHUTDOWN = libc::ESHUTDOWN,
2091        ETOOMANYREFS = libc::ETOOMANYREFS,
2092        ETIMEDOUT = libc::ETIMEDOUT,
2093        ECONNREFUSED = libc::ECONNREFUSED,
2094        ELOOP = libc::ELOOP,
2095        ENAMETOOLONG = libc::ENAMETOOLONG,
2096        EHOSTDOWN = libc::EHOSTDOWN,
2097        EHOSTUNREACH = libc::EHOSTUNREACH,
2098        ENOTEMPTY = libc::ENOTEMPTY,
2099        EPROCLIM = libc::EPROCLIM,
2100        EUSERS = libc::EUSERS,
2101        EDQUOT = libc::EDQUOT,
2102        ESTALE = libc::ESTALE,
2103        EREMOTE = libc::EREMOTE,
2104        EBADRPC = libc::EBADRPC,
2105        ERPCMISMATCH = libc::ERPCMISMATCH,
2106        EPROGUNAVAIL = libc::EPROGUNAVAIL,
2107        EPROGMISMATCH = libc::EPROGMISMATCH,
2108        EPROCUNAVAIL = libc::EPROCUNAVAIL,
2109        ENOLCK = libc::ENOLCK,
2110        ENOSYS = libc::ENOSYS,
2111        EFTYPE = libc::EFTYPE,
2112        EAUTH = libc::EAUTH,
2113        ENEEDAUTH = libc::ENEEDAUTH,
2114        EIDRM = libc::EIDRM,
2115        ENOMSG = libc::ENOMSG,
2116        EOVERFLOW = libc::EOVERFLOW,
2117        EILSEQ = libc::EILSEQ,
2118        ENOTSUP = libc::ENOTSUP,
2119        ECANCELED = libc::ECANCELED,
2120        EBADMSG = libc::EBADMSG,
2121        ENODATA = libc::ENODATA,
2122        ENOSR = libc::ENOSR,
2123        ENOSTR = libc::ENOSTR,
2124        ETIME = libc::ETIME,
2125        ENOATTR = libc::ENOATTR,
2126        EMULTIHOP = libc::EMULTIHOP,
2127        ENOLINK = libc::ENOLINK,
2128        EPROTO = libc::EPROTO,
2129    }
2130
2131    impl Errno {
2132        pub const ELAST: Errno = Errno::ENOTSUP;
2133        pub const EWOULDBLOCK: Errno = Errno::EAGAIN;
2134    }
2135
2136    #[deprecated(
2137        since = "0.28.0",
2138        note = "please use `Errno::from_raw()` instead"
2139    )]
2140    pub const fn from_i32(e: i32) -> Errno {
2141        use self::Errno::*;
2142
2143        match e {
2144            libc::EPERM => EPERM,
2145            libc::ENOENT => ENOENT,
2146            libc::ESRCH => ESRCH,
2147            libc::EINTR => EINTR,
2148            libc::EIO => EIO,
2149            libc::ENXIO => ENXIO,
2150            libc::E2BIG => E2BIG,
2151            libc::ENOEXEC => ENOEXEC,
2152            libc::EBADF => EBADF,
2153            libc::ECHILD => ECHILD,
2154            libc::EDEADLK => EDEADLK,
2155            libc::ENOMEM => ENOMEM,
2156            libc::EACCES => EACCES,
2157            libc::EFAULT => EFAULT,
2158            libc::ENOTBLK => ENOTBLK,
2159            libc::EBUSY => EBUSY,
2160            libc::EEXIST => EEXIST,
2161            libc::EXDEV => EXDEV,
2162            libc::ENODEV => ENODEV,
2163            libc::ENOTDIR => ENOTDIR,
2164            libc::EISDIR => EISDIR,
2165            libc::EINVAL => EINVAL,
2166            libc::ENFILE => ENFILE,
2167            libc::EMFILE => EMFILE,
2168            libc::ENOTTY => ENOTTY,
2169            libc::ETXTBSY => ETXTBSY,
2170            libc::EFBIG => EFBIG,
2171            libc::ENOSPC => ENOSPC,
2172            libc::ESPIPE => ESPIPE,
2173            libc::EROFS => EROFS,
2174            libc::EMLINK => EMLINK,
2175            libc::EPIPE => EPIPE,
2176            libc::EDOM => EDOM,
2177            libc::ERANGE => ERANGE,
2178            libc::EAGAIN => EAGAIN,
2179            libc::EINPROGRESS => EINPROGRESS,
2180            libc::EALREADY => EALREADY,
2181            libc::ENOTSOCK => ENOTSOCK,
2182            libc::EDESTADDRREQ => EDESTADDRREQ,
2183            libc::EMSGSIZE => EMSGSIZE,
2184            libc::EPROTOTYPE => EPROTOTYPE,
2185            libc::ENOPROTOOPT => ENOPROTOOPT,
2186            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
2187            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
2188            libc::EOPNOTSUPP => EOPNOTSUPP,
2189            libc::EPFNOSUPPORT => EPFNOSUPPORT,
2190            libc::EAFNOSUPPORT => EAFNOSUPPORT,
2191            libc::EADDRINUSE => EADDRINUSE,
2192            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
2193            libc::ENETDOWN => ENETDOWN,
2194            libc::ENETUNREACH => ENETUNREACH,
2195            libc::ENETRESET => ENETRESET,
2196            libc::ECONNABORTED => ECONNABORTED,
2197            libc::ECONNRESET => ECONNRESET,
2198            libc::ENOBUFS => ENOBUFS,
2199            libc::EISCONN => EISCONN,
2200            libc::ENOTCONN => ENOTCONN,
2201            libc::ESHUTDOWN => ESHUTDOWN,
2202            libc::ETOOMANYREFS => ETOOMANYREFS,
2203            libc::ETIMEDOUT => ETIMEDOUT,
2204            libc::ECONNREFUSED => ECONNREFUSED,
2205            libc::ELOOP => ELOOP,
2206            libc::ENAMETOOLONG => ENAMETOOLONG,
2207            libc::EHOSTDOWN => EHOSTDOWN,
2208            libc::EHOSTUNREACH => EHOSTUNREACH,
2209            libc::ENOTEMPTY => ENOTEMPTY,
2210            libc::EPROCLIM => EPROCLIM,
2211            libc::EUSERS => EUSERS,
2212            libc::EDQUOT => EDQUOT,
2213            libc::ESTALE => ESTALE,
2214            libc::EREMOTE => EREMOTE,
2215            libc::EBADRPC => EBADRPC,
2216            libc::ERPCMISMATCH => ERPCMISMATCH,
2217            libc::EPROGUNAVAIL => EPROGUNAVAIL,
2218            libc::EPROGMISMATCH => EPROGMISMATCH,
2219            libc::EPROCUNAVAIL => EPROCUNAVAIL,
2220            libc::ENOLCK => ENOLCK,
2221            libc::ENOSYS => ENOSYS,
2222            libc::EFTYPE => EFTYPE,
2223            libc::EAUTH => EAUTH,
2224            libc::ENEEDAUTH => ENEEDAUTH,
2225            libc::EIDRM => EIDRM,
2226            libc::ENOMSG => ENOMSG,
2227            libc::EOVERFLOW => EOVERFLOW,
2228            libc::EILSEQ => EILSEQ,
2229            libc::ENOTSUP => ENOTSUP,
2230            libc::ECANCELED => ECANCELED,
2231            libc::EBADMSG => EBADMSG,
2232            libc::ENODATA => ENODATA,
2233            libc::ENOSR => ENOSR,
2234            libc::ENOSTR => ENOSTR,
2235            libc::ETIME => ETIME,
2236            libc::ENOATTR => ENOATTR,
2237            libc::EMULTIHOP => EMULTIHOP,
2238            libc::ENOLINK => ENOLINK,
2239            libc::EPROTO => EPROTO,
2240            _ => UnknownErrno,
2241        }
2242    }
2243}
2244
2245#[cfg(target_os = "redox")]
2246mod consts {
2247    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2248    #[repr(i32)]
2249    #[non_exhaustive]
2250    pub enum Errno {
2251        UnknownErrno = 0,
2252        EPERM = libc::EPERM,
2253        ENOENT = libc::ENOENT,
2254        ESRCH = libc::ESRCH,
2255        EINTR = libc::EINTR,
2256        EIO = libc::EIO,
2257        ENXIO = libc::ENXIO,
2258        E2BIG = libc::E2BIG,
2259        ENOEXEC = libc::ENOEXEC,
2260        EBADF = libc::EBADF,
2261        ECHILD = libc::ECHILD,
2262        EDEADLK = libc::EDEADLK,
2263        ENOMEM = libc::ENOMEM,
2264        EACCES = libc::EACCES,
2265        EFAULT = libc::EFAULT,
2266        ENOTBLK = libc::ENOTBLK,
2267        EBUSY = libc::EBUSY,
2268        EEXIST = libc::EEXIST,
2269        EXDEV = libc::EXDEV,
2270        ENODEV = libc::ENODEV,
2271        ENOTDIR = libc::ENOTDIR,
2272        EISDIR = libc::EISDIR,
2273        EINVAL = libc::EINVAL,
2274        ENFILE = libc::ENFILE,
2275        EMFILE = libc::EMFILE,
2276        ENOTTY = libc::ENOTTY,
2277        ETXTBSY = libc::ETXTBSY,
2278        EFBIG = libc::EFBIG,
2279        ENOSPC = libc::ENOSPC,
2280        ESPIPE = libc::ESPIPE,
2281        EROFS = libc::EROFS,
2282        EMLINK = libc::EMLINK,
2283        EPIPE = libc::EPIPE,
2284        EDOM = libc::EDOM,
2285        ERANGE = libc::ERANGE,
2286        EAGAIN = libc::EAGAIN,
2287        EINPROGRESS = libc::EINPROGRESS,
2288        EALREADY = libc::EALREADY,
2289        ENOTSOCK = libc::ENOTSOCK,
2290        EDESTADDRREQ = libc::EDESTADDRREQ,
2291        EMSGSIZE = libc::EMSGSIZE,
2292        EPROTOTYPE = libc::EPROTOTYPE,
2293        ENOPROTOOPT = libc::ENOPROTOOPT,
2294        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
2295        ESOCKTNOSUPPORT = libc::ESOCKTNOSUPPORT,
2296        EOPNOTSUPP = libc::EOPNOTSUPP,
2297        EPFNOSUPPORT = libc::EPFNOSUPPORT,
2298        EAFNOSUPPORT = libc::EAFNOSUPPORT,
2299        EADDRINUSE = libc::EADDRINUSE,
2300        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
2301        ENETDOWN = libc::ENETDOWN,
2302        ENETUNREACH = libc::ENETUNREACH,
2303        ENETRESET = libc::ENETRESET,
2304        ECONNABORTED = libc::ECONNABORTED,
2305        ECONNRESET = libc::ECONNRESET,
2306        ENOBUFS = libc::ENOBUFS,
2307        EISCONN = libc::EISCONN,
2308        ENOTCONN = libc::ENOTCONN,
2309        ESHUTDOWN = libc::ESHUTDOWN,
2310        ETOOMANYREFS = libc::ETOOMANYREFS,
2311        ETIMEDOUT = libc::ETIMEDOUT,
2312        ECONNREFUSED = libc::ECONNREFUSED,
2313        ELOOP = libc::ELOOP,
2314        ENAMETOOLONG = libc::ENAMETOOLONG,
2315        EHOSTDOWN = libc::EHOSTDOWN,
2316        EHOSTUNREACH = libc::EHOSTUNREACH,
2317        ENOTEMPTY = libc::ENOTEMPTY,
2318        EUSERS = libc::EUSERS,
2319        EDQUOT = libc::EDQUOT,
2320        ESTALE = libc::ESTALE,
2321        EREMOTE = libc::EREMOTE,
2322        ENOLCK = libc::ENOLCK,
2323        ENOSYS = libc::ENOSYS,
2324        EIDRM = libc::EIDRM,
2325        ENOMSG = libc::ENOMSG,
2326        EOVERFLOW = libc::EOVERFLOW,
2327        EILSEQ = libc::EILSEQ,
2328        ECANCELED = libc::ECANCELED,
2329        EBADMSG = libc::EBADMSG,
2330        ENODATA = libc::ENODATA,
2331        ENOSR = libc::ENOSR,
2332        ENOSTR = libc::ENOSTR,
2333        ETIME = libc::ETIME,
2334        EMULTIHOP = libc::EMULTIHOP,
2335        ENOLINK = libc::ENOLINK,
2336        EPROTO = libc::EPROTO,
2337    }
2338
2339    impl Errno {
2340        pub const EWOULDBLOCK: Errno = Errno::EAGAIN;
2341    }
2342
2343    #[deprecated(
2344        since = "0.28.0",
2345        note = "please use `Errno::from_raw()` instead"
2346    )]
2347    pub const fn from_i32(e: i32) -> Errno {
2348        use self::Errno::*;
2349
2350        match e {
2351            libc::EPERM => EPERM,
2352            libc::ENOENT => ENOENT,
2353            libc::ESRCH => ESRCH,
2354            libc::EINTR => EINTR,
2355            libc::EIO => EIO,
2356            libc::ENXIO => ENXIO,
2357            libc::E2BIG => E2BIG,
2358            libc::ENOEXEC => ENOEXEC,
2359            libc::EBADF => EBADF,
2360            libc::ECHILD => ECHILD,
2361            libc::EDEADLK => EDEADLK,
2362            libc::ENOMEM => ENOMEM,
2363            libc::EACCES => EACCES,
2364            libc::EFAULT => EFAULT,
2365            libc::ENOTBLK => ENOTBLK,
2366            libc::EBUSY => EBUSY,
2367            libc::EEXIST => EEXIST,
2368            libc::EXDEV => EXDEV,
2369            libc::ENODEV => ENODEV,
2370            libc::ENOTDIR => ENOTDIR,
2371            libc::EISDIR => EISDIR,
2372            libc::EINVAL => EINVAL,
2373            libc::ENFILE => ENFILE,
2374            libc::EMFILE => EMFILE,
2375            libc::ENOTTY => ENOTTY,
2376            libc::ETXTBSY => ETXTBSY,
2377            libc::EFBIG => EFBIG,
2378            libc::ENOSPC => ENOSPC,
2379            libc::ESPIPE => ESPIPE,
2380            libc::EROFS => EROFS,
2381            libc::EMLINK => EMLINK,
2382            libc::EPIPE => EPIPE,
2383            libc::EDOM => EDOM,
2384            libc::ERANGE => ERANGE,
2385            libc::EAGAIN => EAGAIN,
2386            libc::EINPROGRESS => EINPROGRESS,
2387            libc::EALREADY => EALREADY,
2388            libc::ENOTSOCK => ENOTSOCK,
2389            libc::EDESTADDRREQ => EDESTADDRREQ,
2390            libc::EMSGSIZE => EMSGSIZE,
2391            libc::EPROTOTYPE => EPROTOTYPE,
2392            libc::ENOPROTOOPT => ENOPROTOOPT,
2393            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
2394            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
2395            libc::EOPNOTSUPP => EOPNOTSUPP,
2396            libc::EPFNOSUPPORT => EPFNOSUPPORT,
2397            libc::EAFNOSUPPORT => EAFNOSUPPORT,
2398            libc::EADDRINUSE => EADDRINUSE,
2399            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
2400            libc::ENETDOWN => ENETDOWN,
2401            libc::ENETUNREACH => ENETUNREACH,
2402            libc::ENETRESET => ENETRESET,
2403            libc::ECONNABORTED => ECONNABORTED,
2404            libc::ECONNRESET => ECONNRESET,
2405            libc::ENOBUFS => ENOBUFS,
2406            libc::EISCONN => EISCONN,
2407            libc::ENOTCONN => ENOTCONN,
2408            libc::ESHUTDOWN => ESHUTDOWN,
2409            libc::ETOOMANYREFS => ETOOMANYREFS,
2410            libc::ETIMEDOUT => ETIMEDOUT,
2411            libc::ECONNREFUSED => ECONNREFUSED,
2412            libc::ELOOP => ELOOP,
2413            libc::ENAMETOOLONG => ENAMETOOLONG,
2414            libc::EHOSTDOWN => EHOSTDOWN,
2415            libc::EHOSTUNREACH => EHOSTUNREACH,
2416            libc::ENOTEMPTY => ENOTEMPTY,
2417            libc::EUSERS => EUSERS,
2418            libc::EDQUOT => EDQUOT,
2419            libc::ESTALE => ESTALE,
2420            libc::EREMOTE => EREMOTE,
2421            libc::ENOLCK => ENOLCK,
2422            libc::ENOSYS => ENOSYS,
2423            libc::EIDRM => EIDRM,
2424            libc::ENOMSG => ENOMSG,
2425            libc::EOVERFLOW => EOVERFLOW,
2426            libc::EILSEQ => EILSEQ,
2427            libc::ECANCELED => ECANCELED,
2428            libc::EBADMSG => EBADMSG,
2429            libc::ENODATA => ENODATA,
2430            libc::ENOSR => ENOSR,
2431            libc::ENOSTR => ENOSTR,
2432            libc::ETIME => ETIME,
2433            libc::EMULTIHOP => EMULTIHOP,
2434            libc::ENOLINK => ENOLINK,
2435            libc::EPROTO => EPROTO,
2436            _ => UnknownErrno,
2437        }
2438    }
2439}
2440
2441#[cfg(solarish)]
2442mod consts {
2443    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2444    #[repr(i32)]
2445    #[non_exhaustive]
2446    pub enum Errno {
2447        UnknownErrno = 0,
2448        EPERM = libc::EPERM,
2449        ENOENT = libc::ENOENT,
2450        ESRCH = libc::ESRCH,
2451        EINTR = libc::EINTR,
2452        EIO = libc::EIO,
2453        ENXIO = libc::ENXIO,
2454        E2BIG = libc::E2BIG,
2455        ENOEXEC = libc::ENOEXEC,
2456        EBADF = libc::EBADF,
2457        ECHILD = libc::ECHILD,
2458        EAGAIN = libc::EAGAIN,
2459        ENOMEM = libc::ENOMEM,
2460        EACCES = libc::EACCES,
2461        EFAULT = libc::EFAULT,
2462        ENOTBLK = libc::ENOTBLK,
2463        EBUSY = libc::EBUSY,
2464        EEXIST = libc::EEXIST,
2465        EXDEV = libc::EXDEV,
2466        ENODEV = libc::ENODEV,
2467        ENOTDIR = libc::ENOTDIR,
2468        EISDIR = libc::EISDIR,
2469        EINVAL = libc::EINVAL,
2470        ENFILE = libc::ENFILE,
2471        EMFILE = libc::EMFILE,
2472        ENOTTY = libc::ENOTTY,
2473        ETXTBSY = libc::ETXTBSY,
2474        EFBIG = libc::EFBIG,
2475        ENOSPC = libc::ENOSPC,
2476        ESPIPE = libc::ESPIPE,
2477        EROFS = libc::EROFS,
2478        EMLINK = libc::EMLINK,
2479        EPIPE = libc::EPIPE,
2480        EDOM = libc::EDOM,
2481        ERANGE = libc::ERANGE,
2482        ENOMSG = libc::ENOMSG,
2483        EIDRM = libc::EIDRM,
2484        ECHRNG = libc::ECHRNG,
2485        EL2NSYNC = libc::EL2NSYNC,
2486        EL3HLT = libc::EL3HLT,
2487        EL3RST = libc::EL3RST,
2488        ELNRNG = libc::ELNRNG,
2489        EUNATCH = libc::EUNATCH,
2490        ENOCSI = libc::ENOCSI,
2491        EL2HLT = libc::EL2HLT,
2492        EDEADLK = libc::EDEADLK,
2493        ENOLCK = libc::ENOLCK,
2494        ECANCELED = libc::ECANCELED,
2495        ENOTSUP = libc::ENOTSUP,
2496        EDQUOT = libc::EDQUOT,
2497        EBADE = libc::EBADE,
2498        EBADR = libc::EBADR,
2499        EXFULL = libc::EXFULL,
2500        ENOANO = libc::ENOANO,
2501        EBADRQC = libc::EBADRQC,
2502        EBADSLT = libc::EBADSLT,
2503        EDEADLOCK = libc::EDEADLOCK,
2504        EBFONT = libc::EBFONT,
2505        EOWNERDEAD = libc::EOWNERDEAD,
2506        ENOTRECOVERABLE = libc::ENOTRECOVERABLE,
2507        ENOSTR = libc::ENOSTR,
2508        ENODATA = libc::ENODATA,
2509        ETIME = libc::ETIME,
2510        ENOSR = libc::ENOSR,
2511        ENONET = libc::ENONET,
2512        ENOPKG = libc::ENOPKG,
2513        EREMOTE = libc::EREMOTE,
2514        ENOLINK = libc::ENOLINK,
2515        EADV = libc::EADV,
2516        ESRMNT = libc::ESRMNT,
2517        ECOMM = libc::ECOMM,
2518        EPROTO = libc::EPROTO,
2519        ELOCKUNMAPPED = libc::ELOCKUNMAPPED,
2520        ENOTACTIVE = libc::ENOTACTIVE,
2521        EMULTIHOP = libc::EMULTIHOP,
2522        EBADMSG = libc::EBADMSG,
2523        ENAMETOOLONG = libc::ENAMETOOLONG,
2524        EOVERFLOW = libc::EOVERFLOW,
2525        ENOTUNIQ = libc::ENOTUNIQ,
2526        EBADFD = libc::EBADFD,
2527        EREMCHG = libc::EREMCHG,
2528        ELIBACC = libc::ELIBACC,
2529        ELIBBAD = libc::ELIBBAD,
2530        ELIBSCN = libc::ELIBSCN,
2531        ELIBMAX = libc::ELIBMAX,
2532        ELIBEXEC = libc::ELIBEXEC,
2533        EILSEQ = libc::EILSEQ,
2534        ENOSYS = libc::ENOSYS,
2535        ELOOP = libc::ELOOP,
2536        ERESTART = libc::ERESTART,
2537        ESTRPIPE = libc::ESTRPIPE,
2538        ENOTEMPTY = libc::ENOTEMPTY,
2539        EUSERS = libc::EUSERS,
2540        ENOTSOCK = libc::ENOTSOCK,
2541        EDESTADDRREQ = libc::EDESTADDRREQ,
2542        EMSGSIZE = libc::EMSGSIZE,
2543        EPROTOTYPE = libc::EPROTOTYPE,
2544        ENOPROTOOPT = libc::ENOPROTOOPT,
2545        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
2546        ESOCKTNOSUPPORT = libc::ESOCKTNOSUPPORT,
2547        EOPNOTSUPP = libc::EOPNOTSUPP,
2548        EPFNOSUPPORT = libc::EPFNOSUPPORT,
2549        EAFNOSUPPORT = libc::EAFNOSUPPORT,
2550        EADDRINUSE = libc::EADDRINUSE,
2551        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
2552        ENETDOWN = libc::ENETDOWN,
2553        ENETUNREACH = libc::ENETUNREACH,
2554        ENETRESET = libc::ENETRESET,
2555        ECONNABORTED = libc::ECONNABORTED,
2556        ECONNRESET = libc::ECONNRESET,
2557        ENOBUFS = libc::ENOBUFS,
2558        EISCONN = libc::EISCONN,
2559        ENOTCONN = libc::ENOTCONN,
2560        ESHUTDOWN = libc::ESHUTDOWN,
2561        ETOOMANYREFS = libc::ETOOMANYREFS,
2562        ETIMEDOUT = libc::ETIMEDOUT,
2563        ECONNREFUSED = libc::ECONNREFUSED,
2564        EHOSTDOWN = libc::EHOSTDOWN,
2565        EHOSTUNREACH = libc::EHOSTUNREACH,
2566        EALREADY = libc::EALREADY,
2567        EINPROGRESS = libc::EINPROGRESS,
2568        ESTALE = libc::ESTALE,
2569    }
2570
2571    impl Errno {
2572        pub const ELAST: Errno = Errno::ESTALE;
2573        pub const EWOULDBLOCK: Errno = Errno::EAGAIN;
2574    }
2575
2576    #[deprecated(
2577        since = "0.28.0",
2578        note = "please use `Errno::from_raw()` instead"
2579    )]
2580    pub const fn from_i32(e: i32) -> Errno {
2581        use self::Errno::*;
2582
2583        match e {
2584            libc::EPERM => EPERM,
2585            libc::ENOENT => ENOENT,
2586            libc::ESRCH => ESRCH,
2587            libc::EINTR => EINTR,
2588            libc::EIO => EIO,
2589            libc::ENXIO => ENXIO,
2590            libc::E2BIG => E2BIG,
2591            libc::ENOEXEC => ENOEXEC,
2592            libc::EBADF => EBADF,
2593            libc::ECHILD => ECHILD,
2594            libc::EAGAIN => EAGAIN,
2595            libc::ENOMEM => ENOMEM,
2596            libc::EACCES => EACCES,
2597            libc::EFAULT => EFAULT,
2598            libc::ENOTBLK => ENOTBLK,
2599            libc::EBUSY => EBUSY,
2600            libc::EEXIST => EEXIST,
2601            libc::EXDEV => EXDEV,
2602            libc::ENODEV => ENODEV,
2603            libc::ENOTDIR => ENOTDIR,
2604            libc::EISDIR => EISDIR,
2605            libc::EINVAL => EINVAL,
2606            libc::ENFILE => ENFILE,
2607            libc::EMFILE => EMFILE,
2608            libc::ENOTTY => ENOTTY,
2609            libc::ETXTBSY => ETXTBSY,
2610            libc::EFBIG => EFBIG,
2611            libc::ENOSPC => ENOSPC,
2612            libc::ESPIPE => ESPIPE,
2613            libc::EROFS => EROFS,
2614            libc::EMLINK => EMLINK,
2615            libc::EPIPE => EPIPE,
2616            libc::EDOM => EDOM,
2617            libc::ERANGE => ERANGE,
2618            libc::ENOMSG => ENOMSG,
2619            libc::EIDRM => EIDRM,
2620            libc::ECHRNG => ECHRNG,
2621            libc::EL2NSYNC => EL2NSYNC,
2622            libc::EL3HLT => EL3HLT,
2623            libc::EL3RST => EL3RST,
2624            libc::ELNRNG => ELNRNG,
2625            libc::EUNATCH => EUNATCH,
2626            libc::ENOCSI => ENOCSI,
2627            libc::EL2HLT => EL2HLT,
2628            libc::EDEADLK => EDEADLK,
2629            libc::ENOLCK => ENOLCK,
2630            libc::ECANCELED => ECANCELED,
2631            libc::ENOTSUP => ENOTSUP,
2632            libc::EDQUOT => EDQUOT,
2633            libc::EBADE => EBADE,
2634            libc::EBADR => EBADR,
2635            libc::EXFULL => EXFULL,
2636            libc::ENOANO => ENOANO,
2637            libc::EBADRQC => EBADRQC,
2638            libc::EBADSLT => EBADSLT,
2639            libc::EDEADLOCK => EDEADLOCK,
2640            libc::EBFONT => EBFONT,
2641            libc::EOWNERDEAD => EOWNERDEAD,
2642            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
2643            libc::ENOSTR => ENOSTR,
2644            libc::ENODATA => ENODATA,
2645            libc::ETIME => ETIME,
2646            libc::ENOSR => ENOSR,
2647            libc::ENONET => ENONET,
2648            libc::ENOPKG => ENOPKG,
2649            libc::EREMOTE => EREMOTE,
2650            libc::ENOLINK => ENOLINK,
2651            libc::EADV => EADV,
2652            libc::ESRMNT => ESRMNT,
2653            libc::ECOMM => ECOMM,
2654            libc::EPROTO => EPROTO,
2655            libc::ELOCKUNMAPPED => ELOCKUNMAPPED,
2656            libc::ENOTACTIVE => ENOTACTIVE,
2657            libc::EMULTIHOP => EMULTIHOP,
2658            libc::EBADMSG => EBADMSG,
2659            libc::ENAMETOOLONG => ENAMETOOLONG,
2660            libc::EOVERFLOW => EOVERFLOW,
2661            libc::ENOTUNIQ => ENOTUNIQ,
2662            libc::EBADFD => EBADFD,
2663            libc::EREMCHG => EREMCHG,
2664            libc::ELIBACC => ELIBACC,
2665            libc::ELIBBAD => ELIBBAD,
2666            libc::ELIBSCN => ELIBSCN,
2667            libc::ELIBMAX => ELIBMAX,
2668            libc::ELIBEXEC => ELIBEXEC,
2669            libc::EILSEQ => EILSEQ,
2670            libc::ENOSYS => ENOSYS,
2671            libc::ELOOP => ELOOP,
2672            libc::ERESTART => ERESTART,
2673            libc::ESTRPIPE => ESTRPIPE,
2674            libc::ENOTEMPTY => ENOTEMPTY,
2675            libc::EUSERS => EUSERS,
2676            libc::ENOTSOCK => ENOTSOCK,
2677            libc::EDESTADDRREQ => EDESTADDRREQ,
2678            libc::EMSGSIZE => EMSGSIZE,
2679            libc::EPROTOTYPE => EPROTOTYPE,
2680            libc::ENOPROTOOPT => ENOPROTOOPT,
2681            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
2682            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
2683            libc::EOPNOTSUPP => EOPNOTSUPP,
2684            libc::EPFNOSUPPORT => EPFNOSUPPORT,
2685            libc::EAFNOSUPPORT => EAFNOSUPPORT,
2686            libc::EADDRINUSE => EADDRINUSE,
2687            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
2688            libc::ENETDOWN => ENETDOWN,
2689            libc::ENETUNREACH => ENETUNREACH,
2690            libc::ENETRESET => ENETRESET,
2691            libc::ECONNABORTED => ECONNABORTED,
2692            libc::ECONNRESET => ECONNRESET,
2693            libc::ENOBUFS => ENOBUFS,
2694            libc::EISCONN => EISCONN,
2695            libc::ENOTCONN => ENOTCONN,
2696            libc::ESHUTDOWN => ESHUTDOWN,
2697            libc::ETOOMANYREFS => ETOOMANYREFS,
2698            libc::ETIMEDOUT => ETIMEDOUT,
2699            libc::ECONNREFUSED => ECONNREFUSED,
2700            libc::EHOSTDOWN => EHOSTDOWN,
2701            libc::EHOSTUNREACH => EHOSTUNREACH,
2702            libc::EALREADY => EALREADY,
2703            libc::EINPROGRESS => EINPROGRESS,
2704            libc::ESTALE => ESTALE,
2705            _ => UnknownErrno,
2706        }
2707    }
2708}
2709
2710#[cfg(target_os = "haiku")]
2711mod consts {
2712    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2713    #[repr(i32)]
2714    #[non_exhaustive]
2715    pub enum Errno {
2716        UnknownErrno = 0,
2717        EPERM = libc::EPERM,
2718        ENOENT = libc::ENOENT,
2719        ESRCH = libc::ESRCH,
2720        EINTR = libc::EINTR,
2721        EIO = libc::EIO,
2722        ENXIO = libc::ENXIO,
2723        E2BIG = libc::E2BIG,
2724        ENOEXEC = libc::ENOEXEC,
2725        EBADF = libc::EBADF,
2726        ECHILD = libc::ECHILD,
2727        EDEADLK = libc::EDEADLK,
2728        ENOMEM = libc::ENOMEM,
2729        EACCES = libc::EACCES,
2730        EFAULT = libc::EFAULT,
2731        EBUSY = libc::EBUSY,
2732        EEXIST = libc::EEXIST,
2733        EXDEV = libc::EXDEV,
2734        ENODEV = libc::ENODEV,
2735        ENOTDIR = libc::ENOTDIR,
2736        EISDIR = libc::EISDIR,
2737        EINVAL = libc::EINVAL,
2738        ENFILE = libc::ENFILE,
2739        EMFILE = libc::EMFILE,
2740        ENOTTY = libc::ENOTTY,
2741        ETXTBSY = libc::ETXTBSY,
2742        EFBIG = libc::EFBIG,
2743        ENOSPC = libc::ENOSPC,
2744        ESPIPE = libc::ESPIPE,
2745        EROFS = libc::EROFS,
2746        EMLINK = libc::EMLINK,
2747        EPIPE = libc::EPIPE,
2748        EDOM = libc::EDOM,
2749        ERANGE = libc::ERANGE,
2750        EAGAIN = libc::EAGAIN,
2751        EINPROGRESS = libc::EINPROGRESS,
2752        EALREADY = libc::EALREADY,
2753        ENOTSOCK = libc::ENOTSOCK,
2754        EDESTADDRREQ = libc::EDESTADDRREQ,
2755        EMSGSIZE = libc::EMSGSIZE,
2756        EPROTOTYPE = libc::EPROTOTYPE,
2757        ENOPROTOOPT = libc::ENOPROTOOPT,
2758        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
2759        ENOTSUP = libc::ENOTSUP,
2760        EADDRINUSE = libc::EADDRINUSE,
2761        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
2762        ENETDOWN = libc::ENETDOWN,
2763        ENETUNREACH = libc::ENETUNREACH,
2764        ENETRESET = libc::ENETRESET,
2765        ECONNABORTED = libc::ECONNABORTED,
2766        ECONNRESET = libc::ECONNRESET,
2767        ENOBUFS = libc::ENOBUFS,
2768        EISCONN = libc::EISCONN,
2769        ENOTCONN = libc::ENOTCONN,
2770        ESHUTDOWN = libc::ESHUTDOWN,
2771        ETIMEDOUT = libc::ETIMEDOUT,
2772        ECONNREFUSED = libc::ECONNREFUSED,
2773        ELOOP = libc::ELOOP,
2774        ENAMETOOLONG = libc::ENAMETOOLONG,
2775        EHOSTDOWN = libc::EHOSTDOWN,
2776        EHOSTUNREACH = libc::EHOSTUNREACH,
2777        ENOTEMPTY = libc::ENOTEMPTY,
2778        EDQUOT = libc::EDQUOT,
2779        ESTALE = libc::ESTALE,
2780        ENOLCK = libc::ENOLCK,
2781        ENOSYS = libc::ENOSYS,
2782        EIDRM = libc::EIDRM,
2783        ENOMSG = libc::ENOMSG,
2784        EOVERFLOW = libc::EOVERFLOW,
2785        ECANCELED = libc::ECANCELED,
2786        EILSEQ = libc::EILSEQ,
2787        ENOATTR = libc::ENOATTR,
2788        EBADMSG = libc::EBADMSG,
2789        EMULTIHOP = libc::EMULTIHOP,
2790        ENOLINK = libc::ENOLINK,
2791        EPROTO = libc::EPROTO,
2792    }
2793
2794    impl Errno {
2795        pub const EWOULDBLOCK: Errno = Errno::EAGAIN;
2796        pub const EDEADLOCK: Errno = Errno::EDEADLK;
2797        pub const EOPNOTSUPP: Errno = Errno::ENOTSUP;
2798    }
2799
2800    #[deprecated(
2801        since = "0.28.0",
2802        note = "please use `Errno::from_raw()` instead"
2803    )]
2804    pub const fn from_i32(e: i32) -> Errno {
2805        use self::Errno::*;
2806
2807        match e {
2808            libc::EPERM => EPERM,
2809            libc::ENOENT => ENOENT,
2810            libc::ESRCH => ESRCH,
2811            libc::EINTR => EINTR,
2812            libc::EIO => EIO,
2813            libc::ENXIO => ENXIO,
2814            libc::E2BIG => E2BIG,
2815            libc::ENOEXEC => ENOEXEC,
2816            libc::EBADF => EBADF,
2817            libc::ECHILD => ECHILD,
2818            libc::EDEADLK => EDEADLK,
2819            libc::ENOMEM => ENOMEM,
2820            libc::EACCES => EACCES,
2821            libc::EFAULT => EFAULT,
2822            libc::EBUSY => EBUSY,
2823            libc::EEXIST => EEXIST,
2824            libc::EXDEV => EXDEV,
2825            libc::ENODEV => ENODEV,
2826            libc::ENOTDIR => ENOTDIR,
2827            libc::EISDIR => EISDIR,
2828            libc::EINVAL => EINVAL,
2829            libc::ENFILE => ENFILE,
2830            libc::EMFILE => EMFILE,
2831            libc::ENOTTY => ENOTTY,
2832            libc::ETXTBSY => ETXTBSY,
2833            libc::EFBIG => EFBIG,
2834            libc::ENOSPC => ENOSPC,
2835            libc::ESPIPE => ESPIPE,
2836            libc::EROFS => EROFS,
2837            libc::EMLINK => EMLINK,
2838            libc::EPIPE => EPIPE,
2839            libc::EDOM => EDOM,
2840            libc::ERANGE => ERANGE,
2841            libc::EAGAIN => EAGAIN,
2842            libc::EINPROGRESS => EINPROGRESS,
2843            libc::EALREADY => EALREADY,
2844            libc::ENOTSOCK => ENOTSOCK,
2845            libc::EDESTADDRREQ => EDESTADDRREQ,
2846            libc::EMSGSIZE => EMSGSIZE,
2847            libc::EPROTOTYPE => EPROTOTYPE,
2848            libc::ENOPROTOOPT => ENOPROTOOPT,
2849            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
2850            libc::ENOTSUP => ENOTSUP,
2851            libc::EADDRINUSE => EADDRINUSE,
2852            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
2853            libc::ENETDOWN => ENETDOWN,
2854            libc::ENETUNREACH => ENETUNREACH,
2855            libc::ENETRESET => ENETRESET,
2856            libc::ECONNABORTED => ECONNABORTED,
2857            libc::ECONNRESET => ECONNRESET,
2858            libc::ENOBUFS => ENOBUFS,
2859            libc::EISCONN => EISCONN,
2860            libc::ENOTCONN => ENOTCONN,
2861            libc::ESHUTDOWN => ESHUTDOWN,
2862            libc::ETIMEDOUT => ETIMEDOUT,
2863            libc::ECONNREFUSED => ECONNREFUSED,
2864            libc::ELOOP => ELOOP,
2865            libc::ENAMETOOLONG => ENAMETOOLONG,
2866            libc::EHOSTDOWN => EHOSTDOWN,
2867            libc::EHOSTUNREACH => EHOSTUNREACH,
2868            libc::ENOTEMPTY => ENOTEMPTY,
2869            libc::EDQUOT => EDQUOT,
2870            libc::ESTALE => ESTALE,
2871            libc::ENOLCK => ENOLCK,
2872            libc::ENOSYS => ENOSYS,
2873            libc::EIDRM => EIDRM,
2874            libc::ENOMSG => ENOMSG,
2875            libc::EOVERFLOW => EOVERFLOW,
2876            libc::ECANCELED => ECANCELED,
2877            libc::EILSEQ => EILSEQ,
2878            libc::ENOATTR => ENOATTR,
2879            libc::EBADMSG => EBADMSG,
2880            libc::EMULTIHOP => EMULTIHOP,
2881            libc::ENOLINK => ENOLINK,
2882            libc::EPROTO => EPROTO,
2883            _ => UnknownErrno,
2884        }
2885    }
2886}
2887
2888#[cfg(target_os = "aix")]
2889mod consts {
2890    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2891    #[repr(i32)]
2892    #[non_exhaustive]
2893    pub enum Errno {
2894        UnknownErrno = 0,
2895        EPERM = libc::EPERM,
2896        ENOENT = libc::ENOENT,
2897        ESRCH = libc::ESRCH,
2898        EINTR = libc::EINTR,
2899        EIO = libc::EIO,
2900        ENXIO = libc::ENXIO,
2901        E2BIG = libc::E2BIG,
2902        ENOEXEC = libc::ENOEXEC,
2903        EBADF = libc::EBADF,
2904        ECHILD = libc::ECHILD,
2905        EAGAIN = libc::EAGAIN,
2906        ENOMEM = libc::ENOMEM,
2907        EACCES = libc::EACCES,
2908        EFAULT = libc::EFAULT,
2909        ENOTBLK = libc::ENOTBLK,
2910        EBUSY = libc::EBUSY,
2911        EEXIST = libc::EEXIST,
2912        EXDEV = libc::EXDEV,
2913        ENODEV = libc::ENODEV,
2914        ENOTDIR = libc::ENOTDIR,
2915        EISDIR = libc::EISDIR,
2916        EINVAL = libc::EINVAL,
2917        ENFILE = libc::ENFILE,
2918        EMFILE = libc::EMFILE,
2919        ENOTTY = libc::ENOTTY,
2920        ETXTBSY = libc::ETXTBSY,
2921        EFBIG = libc::EFBIG,
2922        ENOSPC = libc::ENOSPC,
2923        ESPIPE = libc::ESPIPE,
2924        EROFS = libc::EROFS,
2925        EMLINK = libc::EMLINK,
2926        EPIPE = libc::EPIPE,
2927        EDOM = libc::EDOM,
2928        ERANGE = libc::ERANGE,
2929        EDEADLK = libc::EDEADLK,
2930        ENAMETOOLONG = libc::ENAMETOOLONG,
2931        ENOLCK = libc::ENOLCK,
2932        ENOSYS = libc::ENOSYS,
2933        ENOTEMPTY = libc::ENOTEMPTY,
2934        ELOOP = libc::ELOOP,
2935        ENOMSG = libc::ENOMSG,
2936        EIDRM = libc::EIDRM,
2937        EINPROGRESS = libc::EINPROGRESS,
2938        EALREADY = libc::EALREADY,
2939        ENOTSOCK = libc::ENOTSOCK,
2940        EDESTADDRREQ = libc::EDESTADDRREQ,
2941        EMSGSIZE = libc::EMSGSIZE,
2942        EPROTOTYPE = libc::EPROTOTYPE,
2943        ENOPROTOOPT = libc::ENOPROTOOPT,
2944        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
2945        ESOCKTNOSUPPORT = libc::ESOCKTNOSUPPORT,
2946        EPFNOSUPPORT = libc::EPFNOSUPPORT,
2947        EAFNOSUPPORT = libc::EAFNOSUPPORT,
2948        EADDRINUSE = libc::EADDRINUSE,
2949        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
2950        ENETDOWN = libc::ENETDOWN,
2951        ENETUNREACH = libc::ENETUNREACH,
2952        ENETRESET = libc::ENETRESET,
2953        ECONNABORTED = libc::ECONNABORTED,
2954        ECONNRESET = libc::ECONNRESET,
2955        ENOBUFS = libc::ENOBUFS,
2956        EISCONN = libc::EISCONN,
2957        ENOTCONN = libc::ENOTCONN,
2958        ESHUTDOWN = libc::ESHUTDOWN,
2959        ETOOMANYREFS = libc::ETOOMANYREFS,
2960        ETIMEDOUT = libc::ETIMEDOUT,
2961        ECONNREFUSED = libc::ECONNREFUSED,
2962        EHOSTDOWN = libc::EHOSTDOWN,
2963        EHOSTUNREACH = libc::EHOSTUNREACH,
2964        ECHRNG = libc::ECHRNG,
2965        EL2NSYNC = libc::EL2NSYNC,
2966        EL3HLT = libc::EL3HLT,
2967        EL3RST = libc::EL3RST,
2968        ELNRNG = libc::ELNRNG,
2969        EUNATCH = libc::EUNATCH,
2970        ENOCSI = libc::ENOCSI,
2971        EL2HLT = libc::EL2HLT,
2972        ENOLINK = libc::ENOLINK,
2973        EPROTO = libc::EPROTO,
2974        EMULTIHOP = libc::EMULTIHOP,
2975        EBADMSG = libc::EBADMSG,
2976        EOVERFLOW = libc::EOVERFLOW,
2977        EILSEQ = libc::EILSEQ,
2978        ERESTART = libc::ERESTART,
2979        EOWNERDEAD = libc::EOWNERDEAD,
2980        ENOTRECOVERABLE = libc::ENOTRECOVERABLE,
2981        ENOTSUP = libc::ENOTSUP,
2982        EPROCLIM = libc::EPROCLIM,
2983        EUSERS = libc::EUSERS,
2984        EDQUOT = libc::EDQUOT,
2985        ESTALE = libc::ESTALE,
2986        EREMOTE = libc::EREMOTE,
2987        ECANCELED = libc::ECANCELED,
2988        ENODATA = libc::ENODATA,
2989        ENOSR = libc::ENOSR,
2990        ENOSTR = libc::ENOSTR,
2991        ETIME = libc::ETIME,
2992        EOPNOTSUPP = libc::EOPNOTSUPP,
2993    }
2994
2995    #[deprecated(
2996        since = "0.28.0",
2997        note = "please use `Errno::from_raw()` instead"
2998    )]
2999    pub const fn from_i32(e: i32) -> Errno {
3000        use self::Errno::*;
3001
3002        match e {
3003            libc::EPERM => EPERM,
3004            libc::ENOENT => ENOENT,
3005            libc::ESRCH => ESRCH,
3006            libc::EINTR => EINTR,
3007            libc::EIO => EIO,
3008            libc::ENXIO => ENXIO,
3009            libc::E2BIG => E2BIG,
3010            libc::ENOEXEC => ENOEXEC,
3011            libc::EBADF => EBADF,
3012            libc::ECHILD => ECHILD,
3013            libc::EAGAIN => EAGAIN,
3014            libc::ENOMEM => ENOMEM,
3015            libc::EACCES => EACCES,
3016            libc::EFAULT => EFAULT,
3017            libc::ENOTBLK => ENOTBLK,
3018            libc::EBUSY => EBUSY,
3019            libc::EEXIST => EEXIST,
3020            libc::EXDEV => EXDEV,
3021            libc::ENODEV => ENODEV,
3022            libc::ENOTDIR => ENOTDIR,
3023            libc::EISDIR => EISDIR,
3024            libc::EINVAL => EINVAL,
3025            libc::ENFILE => ENFILE,
3026            libc::EMFILE => EMFILE,
3027            libc::ENOTTY => ENOTTY,
3028            libc::ETXTBSY => ETXTBSY,
3029            libc::EFBIG => EFBIG,
3030            libc::ENOSPC => ENOSPC,
3031            libc::ESPIPE => ESPIPE,
3032            libc::EROFS => EROFS,
3033            libc::EMLINK => EMLINK,
3034            libc::EPIPE => EPIPE,
3035            libc::EDOM => EDOM,
3036            libc::ERANGE => ERANGE,
3037            libc::EDEADLK => EDEADLK,
3038            libc::ENAMETOOLONG => ENAMETOOLONG,
3039            libc::ENOLCK => ENOLCK,
3040            libc::ENOSYS => ENOSYS,
3041            libc::ENOTEMPTY => ENOTEMPTY,
3042            libc::ELOOP => ELOOP,
3043            libc::ENOMSG => ENOMSG,
3044            libc::EIDRM => EIDRM,
3045            libc::EINPROGRESS => EINPROGRESS,
3046            libc::EALREADY => EALREADY,
3047            libc::ENOTSOCK => ENOTSOCK,
3048            libc::EDESTADDRREQ => EDESTADDRREQ,
3049            libc::EMSGSIZE => EMSGSIZE,
3050            libc::EPROTOTYPE => EPROTOTYPE,
3051            libc::ENOPROTOOPT => ENOPROTOOPT,
3052            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
3053            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
3054            libc::EPFNOSUPPORT => EPFNOSUPPORT,
3055            libc::EAFNOSUPPORT => EAFNOSUPPORT,
3056            libc::EADDRINUSE => EADDRINUSE,
3057            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
3058            libc::ENETDOWN => ENETDOWN,
3059            libc::ENETUNREACH => ENETUNREACH,
3060            libc::ENETRESET => ENETRESET,
3061            libc::ECONNABORTED => ECONNABORTED,
3062            libc::ECONNRESET => ECONNRESET,
3063            libc::ENOBUFS => ENOBUFS,
3064            libc::EISCONN => EISCONN,
3065            libc::ENOTCONN => ENOTCONN,
3066            libc::ESHUTDOWN => ESHUTDOWN,
3067            libc::ETOOMANYREFS => ETOOMANYREFS,
3068            libc::ETIMEDOUT => ETIMEDOUT,
3069            libc::ECONNREFUSED => ECONNREFUSED,
3070            libc::EHOSTDOWN => EHOSTDOWN,
3071            libc::EHOSTUNREACH => EHOSTUNREACH,
3072            libc::ECHRNG => ECHRNG,
3073            libc::EL2NSYNC => EL2NSYNC,
3074            libc::EL3HLT => EL3HLT,
3075            libc::EL3RST => EL3RST,
3076            libc::ELNRNG => ELNRNG,
3077            libc::EUNATCH => EUNATCH,
3078            libc::ENOCSI => ENOCSI,
3079            libc::EL2HLT => EL2HLT,
3080            libc::ENOLINK => ENOLINK,
3081            libc::EPROTO => EPROTO,
3082            libc::EMULTIHOP => EMULTIHOP,
3083            libc::EBADMSG => EBADMSG,
3084            libc::EOVERFLOW => EOVERFLOW,
3085            libc::EILSEQ => EILSEQ,
3086            libc::ERESTART => ERESTART,
3087            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
3088            libc::EOWNERDEAD => EOWNERDEAD,
3089            libc::ENOTSUP => ENOTSUP,
3090            libc::EPROCLIM => EPROCLIM,
3091            libc::EUSERS => EUSERS,
3092            libc::EDQUOT => EDQUOT,
3093            libc::ESTALE => ESTALE,
3094            libc::EREMOTE => EREMOTE,
3095            libc::ECANCELED => ECANCELED,
3096            libc::ENODATA => ENODATA,
3097            libc::ENOSR => ENOSR,
3098            libc::ENOSTR => ENOSTR,
3099            libc::ETIME => ETIME,
3100            libc::EOPNOTSUPP => EOPNOTSUPP,
3101            _ => UnknownErrno,
3102        }
3103    }
3104}
3105
3106#[cfg(target_os = "hurd")]
3107mod consts {
3108    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3109    #[repr(i32)]
3110    #[non_exhaustive]
3111    pub enum Errno {
3112        UnknownErrno = 0,
3113        EPERM = libc::EPERM,
3114        ENOENT = libc::ENOENT,
3115        ESRCH = libc::ESRCH,
3116        EINTR = libc::EINTR,
3117        EIO = libc::EIO,
3118        ENXIO = libc::ENXIO,
3119        E2BIG = libc::E2BIG,
3120        ENOEXEC = libc::ENOEXEC,
3121        EBADF = libc::EBADF,
3122        ECHILD = libc::ECHILD,
3123        EDEADLK = libc::EDEADLK,
3124        ENOMEM = libc::ENOMEM,
3125        EACCES = libc::EACCES,
3126        EFAULT = libc::EFAULT,
3127        ENOTBLK = libc::ENOTBLK,
3128        EBUSY = libc::EBUSY,
3129        EEXIST = libc::EEXIST,
3130        EXDEV = libc::EXDEV,
3131        ENODEV = libc::ENODEV,
3132        ENOTDIR = libc::ENOTDIR,
3133        EISDIR = libc::EISDIR,
3134        EINVAL = libc::EINVAL,
3135        EMFILE = libc::EMFILE,
3136        ENFILE = libc::ENFILE,
3137        ENOTTY = libc::ENOTTY,
3138        ETXTBSY = libc::ETXTBSY,
3139        EFBIG = libc::EFBIG,
3140        ENOSPC = libc::ENOSPC,
3141        ESPIPE = libc::ESPIPE,
3142        EROFS = libc::EROFS,
3143        EMLINK = libc::EMLINK,
3144        EPIPE = libc::EPIPE,
3145        EDOM = libc::EDOM,
3146        ERANGE = libc::ERANGE,
3147        EAGAIN = libc::EAGAIN,
3148        EINPROGRESS = libc::EINPROGRESS,
3149        EALREADY = libc::EALREADY,
3150        ENOTSOCK = libc::ENOTSOCK,
3151        EMSGSIZE = libc::EMSGSIZE,
3152        EPROTOTYPE = libc::EPROTOTYPE,
3153        ENOPROTOOPT = libc::ENOPROTOOPT,
3154        EPROTONOSUPPORT = libc::EPROTONOSUPPORT,
3155        ESOCKTNOSUPPORT = libc::ESOCKTNOSUPPORT,
3156        EOPNOTSUPP = libc::EOPNOTSUPP,
3157        EPFNOSUPPORT = libc::EPFNOSUPPORT,
3158        EAFNOSUPPORT = libc::EAFNOSUPPORT,
3159        EADDRINUSE = libc::EADDRINUSE,
3160        EADDRNOTAVAIL = libc::EADDRNOTAVAIL,
3161        ENETDOWN = libc::ENETDOWN,
3162        ENETUNREACH = libc::ENETUNREACH,
3163        ENETRESET = libc::ENETRESET,
3164        ECONNABORTED = libc::ECONNABORTED,
3165        ECONNRESET = libc::ECONNRESET,
3166        ENOBUFS = libc::ENOBUFS,
3167        EISCONN = libc::EISCONN,
3168        ENOTCONN = libc::ENOTCONN,
3169        EDESTADDRREQ = libc::EDESTADDRREQ,
3170        ESHUTDOWN = libc::ESHUTDOWN,
3171        ETOOMANYREFS = libc::ETOOMANYREFS,
3172        ETIMEDOUT = libc::ETIMEDOUT,
3173        ECONNREFUSED = libc::ECONNREFUSED,
3174        ELOOP = libc::ELOOP,
3175        ENAMETOOLONG = libc::ENAMETOOLONG,
3176        EHOSTDOWN = libc::EHOSTDOWN,
3177        EHOSTUNREACH = libc::EHOSTUNREACH,
3178        ENOTEMPTY = libc::ENOTEMPTY,
3179        EPROCLIM = libc::EPROCLIM,
3180        EUSERS = libc::EUSERS,
3181        EDQUOT = libc::EDQUOT,
3182        ESTALE = libc::ESTALE,
3183        EREMOTE = libc::EREMOTE,
3184        EBADRPC = libc::EBADRPC,
3185        ERPCMISMATCH = libc::ERPCMISMATCH,
3186        EPROGUNAVAIL = libc::EPROGUNAVAIL,
3187        EPROGMISMATCH = libc::EPROGMISMATCH,
3188        EPROCUNAVAIL = libc::EPROCUNAVAIL,
3189        ENOLCK = libc::ENOLCK,
3190        EFTYPE = libc::EFTYPE,
3191        EAUTH = libc::EAUTH,
3192        ENEEDAUTH = libc::ENEEDAUTH,
3193        ENOSYS = libc::ENOSYS,
3194        ELIBEXEC = libc::ELIBEXEC,
3195        ENOTSUP = libc::ENOTSUP,
3196        EILSEQ = libc::EILSEQ,
3197        EBACKGROUND = libc::EBACKGROUND,
3198        EDIED = libc::EDIED,
3199        EGREGIOUS = libc::EGREGIOUS,
3200        EIEIO = libc::EIEIO,
3201        EGRATUITOUS = libc::EGRATUITOUS,
3202        EBADMSG = libc::EBADMSG,
3203        EIDRM = libc::EIDRM,
3204        EMULTIHOP = libc::EMULTIHOP,
3205        ENODATA = libc::ENODATA,
3206        ENOLINK = libc::ENOLINK,
3207        ENOMSG = libc::ENOMSG,
3208        ENOSR = libc::ENOSR,
3209        ENOSTR = libc::ENOSTR,
3210        EOVERFLOW = libc::EOVERFLOW,
3211        EPROTO = libc::EPROTO,
3212        ETIME = libc::ETIME,
3213        ECANCELED = libc::ECANCELED,
3214        EOWNERDEAD = libc::EOWNERDEAD,
3215        ENOTRECOVERABLE = libc::ENOTRECOVERABLE,
3216    }
3217
3218    impl Errno {
3219        pub const EWOULDBLOCK: Errno = Errno::EAGAIN;
3220    }
3221
3222    #[deprecated(
3223        since = "0.28.0",
3224        note = "please use `Errno::from_raw()` instead"
3225    )]
3226    pub const fn from_i32(e: i32) -> Errno {
3227        use self::Errno::*;
3228
3229        match e {
3230            libc::EPERM => EPERM,
3231            libc::ENOENT => ENOENT,
3232            libc::ESRCH => ESRCH,
3233            libc::EINTR => EINTR,
3234            libc::EIO => EIO,
3235            libc::ENXIO => ENXIO,
3236            libc::E2BIG => E2BIG,
3237            libc::ENOEXEC => ENOEXEC,
3238            libc::EBADF => EBADF,
3239            libc::ECHILD => ECHILD,
3240            libc::EDEADLK => EDEADLK,
3241            libc::ENOMEM => ENOMEM,
3242            libc::EACCES => EACCES,
3243            libc::EFAULT => EFAULT,
3244            libc::ENOTBLK => ENOTBLK,
3245            libc::EBUSY => EBUSY,
3246            libc::EEXIST => EEXIST,
3247            libc::EXDEV => EXDEV,
3248            libc::ENODEV => ENODEV,
3249            libc::ENOTDIR => ENOTDIR,
3250            libc::EISDIR => EISDIR,
3251            libc::EINVAL => EINVAL,
3252            libc::EMFILE => EMFILE,
3253            libc::ENFILE => ENFILE,
3254            libc::ENOTTY => ENOTTY,
3255            libc::ETXTBSY => ETXTBSY,
3256            libc::EFBIG => EFBIG,
3257            libc::ENOSPC => ENOSPC,
3258            libc::ESPIPE => ESPIPE,
3259            libc::EROFS => EROFS,
3260            libc::EMLINK => EMLINK,
3261            libc::EPIPE => EPIPE,
3262            libc::EDOM => EDOM,
3263            libc::ERANGE => ERANGE,
3264            libc::EAGAIN => EAGAIN,
3265            libc::EINPROGRESS => EINPROGRESS,
3266            libc::EALREADY => EALREADY,
3267            libc::ENOTSOCK => ENOTSOCK,
3268            libc::EMSGSIZE => EMSGSIZE,
3269            libc::EPROTOTYPE => EPROTOTYPE,
3270            libc::ENOPROTOOPT => ENOPROTOOPT,
3271            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
3272            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
3273            libc::EOPNOTSUPP => EOPNOTSUPP,
3274            libc::EPFNOSUPPORT => EPFNOSUPPORT,
3275            libc::EAFNOSUPPORT => EAFNOSUPPORT,
3276            libc::EADDRINUSE => EADDRINUSE,
3277            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
3278            libc::ENETDOWN => ENETDOWN,
3279            libc::ENETUNREACH => ENETUNREACH,
3280            libc::ENETRESET => ENETRESET,
3281            libc::ECONNABORTED => ECONNABORTED,
3282            libc::ECONNRESET => ECONNRESET,
3283            libc::ENOBUFS => ENOBUFS,
3284            libc::EISCONN => EISCONN,
3285            libc::ENOTCONN => ENOTCONN,
3286            libc::EDESTADDRREQ => EDESTADDRREQ,
3287            libc::ESHUTDOWN => ESHUTDOWN,
3288            libc::ETOOMANYREFS => ETOOMANYREFS,
3289            libc::ETIMEDOUT => ETIMEDOUT,
3290            libc::ECONNREFUSED => ECONNREFUSED,
3291            libc::ELOOP => ELOOP,
3292            libc::ENAMETOOLONG => ENAMETOOLONG,
3293            libc::EHOSTDOWN => EHOSTDOWN,
3294            libc::EHOSTUNREACH => EHOSTUNREACH,
3295            libc::ENOTEMPTY => ENOTEMPTY,
3296            libc::EPROCLIM => EPROCLIM,
3297            libc::EUSERS => EUSERS,
3298            libc::EDQUOT => EDQUOT,
3299            libc::ESTALE => ESTALE,
3300            libc::EREMOTE => EREMOTE,
3301            libc::EBADRPC => EBADRPC,
3302            libc::ERPCMISMATCH => ERPCMISMATCH,
3303            libc::EPROGUNAVAIL => EPROGUNAVAIL,
3304            libc::EPROGMISMATCH => EPROGMISMATCH,
3305            libc::EPROCUNAVAIL => EPROCUNAVAIL,
3306            libc::ENOLCK => ENOLCK,
3307            libc::EFTYPE => EFTYPE,
3308            libc::EAUTH => EAUTH,
3309            libc::ENEEDAUTH => ENEEDAUTH,
3310            libc::ENOSYS => ENOSYS,
3311            libc::ELIBEXEC => ELIBEXEC,
3312            libc::ENOTSUP => ENOTSUP,
3313            libc::EILSEQ => EILSEQ,
3314            libc::EBACKGROUND => EBACKGROUND,
3315            libc::EDIED => EDIED,
3316            libc::EGREGIOUS => EGREGIOUS,
3317            libc::EIEIO => EIEIO,
3318            libc::EGRATUITOUS => EGRATUITOUS,
3319            libc::EBADMSG => EBADMSG,
3320            libc::EIDRM => EIDRM,
3321            libc::EMULTIHOP => EMULTIHOP,
3322            libc::ENODATA => ENODATA,
3323            libc::ENOLINK => ENOLINK,
3324            libc::ENOMSG => ENOMSG,
3325            libc::ENOSR => ENOSR,
3326            libc::ENOSTR => ENOSTR,
3327            libc::EOVERFLOW => EOVERFLOW,
3328            libc::EPROTO => EPROTO,
3329            libc::ETIME => ETIME,
3330            libc::ECANCELED => ECANCELED,
3331            libc::EOWNERDEAD => EOWNERDEAD,
3332            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
3333            _ => UnknownErrno,
3334        }
3335    }
3336}