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