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