Coverage Report

Created: 2024-09-08 06:35

/rust/registry/src/index.crates.io-6f17d22bba15001f/nix-0.28.0/src/errno.rs
Line
Count
Source (jump to first uncovered line)
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
0
        unsafe fn errno_location() -> *mut c_int {
37
0
            unsafe { libc::__errno_location() }
38
0
        }
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")]
56
0
pub fn errno() -> i32 {
57
0
    Errno::last_raw()
58
0
}
59
60
impl Errno {
61
    /// Returns the current value of errno
62
0
    pub fn last() -> Self {
63
0
        Self::from_raw(Self::last_raw())
64
0
    }
65
66
    /// Returns the current raw i32 value of errno
67
0
    pub fn last_raw() -> i32 {
68
0
        unsafe { *errno_location() }
69
0
    }
70
71
    /// Sets the value of errno.
72
    ///
73
    /// # Example
74
    /// ```
75
    /// use nix::errno::Errno;
76
    ///
77
    /// Errno::EIO.set();
78
    ///
79
    /// assert_eq!(Errno::last(), Errno::EIO);
80
    /// ```
81
0
    pub fn set(self) {
82
0
        Self::set_raw(self as i32)
83
0
    }
84
85
    /// Sets the raw i32 value of errno.
86
0
    pub fn set_raw(errno: i32) {
87
0
        // Safe because errno is a thread-local variable
88
0
        unsafe {
89
0
            *errno_location() = errno;
90
0
        }
91
0
    }
92
93
    #[deprecated(
94
        since = "0.28.0",
95
        note = "please use `Errno::from_raw()` instead"
96
    )]
97
0
    pub const fn from_i32(err: i32) -> Errno {
98
0
        Self::from_raw(err)
99
0
    }
100
101
0
    pub const fn from_raw(err: i32) -> Errno {
102
0
        #[allow(deprecated)]
103
0
        from_i32(err)
104
0
    }
105
106
0
    pub fn desc(self) -> &'static str {
107
0
        desc(self)
108
0
    }
109
110
    /// Sets the platform-specific errno to no-error
111
    ///
112
    /// ```
113
    /// use nix::errno::Errno;
114
    ///
115
    /// Errno::EIO.set();
116
    ///
117
    /// Errno::clear();
118
    ///
119
    /// let err = Errno::last();
120
    /// assert_ne!(err, Errno::EIO);
121
    /// assert_eq!(err, Errno::from_raw(0));
122
    /// ```
123
0
    pub fn clear() {
124
0
        Self::set_raw(0)
125
0
    }
126
127
    /// Returns `Ok(value)` if it does not contain the sentinel value. This
128
    /// should not be used when `-1` is not the errno sentinel value.
129
    #[inline]
130
0
    pub fn result<S: ErrnoSentinel + PartialEq<S>>(value: S) -> Result<S> {
131
0
        if value == S::sentinel() {
132
0
            Err(Self::last())
133
        } else {
134
0
            Ok(value)
135
        }
136
0
    }
Unexecuted instantiation: <nix::errno::consts::Errno>::result::<isize>
Unexecuted instantiation: <nix::errno::consts::Errno>::result::<i32>
Unexecuted instantiation: <nix::errno::consts::Errno>::result::<i64>
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 {
142
    fn sentinel() -> Self;
143
}
144
145
impl ErrnoSentinel for isize {
146
0
    fn sentinel() -> Self {
147
0
        -1
148
0
    }
149
}
150
151
impl ErrnoSentinel for i32 {
152
0
    fn sentinel() -> Self {
153
0
        -1
154
0
    }
155
}
156
157
impl ErrnoSentinel for i64 {
158
0
    fn sentinel() -> Self {
159
0
        -1
160
0
    }
161
}
162
163
impl ErrnoSentinel for *mut c_void {
164
0
    fn sentinel() -> Self {
165
0
        -1isize as *mut c_void
166
0
    }
167
}
168
169
impl ErrnoSentinel for libc::sighandler_t {
170
0
    fn sentinel() -> Self {
171
0
        libc::SIG_ERR
172
0
    }
173
}
174
175
impl error::Error for Errno {}
176
177
impl fmt::Display for Errno {
178
0
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
179
0
        write!(f, "{:?}: {}", self, self.desc())
180
0
    }
181
}
182
183
impl From<Errno> for io::Error {
184
0
    fn from(err: Errno) -> Self {
185
0
        io::Error::from_raw_os_error(err as i32)
186
0
    }
187
}
188
189
impl TryFrom<io::Error> for Errno {
190
    type Error = io::Error;
191
192
0
    fn try_from(ioerror: io::Error) -> std::result::Result<Self, io::Error> {
193
0
        ioerror.raw_os_error().map(Errno::from_raw).ok_or(ioerror)
194
0
    }
195
}
196
197
0
fn desc(errno: Errno) -> &'static str {
198
0
    use self::Errno::*;
199
0
    match errno {
200
0
        UnknownErrno => "Unknown errno",
201
0
        EPERM => "Operation not permitted",
202
0
        ENOENT => "No such file or directory",
203
0
        ESRCH => "No such process",
204
0
        EINTR => "Interrupted system call",
205
0
        EIO => "I/O error",
206
0
        ENXIO => "No such device or address",
207
0
        E2BIG => "Argument list too long",
208
0
        ENOEXEC => "Exec format error",
209
0
        EBADF => "Bad file number",
210
0
        ECHILD => "No child processes",
211
0
        EAGAIN => "Try again",
212
0
        ENOMEM => "Out of memory",
213
0
        EACCES => "Permission denied",
214
0
        EFAULT => "Bad address",
215
        #[cfg(not(target_os = "haiku"))]
216
0
        ENOTBLK => "Block device required",
217
0
        EBUSY => "Device or resource busy",
218
0
        EEXIST => "File exists",
219
0
        EXDEV => "Cross-device link",
220
0
        ENODEV => "No such device",
221
0
        ENOTDIR => "Not a directory",
222
0
        EISDIR => "Is a directory",
223
0
        EINVAL => "Invalid argument",
224
0
        ENFILE => "File table overflow",
225
0
        EMFILE => "Too many open files",
226
0
        ENOTTY => "Not a typewriter",
227
0
        ETXTBSY => "Text file busy",
228
0
        EFBIG => "File too large",
229
0
        ENOSPC => "No space left on device",
230
0
        ESPIPE => "Illegal seek",
231
0
        EROFS => "Read-only file system",
232
0
        EMLINK => "Too many links",
233
0
        EPIPE => "Broken pipe",
234
0
        EDOM => "Math argument out of domain of func",
235
0
        ERANGE => "Math result not representable",
236
0
        EDEADLK => "Resource deadlock would occur",
237
0
        ENAMETOOLONG => "File name too long",
238
0
        ENOLCK => "No record locks available",
239
0
        ENOSYS => "Function not implemented",
240
0
        ENOTEMPTY => "Directory not empty",
241
0
        ELOOP => "Too many symbolic links encountered",
242
0
        ENOMSG => "No message of desired type",
243
0
        EIDRM => "Identifier removed",
244
0
        EINPROGRESS => "Operation now in progress",
245
0
        EALREADY => "Operation already in progress",
246
0
        ENOTSOCK => "Socket operation on non-socket",
247
0
        EDESTADDRREQ => "Destination address required",
248
0
        EMSGSIZE => "Message too long",
249
0
        EPROTOTYPE => "Protocol wrong type for socket",
250
0
        ENOPROTOOPT => "Protocol not available",
251
0
        EPROTONOSUPPORT => "Protocol not supported",
252
        #[cfg(not(target_os = "haiku"))]
253
0
        ESOCKTNOSUPPORT => "Socket type not supported",
254
        #[cfg(not(target_os = "haiku"))]
255
0
        EPFNOSUPPORT => "Protocol family not supported",
256
        #[cfg(not(target_os = "haiku"))]
257
0
        EAFNOSUPPORT => "Address family not supported by protocol",
258
0
        EADDRINUSE => "Address already in use",
259
0
        EADDRNOTAVAIL => "Cannot assign requested address",
260
0
        ENETDOWN => "Network is down",
261
0
        ENETUNREACH => "Network is unreachable",
262
0
        ENETRESET => "Network dropped connection because of reset",
263
0
        ECONNABORTED => "Software caused connection abort",
264
0
        ECONNRESET => "Connection reset by peer",
265
0
        ENOBUFS => "No buffer space available",
266
0
        EISCONN => "Transport endpoint is already connected",
267
0
        ENOTCONN => "Transport endpoint is not connected",
268
0
        ESHUTDOWN => "Cannot send after transport endpoint shutdown",
269
        #[cfg(not(target_os = "haiku"))]
270
0
        ETOOMANYREFS => "Too many references: cannot splice",
271
0
        ETIMEDOUT => "Connection timed out",
272
0
        ECONNREFUSED => "Connection refused",
273
0
        EHOSTDOWN => "Host is down",
274
0
        EHOSTUNREACH => "No route to host",
275
276
        #[cfg(any(
277
            linux_android,
278
            solarish,
279
            target_os = "aix",
280
            target_os = "fuchsia"
281
        ))]
282
0
        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
0
        EL2NSYNC => "Level 2 not synchronized",
291
292
        #[cfg(any(
293
            linux_android,
294
            solarish,
295
            target_os = "aix",
296
            target_os = "fuchsia"
297
        ))]
298
0
        EL3HLT => "Level 3 halted",
299
300
        #[cfg(any(
301
            linux_android,
302
            solarish,
303
            target_os = "aix",
304
            target_os = "fuchsia"
305
        ))]
306
0
        EL3RST => "Level 3 reset",
307
308
        #[cfg(any(
309
            linux_android,
310
            solarish,
311
            target_os = "aix",
312
            target_os = "fuchsia"
313
        ))]
314
0
        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
0
        EUNATCH => "Protocol driver not attached",
323
324
        #[cfg(any(
325
            linux_android,
326
            solarish,
327
            target_os = "aix",
328
            target_os = "fuchsia"
329
        ))]
330
0
        ENOCSI => "No CSI structure available",
331
332
        #[cfg(any(
333
            linux_android,
334
            solarish,
335
            target_os = "aix",
336
            target_os = "fuchsia"
337
        ))]
338
0
        EL2HLT => "Level 2 halted",
339
340
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
341
0
        EBADE => "Invalid exchange",
342
343
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
344
0
        EBADR => "Invalid request descriptor",
345
346
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
347
0
        EXFULL => "Exchange full",
348
349
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
350
0
        ENOANO => "No anode",
351
352
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
353
0
        EBADRQC => "Invalid request code",
354
355
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
356
0
        EBADSLT => "Invalid slot",
357
358
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
359
0
        EBFONT => "Bad font file format",
360
361
        #[cfg(any(
362
            linux_android,
363
            solarish,
364
            target_os = "fuchsia",
365
            target_os = "hurd"
366
        ))]
367
0
        ENOSTR => "Device not a stream",
368
369
        #[cfg(any(
370
            linux_android,
371
            solarish,
372
            target_os = "fuchsia",
373
            target_os = "hurd"
374
        ))]
375
0
        ENODATA => "No data available",
376
377
        #[cfg(any(
378
            linux_android,
379
            solarish,
380
            target_os = "fuchsia",
381
            target_os = "hurd"
382
        ))]
383
0
        ETIME => "Timer expired",
384
385
        #[cfg(any(
386
            linux_android,
387
            solarish,
388
            target_os = "fuchsia",
389
            target_os = "hurd"
390
        ))]
391
0
        ENOSR => "Out of streams resources",
392
393
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
394
0
        ENONET => "Machine is not on the network",
395
396
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
397
0
        ENOPKG => "Package not installed",
398
399
        #[cfg(any(
400
            linux_android,
401
            solarish,
402
            target_os = "fuchsia",
403
            target_os = "hurd"
404
        ))]
405
0
        EREMOTE => "Object is remote",
406
407
        #[cfg(any(
408
            linux_android,
409
            solarish,
410
            target_os = "aix",
411
            target_os = "fuchsia"
412
        ))]
413
0
        ENOLINK => "Link has been severed",
414
415
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
416
0
        EADV => "Advertise error",
417
418
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
419
0
        ESRMNT => "Srmount error",
420
421
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
422
0
        ECOMM => "Communication error on send",
423
424
        #[cfg(any(
425
            linux_android,
426
            solarish,
427
            target_os = "aix",
428
            target_os = "fuchsia",
429
        ))]
430
0
        EPROTO => "Protocol error",
431
432
        #[cfg(any(
433
            linux_android,
434
            solarish,
435
            target_os = "aix",
436
            target_os = "fuchsia"
437
        ))]
438
0
        EMULTIHOP => "Multihop attempted",
439
440
        #[cfg(any(linux_android, target_os = "fuchsia"))]
441
0
        EDOTDOT => "RFS specific error",
442
443
        #[cfg(any(linux_android, target_os = "aix", target_os = "fuchsia"))]
444
0
        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
0
        EOVERFLOW => "Value too large for defined data type",
457
458
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
459
0
        ENOTUNIQ => "Name not unique on network",
460
461
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
462
0
        EBADFD => "File descriptor in bad state",
463
464
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
465
0
        EREMCHG => "Remote address changed",
466
467
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
468
0
        ELIBACC => "Can not access a needed shared library",
469
470
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
471
0
        ELIBBAD => "Accessing a corrupted shared library",
472
473
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
474
0
        ELIBSCN => ".lib section in a.out corrupted",
475
476
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
477
0
        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
0
        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
0
        EILSEQ => "Illegal byte sequence",
495
496
        #[cfg(any(
497
            linux_android,
498
            solarish,
499
            target_os = "aix",
500
            target_os = "fuchsia"
501
        ))]
502
0
        ERESTART => "Interrupted system call should be restarted",
503
504
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
505
0
        ESTRPIPE => "Streams pipe error",
506
507
        #[cfg(any(linux_android, solarish, target_os = "fuchsia"))]
508
0
        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
0
        EOPNOTSUPP => "Operation not supported on transport endpoint",
517
518
        #[cfg(any(linux_android, target_os = "fuchsia", target_os = "hurd"))]
519
0
        ESTALE => "Stale file handle",
520
521
        #[cfg(any(linux_android, target_os = "fuchsia"))]
522
0
        EUCLEAN => "Structure needs cleaning",
523
524
        #[cfg(any(linux_android, target_os = "fuchsia"))]
525
0
        ENOTNAM => "Not a XENIX named type file",
526
527
        #[cfg(any(linux_android, target_os = "fuchsia"))]
528
0
        ENAVAIL => "No XENIX semaphores available",
529
530
        #[cfg(any(linux_android, target_os = "fuchsia"))]
531
0
        EISNAM => "Is a named type file",
532
533
        #[cfg(any(linux_android, target_os = "fuchsia"))]
534
0
        EREMOTEIO => "Remote I/O error",
535
536
        #[cfg(any(linux_android, target_os = "fuchsia"))]
537
0
        EDQUOT => "Quota exceeded",
538
539
        #[cfg(any(
540
            linux_android,
541
            target_os = "fuchsia",
542
            target_os = "openbsd",
543
            target_os = "dragonfly"
544
        ))]
545
0
        ENOMEDIUM => "No medium found",
546
547
        #[cfg(any(
548
            linux_android,
549
            target_os = "fuchsia",
550
            target_os = "openbsd"
551
        ))]
552
0
        EMEDIUMTYPE => "Wrong medium type",
553
554
        #[cfg(any(
555
            linux_android,
556
            solarish,
557
            target_os = "fuchsia",
558
            target_os = "haiku"
559
        ))]
560
0
        ECANCELED => "Operation canceled",
561
562
        #[cfg(any(linux_android, target_os = "fuchsia"))]
563
0
        ENOKEY => "Required key not available",
564
565
        #[cfg(any(linux_android, target_os = "fuchsia"))]
566
0
        EKEYEXPIRED => "Key has expired",
567
568
        #[cfg(any(linux_android, target_os = "fuchsia"))]
569
0
        EKEYREVOKED => "Key has been revoked",
570
571
        #[cfg(any(linux_android, target_os = "fuchsia"))]
572
0
        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
0
        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
0
        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
0
        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
0
        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
0
}
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
    )]
987
0
    pub const fn from_i32(e: i32) -> Errno {
988
0
        use self::Errno::*;
989
0
990
0
        match e {
991
0
            libc::EPERM => EPERM,
992
0
            libc::ENOENT => ENOENT,
993
0
            libc::ESRCH => ESRCH,
994
0
            libc::EINTR => EINTR,
995
0
            libc::EIO => EIO,
996
0
            libc::ENXIO => ENXIO,
997
0
            libc::E2BIG => E2BIG,
998
0
            libc::ENOEXEC => ENOEXEC,
999
0
            libc::EBADF => EBADF,
1000
0
            libc::ECHILD => ECHILD,
1001
0
            libc::EAGAIN => EAGAIN,
1002
0
            libc::ENOMEM => ENOMEM,
1003
0
            libc::EACCES => EACCES,
1004
0
            libc::EFAULT => EFAULT,
1005
0
            libc::ENOTBLK => ENOTBLK,
1006
0
            libc::EBUSY => EBUSY,
1007
0
            libc::EEXIST => EEXIST,
1008
0
            libc::EXDEV => EXDEV,
1009
0
            libc::ENODEV => ENODEV,
1010
0
            libc::ENOTDIR => ENOTDIR,
1011
0
            libc::EISDIR => EISDIR,
1012
0
            libc::EINVAL => EINVAL,
1013
0
            libc::ENFILE => ENFILE,
1014
0
            libc::EMFILE => EMFILE,
1015
0
            libc::ENOTTY => ENOTTY,
1016
0
            libc::ETXTBSY => ETXTBSY,
1017
0
            libc::EFBIG => EFBIG,
1018
0
            libc::ENOSPC => ENOSPC,
1019
0
            libc::ESPIPE => ESPIPE,
1020
0
            libc::EROFS => EROFS,
1021
0
            libc::EMLINK => EMLINK,
1022
0
            libc::EPIPE => EPIPE,
1023
0
            libc::EDOM => EDOM,
1024
0
            libc::ERANGE => ERANGE,
1025
0
            libc::EDEADLK => EDEADLK,
1026
0
            libc::ENAMETOOLONG => ENAMETOOLONG,
1027
0
            libc::ENOLCK => ENOLCK,
1028
0
            libc::ENOSYS => ENOSYS,
1029
0
            libc::ENOTEMPTY => ENOTEMPTY,
1030
0
            libc::ELOOP => ELOOP,
1031
0
            libc::ENOMSG => ENOMSG,
1032
0
            libc::EIDRM => EIDRM,
1033
0
            libc::ECHRNG => ECHRNG,
1034
0
            libc::EL2NSYNC => EL2NSYNC,
1035
0
            libc::EL3HLT => EL3HLT,
1036
0
            libc::EL3RST => EL3RST,
1037
0
            libc::ELNRNG => ELNRNG,
1038
0
            libc::EUNATCH => EUNATCH,
1039
0
            libc::ENOCSI => ENOCSI,
1040
0
            libc::EL2HLT => EL2HLT,
1041
0
            libc::EBADE => EBADE,
1042
0
            libc::EBADR => EBADR,
1043
0
            libc::EXFULL => EXFULL,
1044
0
            libc::ENOANO => ENOANO,
1045
0
            libc::EBADRQC => EBADRQC,
1046
0
            libc::EBADSLT => EBADSLT,
1047
0
            libc::EBFONT => EBFONT,
1048
0
            libc::ENOSTR => ENOSTR,
1049
0
            libc::ENODATA => ENODATA,
1050
0
            libc::ETIME => ETIME,
1051
0
            libc::ENOSR => ENOSR,
1052
0
            libc::ENONET => ENONET,
1053
0
            libc::ENOPKG => ENOPKG,
1054
0
            libc::EREMOTE => EREMOTE,
1055
0
            libc::ENOLINK => ENOLINK,
1056
0
            libc::EADV => EADV,
1057
0
            libc::ESRMNT => ESRMNT,
1058
0
            libc::ECOMM => ECOMM,
1059
0
            libc::EPROTO => EPROTO,
1060
0
            libc::EMULTIHOP => EMULTIHOP,
1061
0
            libc::EDOTDOT => EDOTDOT,
1062
0
            libc::EBADMSG => EBADMSG,
1063
0
            libc::EOVERFLOW => EOVERFLOW,
1064
0
            libc::ENOTUNIQ => ENOTUNIQ,
1065
0
            libc::EBADFD => EBADFD,
1066
0
            libc::EREMCHG => EREMCHG,
1067
0
            libc::ELIBACC => ELIBACC,
1068
0
            libc::ELIBBAD => ELIBBAD,
1069
0
            libc::ELIBSCN => ELIBSCN,
1070
0
            libc::ELIBMAX => ELIBMAX,
1071
0
            libc::ELIBEXEC => ELIBEXEC,
1072
0
            libc::EILSEQ => EILSEQ,
1073
0
            libc::ERESTART => ERESTART,
1074
0
            libc::ESTRPIPE => ESTRPIPE,
1075
0
            libc::EUSERS => EUSERS,
1076
0
            libc::ENOTSOCK => ENOTSOCK,
1077
0
            libc::EDESTADDRREQ => EDESTADDRREQ,
1078
0
            libc::EMSGSIZE => EMSGSIZE,
1079
0
            libc::EPROTOTYPE => EPROTOTYPE,
1080
0
            libc::ENOPROTOOPT => ENOPROTOOPT,
1081
0
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
1082
0
            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
1083
0
            libc::EOPNOTSUPP => EOPNOTSUPP,
1084
0
            libc::EPFNOSUPPORT => EPFNOSUPPORT,
1085
0
            libc::EAFNOSUPPORT => EAFNOSUPPORT,
1086
0
            libc::EADDRINUSE => EADDRINUSE,
1087
0
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
1088
0
            libc::ENETDOWN => ENETDOWN,
1089
0
            libc::ENETUNREACH => ENETUNREACH,
1090
0
            libc::ENETRESET => ENETRESET,
1091
0
            libc::ECONNABORTED => ECONNABORTED,
1092
0
            libc::ECONNRESET => ECONNRESET,
1093
0
            libc::ENOBUFS => ENOBUFS,
1094
0
            libc::EISCONN => EISCONN,
1095
0
            libc::ENOTCONN => ENOTCONN,
1096
0
            libc::ESHUTDOWN => ESHUTDOWN,
1097
0
            libc::ETOOMANYREFS => ETOOMANYREFS,
1098
0
            libc::ETIMEDOUT => ETIMEDOUT,
1099
0
            libc::ECONNREFUSED => ECONNREFUSED,
1100
0
            libc::EHOSTDOWN => EHOSTDOWN,
1101
0
            libc::EHOSTUNREACH => EHOSTUNREACH,
1102
0
            libc::EALREADY => EALREADY,
1103
0
            libc::EINPROGRESS => EINPROGRESS,
1104
0
            libc::ESTALE => ESTALE,
1105
0
            libc::EUCLEAN => EUCLEAN,
1106
0
            libc::ENOTNAM => ENOTNAM,
1107
0
            libc::ENAVAIL => ENAVAIL,
1108
0
            libc::EISNAM => EISNAM,
1109
0
            libc::EREMOTEIO => EREMOTEIO,
1110
0
            libc::EDQUOT => EDQUOT,
1111
0
            libc::ENOMEDIUM => ENOMEDIUM,
1112
0
            libc::EMEDIUMTYPE => EMEDIUMTYPE,
1113
0
            libc::ECANCELED => ECANCELED,
1114
0
            libc::ENOKEY => ENOKEY,
1115
0
            libc::EKEYEXPIRED => EKEYEXPIRED,
1116
0
            libc::EKEYREVOKED => EKEYREVOKED,
1117
0
            libc::EKEYREJECTED => EKEYREJECTED,
1118
0
            libc::EOWNERDEAD => EOWNERDEAD,
1119
0
            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
1120
            #[cfg(not(any(target_os = "android", target_arch = "mips")))]
1121
0
            libc::ERFKILL => ERFKILL,
1122
            #[cfg(not(any(target_os = "android", target_arch = "mips")))]
1123
0
            libc::EHWPOISON => EHWPOISON,
1124
0
            _ => UnknownErrno,
1125
        }
1126
0
    }
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
    )]
1254
    pub const fn from_i32(e: i32) -> Errno {
1255
        use self::Errno::*;
1256
1257
        match e {
1258
            libc::EPERM => EPERM,
1259
            libc::ENOENT => ENOENT,
1260
            libc::ESRCH => ESRCH,
1261
            libc::EINTR => EINTR,
1262
            libc::EIO => EIO,
1263
            libc::ENXIO => ENXIO,
1264
            libc::E2BIG => E2BIG,
1265
            libc::ENOEXEC => ENOEXEC,
1266
            libc::EBADF => EBADF,
1267
            libc::ECHILD => ECHILD,
1268
            libc::EDEADLK => EDEADLK,
1269
            libc::ENOMEM => ENOMEM,
1270
            libc::EACCES => EACCES,
1271
            libc::EFAULT => EFAULT,
1272
            libc::ENOTBLK => ENOTBLK,
1273
            libc::EBUSY => EBUSY,
1274
            libc::EEXIST => EEXIST,
1275
            libc::EXDEV => EXDEV,
1276
            libc::ENODEV => ENODEV,
1277
            libc::ENOTDIR => ENOTDIR,
1278
            libc::EISDIR => EISDIR,
1279
            libc::EINVAL => EINVAL,
1280
            libc::ENFILE => ENFILE,
1281
            libc::EMFILE => EMFILE,
1282
            libc::ENOTTY => ENOTTY,
1283
            libc::ETXTBSY => ETXTBSY,
1284
            libc::EFBIG => EFBIG,
1285
            libc::ENOSPC => ENOSPC,
1286
            libc::ESPIPE => ESPIPE,
1287
            libc::EROFS => EROFS,
1288
            libc::EMLINK => EMLINK,
1289
            libc::EPIPE => EPIPE,
1290
            libc::EDOM => EDOM,
1291
            libc::ERANGE => ERANGE,
1292
            libc::EAGAIN => EAGAIN,
1293
            libc::EINPROGRESS => EINPROGRESS,
1294
            libc::EALREADY => EALREADY,
1295
            libc::ENOTSOCK => ENOTSOCK,
1296
            libc::EDESTADDRREQ => EDESTADDRREQ,
1297
            libc::EMSGSIZE => EMSGSIZE,
1298
            libc::EPROTOTYPE => EPROTOTYPE,
1299
            libc::ENOPROTOOPT => ENOPROTOOPT,
1300
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
1301
            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
1302
            libc::ENOTSUP => ENOTSUP,
1303
            libc::EPFNOSUPPORT => EPFNOSUPPORT,
1304
            libc::EAFNOSUPPORT => EAFNOSUPPORT,
1305
            libc::EADDRINUSE => EADDRINUSE,
1306
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
1307
            libc::ENETDOWN => ENETDOWN,
1308
            libc::ENETUNREACH => ENETUNREACH,
1309
            libc::ENETRESET => ENETRESET,
1310
            libc::ECONNABORTED => ECONNABORTED,
1311
            libc::ECONNRESET => ECONNRESET,
1312
            libc::ENOBUFS => ENOBUFS,
1313
            libc::EISCONN => EISCONN,
1314
            libc::ENOTCONN => ENOTCONN,
1315
            libc::ESHUTDOWN => ESHUTDOWN,
1316
            libc::ETOOMANYREFS => ETOOMANYREFS,
1317
            libc::ETIMEDOUT => ETIMEDOUT,
1318
            libc::ECONNREFUSED => ECONNREFUSED,
1319
            libc::ELOOP => ELOOP,
1320
            libc::ENAMETOOLONG => ENAMETOOLONG,
1321
            libc::EHOSTDOWN => EHOSTDOWN,
1322
            libc::EHOSTUNREACH => EHOSTUNREACH,
1323
            libc::ENOTEMPTY => ENOTEMPTY,
1324
            libc::EPROCLIM => EPROCLIM,
1325
            libc::EUSERS => EUSERS,
1326
            libc::EDQUOT => EDQUOT,
1327
            libc::ESTALE => ESTALE,
1328
            libc::EREMOTE => EREMOTE,
1329
            libc::EBADRPC => EBADRPC,
1330
            libc::ERPCMISMATCH => ERPCMISMATCH,
1331
            libc::EPROGUNAVAIL => EPROGUNAVAIL,
1332
            libc::EPROGMISMATCH => EPROGMISMATCH,
1333
            libc::EPROCUNAVAIL => EPROCUNAVAIL,
1334
            libc::ENOLCK => ENOLCK,
1335
            libc::ENOSYS => ENOSYS,
1336
            libc::EFTYPE => EFTYPE,
1337
            libc::EAUTH => EAUTH,
1338
            libc::ENEEDAUTH => ENEEDAUTH,
1339
            libc::EPWROFF => EPWROFF,
1340
            libc::EDEVERR => EDEVERR,
1341
            libc::EOVERFLOW => EOVERFLOW,
1342
            libc::EBADEXEC => EBADEXEC,
1343
            libc::EBADARCH => EBADARCH,
1344
            libc::ESHLIBVERS => ESHLIBVERS,
1345
            libc::EBADMACHO => EBADMACHO,
1346
            libc::ECANCELED => ECANCELED,
1347
            libc::EIDRM => EIDRM,
1348
            libc::ENOMSG => ENOMSG,
1349
            libc::EILSEQ => EILSEQ,
1350
            libc::ENOATTR => ENOATTR,
1351
            libc::EBADMSG => EBADMSG,
1352
            libc::EMULTIHOP => EMULTIHOP,
1353
            libc::ENODATA => ENODATA,
1354
            libc::ENOLINK => ENOLINK,
1355
            libc::ENOSR => ENOSR,
1356
            libc::ENOSTR => ENOSTR,
1357
            libc::EPROTO => EPROTO,
1358
            libc::ETIME => ETIME,
1359
            libc::EOPNOTSUPP => EOPNOTSUPP,
1360
            libc::ENOPOLICY => ENOPOLICY,
1361
            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
1362
            libc::EOWNERDEAD => EOWNERDEAD,
1363
            libc::EQFULL => EQFULL,
1364
            _ => UnknownErrno,
1365
        }
1366
    }
1367
}
1368
1369
#[cfg(target_os = "freebsd")]
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
    )]
1485
    pub const fn from_i32(e: i32) -> Errno {
1486
        use self::Errno::*;
1487
1488
        match e {
1489
            libc::EPERM => EPERM,
1490
            libc::ENOENT => ENOENT,
1491
            libc::ESRCH => ESRCH,
1492
            libc::EINTR => EINTR,
1493
            libc::EIO => EIO,
1494
            libc::ENXIO => ENXIO,
1495
            libc::E2BIG => E2BIG,
1496
            libc::ENOEXEC => ENOEXEC,
1497
            libc::EBADF => EBADF,
1498
            libc::ECHILD => ECHILD,
1499
            libc::EDEADLK => EDEADLK,
1500
            libc::ENOMEM => ENOMEM,
1501
            libc::EACCES => EACCES,
1502
            libc::EFAULT => EFAULT,
1503
            libc::ENOTBLK => ENOTBLK,
1504
            libc::EBUSY => EBUSY,
1505
            libc::EEXIST => EEXIST,
1506
            libc::EXDEV => EXDEV,
1507
            libc::ENODEV => ENODEV,
1508
            libc::ENOTDIR => ENOTDIR,
1509
            libc::EISDIR => EISDIR,
1510
            libc::EINVAL => EINVAL,
1511
            libc::ENFILE => ENFILE,
1512
            libc::EMFILE => EMFILE,
1513
            libc::ENOTTY => ENOTTY,
1514
            libc::ETXTBSY => ETXTBSY,
1515
            libc::EFBIG => EFBIG,
1516
            libc::ENOSPC => ENOSPC,
1517
            libc::ESPIPE => ESPIPE,
1518
            libc::EROFS => EROFS,
1519
            libc::EMLINK => EMLINK,
1520
            libc::EPIPE => EPIPE,
1521
            libc::EDOM => EDOM,
1522
            libc::ERANGE => ERANGE,
1523
            libc::EAGAIN => EAGAIN,
1524
            libc::EINPROGRESS => EINPROGRESS,
1525
            libc::EALREADY => EALREADY,
1526
            libc::ENOTSOCK => ENOTSOCK,
1527
            libc::EDESTADDRREQ => EDESTADDRREQ,
1528
            libc::EMSGSIZE => EMSGSIZE,
1529
            libc::EPROTOTYPE => EPROTOTYPE,
1530
            libc::ENOPROTOOPT => ENOPROTOOPT,
1531
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
1532
            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
1533
            libc::ENOTSUP => ENOTSUP,
1534
            libc::EPFNOSUPPORT => EPFNOSUPPORT,
1535
            libc::EAFNOSUPPORT => EAFNOSUPPORT,
1536
            libc::EADDRINUSE => EADDRINUSE,
1537
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
1538
            libc::ENETDOWN => ENETDOWN,
1539
            libc::ENETUNREACH => ENETUNREACH,
1540
            libc::ENETRESET => ENETRESET,
1541
            libc::ECONNABORTED => ECONNABORTED,
1542
            libc::ECONNRESET => ECONNRESET,
1543
            libc::ENOBUFS => ENOBUFS,
1544
            libc::EISCONN => EISCONN,
1545
            libc::ENOTCONN => ENOTCONN,
1546
            libc::ESHUTDOWN => ESHUTDOWN,
1547
            libc::ETOOMANYREFS => ETOOMANYREFS,
1548
            libc::ETIMEDOUT => ETIMEDOUT,
1549
            libc::ECONNREFUSED => ECONNREFUSED,
1550
            libc::ELOOP => ELOOP,
1551
            libc::ENAMETOOLONG => ENAMETOOLONG,
1552
            libc::EHOSTDOWN => EHOSTDOWN,
1553
            libc::EHOSTUNREACH => EHOSTUNREACH,
1554
            libc::ENOTEMPTY => ENOTEMPTY,
1555
            libc::EPROCLIM => EPROCLIM,
1556
            libc::EUSERS => EUSERS,
1557
            libc::EDQUOT => EDQUOT,
1558
            libc::ESTALE => ESTALE,
1559
            libc::EREMOTE => EREMOTE,
1560
            libc::EBADRPC => EBADRPC,
1561
            libc::ERPCMISMATCH => ERPCMISMATCH,
1562
            libc::EPROGUNAVAIL => EPROGUNAVAIL,
1563
            libc::EPROGMISMATCH => EPROGMISMATCH,
1564
            libc::EPROCUNAVAIL => EPROCUNAVAIL,
1565
            libc::ENOLCK => ENOLCK,
1566
            libc::ENOSYS => ENOSYS,
1567
            libc::EFTYPE => EFTYPE,
1568
            libc::EAUTH => EAUTH,
1569
            libc::ENEEDAUTH => ENEEDAUTH,
1570
            libc::EIDRM => EIDRM,
1571
            libc::ENOMSG => ENOMSG,
1572
            libc::EOVERFLOW => EOVERFLOW,
1573
            libc::ECANCELED => ECANCELED,
1574
            libc::EILSEQ => EILSEQ,
1575
            libc::ENOATTR => ENOATTR,
1576
            libc::EDOOFUS => EDOOFUS,
1577
            libc::EBADMSG => EBADMSG,
1578
            libc::EMULTIHOP => EMULTIHOP,
1579
            libc::ENOLINK => ENOLINK,
1580
            libc::EPROTO => EPROTO,
1581
            libc::ENOTCAPABLE => ENOTCAPABLE,
1582
            libc::ECAPMODE => ECAPMODE,
1583
            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
1584
            libc::EOWNERDEAD => EOWNERDEAD,
1585
            _ => UnknownErrno,
1586
        }
1587
    }
1588
}
1589
1590
#[cfg(target_os = "dragonfly")]
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
    )]
1706
    pub const fn from_i32(e: i32) -> Errno {
1707
        use self::Errno::*;
1708
1709
        match e {
1710
            libc::EPERM => EPERM,
1711
            libc::ENOENT => ENOENT,
1712
            libc::ESRCH => ESRCH,
1713
            libc::EINTR => EINTR,
1714
            libc::EIO => EIO,
1715
            libc::ENXIO => ENXIO,
1716
            libc::E2BIG => E2BIG,
1717
            libc::ENOEXEC => ENOEXEC,
1718
            libc::EBADF => EBADF,
1719
            libc::ECHILD => ECHILD,
1720
            libc::EDEADLK => EDEADLK,
1721
            libc::ENOMEM => ENOMEM,
1722
            libc::EACCES => EACCES,
1723
            libc::EFAULT => EFAULT,
1724
            libc::ENOTBLK => ENOTBLK,
1725
            libc::EBUSY => EBUSY,
1726
            libc::EEXIST => EEXIST,
1727
            libc::EXDEV => EXDEV,
1728
            libc::ENODEV => ENODEV,
1729
            libc::ENOTDIR => ENOTDIR,
1730
            libc::EISDIR => EISDIR,
1731
            libc::EINVAL => EINVAL,
1732
            libc::ENFILE => ENFILE,
1733
            libc::EMFILE => EMFILE,
1734
            libc::ENOTTY => ENOTTY,
1735
            libc::ETXTBSY => ETXTBSY,
1736
            libc::EFBIG => EFBIG,
1737
            libc::ENOSPC => ENOSPC,
1738
            libc::ESPIPE => ESPIPE,
1739
            libc::EROFS => EROFS,
1740
            libc::EMLINK => EMLINK,
1741
            libc::EPIPE => EPIPE,
1742
            libc::EDOM => EDOM,
1743
            libc::ERANGE => ERANGE,
1744
            libc::EAGAIN => EAGAIN,
1745
            libc::EINPROGRESS => EINPROGRESS,
1746
            libc::EALREADY => EALREADY,
1747
            libc::ENOTSOCK => ENOTSOCK,
1748
            libc::EDESTADDRREQ => EDESTADDRREQ,
1749
            libc::EMSGSIZE => EMSGSIZE,
1750
            libc::EPROTOTYPE => EPROTOTYPE,
1751
            libc::ENOPROTOOPT => ENOPROTOOPT,
1752
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
1753
            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
1754
            libc::ENOTSUP => ENOTSUP,
1755
            libc::EPFNOSUPPORT => EPFNOSUPPORT,
1756
            libc::EAFNOSUPPORT => EAFNOSUPPORT,
1757
            libc::EADDRINUSE => EADDRINUSE,
1758
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
1759
            libc::ENETDOWN => ENETDOWN,
1760
            libc::ENETUNREACH => ENETUNREACH,
1761
            libc::ENETRESET => ENETRESET,
1762
            libc::ECONNABORTED => ECONNABORTED,
1763
            libc::ECONNRESET => ECONNRESET,
1764
            libc::ENOBUFS => ENOBUFS,
1765
            libc::EISCONN => EISCONN,
1766
            libc::ENOTCONN => ENOTCONN,
1767
            libc::ESHUTDOWN => ESHUTDOWN,
1768
            libc::ETOOMANYREFS => ETOOMANYREFS,
1769
            libc::ETIMEDOUT => ETIMEDOUT,
1770
            libc::ECONNREFUSED => ECONNREFUSED,
1771
            libc::ELOOP => ELOOP,
1772
            libc::ENAMETOOLONG => ENAMETOOLONG,
1773
            libc::EHOSTDOWN => EHOSTDOWN,
1774
            libc::EHOSTUNREACH => EHOSTUNREACH,
1775
            libc::ENOTEMPTY => ENOTEMPTY,
1776
            libc::EPROCLIM => EPROCLIM,
1777
            libc::EUSERS => EUSERS,
1778
            libc::EDQUOT => EDQUOT,
1779
            libc::ESTALE => ESTALE,
1780
            libc::EREMOTE => EREMOTE,
1781
            libc::EBADRPC => EBADRPC,
1782
            libc::ERPCMISMATCH => ERPCMISMATCH,
1783
            libc::EPROGUNAVAIL => EPROGUNAVAIL,
1784
            libc::EPROGMISMATCH => EPROGMISMATCH,
1785
            libc::EPROCUNAVAIL => EPROCUNAVAIL,
1786
            libc::ENOLCK => ENOLCK,
1787
            libc::ENOSYS => ENOSYS,
1788
            libc::EFTYPE => EFTYPE,
1789
            libc::EAUTH => EAUTH,
1790
            libc::ENEEDAUTH => ENEEDAUTH,
1791
            libc::EIDRM => EIDRM,
1792
            libc::ENOMSG => ENOMSG,
1793
            libc::EOVERFLOW => EOVERFLOW,
1794
            libc::ECANCELED => ECANCELED,
1795
            libc::EILSEQ => EILSEQ,
1796
            libc::ENOATTR => ENOATTR,
1797
            libc::EDOOFUS => EDOOFUS,
1798
            libc::EBADMSG => EBADMSG,
1799
            libc::EMULTIHOP => EMULTIHOP,
1800
            libc::ENOLINK => ENOLINK,
1801
            libc::EPROTO => EPROTO,
1802
            libc::ENOMEDIUM => ENOMEDIUM,
1803
            libc::EASYNC => EASYNC,
1804
            _ => UnknownErrno,
1805
        }
1806
    }
1807
}
1808
1809
#[cfg(target_os = "openbsd")]
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
    )]
1922
    pub const fn from_i32(e: i32) -> Errno {
1923
        use self::Errno::*;
1924
1925
        match e {
1926
            libc::EPERM => EPERM,
1927
            libc::ENOENT => ENOENT,
1928
            libc::ESRCH => ESRCH,
1929
            libc::EINTR => EINTR,
1930
            libc::EIO => EIO,
1931
            libc::ENXIO => ENXIO,
1932
            libc::E2BIG => E2BIG,
1933
            libc::ENOEXEC => ENOEXEC,
1934
            libc::EBADF => EBADF,
1935
            libc::ECHILD => ECHILD,
1936
            libc::EDEADLK => EDEADLK,
1937
            libc::ENOMEM => ENOMEM,
1938
            libc::EACCES => EACCES,
1939
            libc::EFAULT => EFAULT,
1940
            libc::ENOTBLK => ENOTBLK,
1941
            libc::EBUSY => EBUSY,
1942
            libc::EEXIST => EEXIST,
1943
            libc::EXDEV => EXDEV,
1944
            libc::ENODEV => ENODEV,
1945
            libc::ENOTDIR => ENOTDIR,
1946
            libc::EISDIR => EISDIR,
1947
            libc::EINVAL => EINVAL,
1948
            libc::ENFILE => ENFILE,
1949
            libc::EMFILE => EMFILE,
1950
            libc::ENOTTY => ENOTTY,
1951
            libc::ETXTBSY => ETXTBSY,
1952
            libc::EFBIG => EFBIG,
1953
            libc::ENOSPC => ENOSPC,
1954
            libc::ESPIPE => ESPIPE,
1955
            libc::EROFS => EROFS,
1956
            libc::EMLINK => EMLINK,
1957
            libc::EPIPE => EPIPE,
1958
            libc::EDOM => EDOM,
1959
            libc::ERANGE => ERANGE,
1960
            libc::EAGAIN => EAGAIN,
1961
            libc::EINPROGRESS => EINPROGRESS,
1962
            libc::EALREADY => EALREADY,
1963
            libc::ENOTSOCK => ENOTSOCK,
1964
            libc::EDESTADDRREQ => EDESTADDRREQ,
1965
            libc::EMSGSIZE => EMSGSIZE,
1966
            libc::EPROTOTYPE => EPROTOTYPE,
1967
            libc::ENOPROTOOPT => ENOPROTOOPT,
1968
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
1969
            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
1970
            libc::EOPNOTSUPP => EOPNOTSUPP,
1971
            libc::EPFNOSUPPORT => EPFNOSUPPORT,
1972
            libc::EAFNOSUPPORT => EAFNOSUPPORT,
1973
            libc::EADDRINUSE => EADDRINUSE,
1974
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
1975
            libc::ENETDOWN => ENETDOWN,
1976
            libc::ENETUNREACH => ENETUNREACH,
1977
            libc::ENETRESET => ENETRESET,
1978
            libc::ECONNABORTED => ECONNABORTED,
1979
            libc::ECONNRESET => ECONNRESET,
1980
            libc::ENOBUFS => ENOBUFS,
1981
            libc::EISCONN => EISCONN,
1982
            libc::ENOTCONN => ENOTCONN,
1983
            libc::ESHUTDOWN => ESHUTDOWN,
1984
            libc::ETOOMANYREFS => ETOOMANYREFS,
1985
            libc::ETIMEDOUT => ETIMEDOUT,
1986
            libc::ECONNREFUSED => ECONNREFUSED,
1987
            libc::ELOOP => ELOOP,
1988
            libc::ENAMETOOLONG => ENAMETOOLONG,
1989
            libc::EHOSTDOWN => EHOSTDOWN,
1990
            libc::EHOSTUNREACH => EHOSTUNREACH,
1991
            libc::ENOTEMPTY => ENOTEMPTY,
1992
            libc::EPROCLIM => EPROCLIM,
1993
            libc::EUSERS => EUSERS,
1994
            libc::EDQUOT => EDQUOT,
1995
            libc::ESTALE => ESTALE,
1996
            libc::EREMOTE => EREMOTE,
1997
            libc::EBADRPC => EBADRPC,
1998
            libc::ERPCMISMATCH => ERPCMISMATCH,
1999
            libc::EPROGUNAVAIL => EPROGUNAVAIL,
2000
            libc::EPROGMISMATCH => EPROGMISMATCH,
2001
            libc::EPROCUNAVAIL => EPROCUNAVAIL,
2002
            libc::ENOLCK => ENOLCK,
2003
            libc::ENOSYS => ENOSYS,
2004
            libc::EFTYPE => EFTYPE,
2005
            libc::EAUTH => EAUTH,
2006
            libc::ENEEDAUTH => ENEEDAUTH,
2007
            libc::EIPSEC => EIPSEC,
2008
            libc::ENOATTR => ENOATTR,
2009
            libc::EILSEQ => EILSEQ,
2010
            libc::ENOMEDIUM => ENOMEDIUM,
2011
            libc::EMEDIUMTYPE => EMEDIUMTYPE,
2012
            libc::EOVERFLOW => EOVERFLOW,
2013
            libc::ECANCELED => ECANCELED,
2014
            libc::EIDRM => EIDRM,
2015
            libc::ENOMSG => ENOMSG,
2016
            libc::ENOTSUP => ENOTSUP,
2017
            libc::EBADMSG => EBADMSG,
2018
            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
2019
            libc::EOWNERDEAD => EOWNERDEAD,
2020
            libc::EPROTO => EPROTO,
2021
            _ => UnknownErrno,
2022
        }
2023
    }
2024
}
2025
2026
#[cfg(target_os = "netbsd")]
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
    )]
2140
    pub const fn from_i32(e: i32) -> Errno {
2141
        use self::Errno::*;
2142
2143
        match e {
2144
            libc::EPERM => EPERM,
2145
            libc::ENOENT => ENOENT,
2146
            libc::ESRCH => ESRCH,
2147
            libc::EINTR => EINTR,
2148
            libc::EIO => EIO,
2149
            libc::ENXIO => ENXIO,
2150
            libc::E2BIG => E2BIG,
2151
            libc::ENOEXEC => ENOEXEC,
2152
            libc::EBADF => EBADF,
2153
            libc::ECHILD => ECHILD,
2154
            libc::EDEADLK => EDEADLK,
2155
            libc::ENOMEM => ENOMEM,
2156
            libc::EACCES => EACCES,
2157
            libc::EFAULT => EFAULT,
2158
            libc::ENOTBLK => ENOTBLK,
2159
            libc::EBUSY => EBUSY,
2160
            libc::EEXIST => EEXIST,
2161
            libc::EXDEV => EXDEV,
2162
            libc::ENODEV => ENODEV,
2163
            libc::ENOTDIR => ENOTDIR,
2164
            libc::EISDIR => EISDIR,
2165
            libc::EINVAL => EINVAL,
2166
            libc::ENFILE => ENFILE,
2167
            libc::EMFILE => EMFILE,
2168
            libc::ENOTTY => ENOTTY,
2169
            libc::ETXTBSY => ETXTBSY,
2170
            libc::EFBIG => EFBIG,
2171
            libc::ENOSPC => ENOSPC,
2172
            libc::ESPIPE => ESPIPE,
2173
            libc::EROFS => EROFS,
2174
            libc::EMLINK => EMLINK,
2175
            libc::EPIPE => EPIPE,
2176
            libc::EDOM => EDOM,
2177
            libc::ERANGE => ERANGE,
2178
            libc::EAGAIN => EAGAIN,
2179
            libc::EINPROGRESS => EINPROGRESS,
2180
            libc::EALREADY => EALREADY,
2181
            libc::ENOTSOCK => ENOTSOCK,
2182
            libc::EDESTADDRREQ => EDESTADDRREQ,
2183
            libc::EMSGSIZE => EMSGSIZE,
2184
            libc::EPROTOTYPE => EPROTOTYPE,
2185
            libc::ENOPROTOOPT => ENOPROTOOPT,
2186
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
2187
            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
2188
            libc::EOPNOTSUPP => EOPNOTSUPP,
2189
            libc::EPFNOSUPPORT => EPFNOSUPPORT,
2190
            libc::EAFNOSUPPORT => EAFNOSUPPORT,
2191
            libc::EADDRINUSE => EADDRINUSE,
2192
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
2193
            libc::ENETDOWN => ENETDOWN,
2194
            libc::ENETUNREACH => ENETUNREACH,
2195
            libc::ENETRESET => ENETRESET,
2196
            libc::ECONNABORTED => ECONNABORTED,
2197
            libc::ECONNRESET => ECONNRESET,
2198
            libc::ENOBUFS => ENOBUFS,
2199
            libc::EISCONN => EISCONN,
2200
            libc::ENOTCONN => ENOTCONN,
2201
            libc::ESHUTDOWN => ESHUTDOWN,
2202
            libc::ETOOMANYREFS => ETOOMANYREFS,
2203
            libc::ETIMEDOUT => ETIMEDOUT,
2204
            libc::ECONNREFUSED => ECONNREFUSED,
2205
            libc::ELOOP => ELOOP,
2206
            libc::ENAMETOOLONG => ENAMETOOLONG,
2207
            libc::EHOSTDOWN => EHOSTDOWN,
2208
            libc::EHOSTUNREACH => EHOSTUNREACH,
2209
            libc::ENOTEMPTY => ENOTEMPTY,
2210
            libc::EPROCLIM => EPROCLIM,
2211
            libc::EUSERS => EUSERS,
2212
            libc::EDQUOT => EDQUOT,
2213
            libc::ESTALE => ESTALE,
2214
            libc::EREMOTE => EREMOTE,
2215
            libc::EBADRPC => EBADRPC,
2216
            libc::ERPCMISMATCH => ERPCMISMATCH,
2217
            libc::EPROGUNAVAIL => EPROGUNAVAIL,
2218
            libc::EPROGMISMATCH => EPROGMISMATCH,
2219
            libc::EPROCUNAVAIL => EPROCUNAVAIL,
2220
            libc::ENOLCK => ENOLCK,
2221
            libc::ENOSYS => ENOSYS,
2222
            libc::EFTYPE => EFTYPE,
2223
            libc::EAUTH => EAUTH,
2224
            libc::ENEEDAUTH => ENEEDAUTH,
2225
            libc::EIDRM => EIDRM,
2226
            libc::ENOMSG => ENOMSG,
2227
            libc::EOVERFLOW => EOVERFLOW,
2228
            libc::EILSEQ => EILSEQ,
2229
            libc::ENOTSUP => ENOTSUP,
2230
            libc::ECANCELED => ECANCELED,
2231
            libc::EBADMSG => EBADMSG,
2232
            libc::ENODATA => ENODATA,
2233
            libc::ENOSR => ENOSR,
2234
            libc::ENOSTR => ENOSTR,
2235
            libc::ETIME => ETIME,
2236
            libc::ENOATTR => ENOATTR,
2237
            libc::EMULTIHOP => EMULTIHOP,
2238
            libc::ENOLINK => ENOLINK,
2239
            libc::EPROTO => EPROTO,
2240
            _ => UnknownErrno,
2241
        }
2242
    }
2243
}
2244
2245
#[cfg(target_os = "redox")]
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
    )]
2347
    pub const fn from_i32(e: i32) -> Errno {
2348
        use self::Errno::*;
2349
2350
        match e {
2351
            libc::EPERM => EPERM,
2352
            libc::ENOENT => ENOENT,
2353
            libc::ESRCH => ESRCH,
2354
            libc::EINTR => EINTR,
2355
            libc::EIO => EIO,
2356
            libc::ENXIO => ENXIO,
2357
            libc::E2BIG => E2BIG,
2358
            libc::ENOEXEC => ENOEXEC,
2359
            libc::EBADF => EBADF,
2360
            libc::ECHILD => ECHILD,
2361
            libc::EDEADLK => EDEADLK,
2362
            libc::ENOMEM => ENOMEM,
2363
            libc::EACCES => EACCES,
2364
            libc::EFAULT => EFAULT,
2365
            libc::ENOTBLK => ENOTBLK,
2366
            libc::EBUSY => EBUSY,
2367
            libc::EEXIST => EEXIST,
2368
            libc::EXDEV => EXDEV,
2369
            libc::ENODEV => ENODEV,
2370
            libc::ENOTDIR => ENOTDIR,
2371
            libc::EISDIR => EISDIR,
2372
            libc::EINVAL => EINVAL,
2373
            libc::ENFILE => ENFILE,
2374
            libc::EMFILE => EMFILE,
2375
            libc::ENOTTY => ENOTTY,
2376
            libc::ETXTBSY => ETXTBSY,
2377
            libc::EFBIG => EFBIG,
2378
            libc::ENOSPC => ENOSPC,
2379
            libc::ESPIPE => ESPIPE,
2380
            libc::EROFS => EROFS,
2381
            libc::EMLINK => EMLINK,
2382
            libc::EPIPE => EPIPE,
2383
            libc::EDOM => EDOM,
2384
            libc::ERANGE => ERANGE,
2385
            libc::EAGAIN => EAGAIN,
2386
            libc::EINPROGRESS => EINPROGRESS,
2387
            libc::EALREADY => EALREADY,
2388
            libc::ENOTSOCK => ENOTSOCK,
2389
            libc::EDESTADDRREQ => EDESTADDRREQ,
2390
            libc::EMSGSIZE => EMSGSIZE,
2391
            libc::EPROTOTYPE => EPROTOTYPE,
2392
            libc::ENOPROTOOPT => ENOPROTOOPT,
2393
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
2394
            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
2395
            libc::EOPNOTSUPP => EOPNOTSUPP,
2396
            libc::EPFNOSUPPORT => EPFNOSUPPORT,
2397
            libc::EAFNOSUPPORT => EAFNOSUPPORT,
2398
            libc::EADDRINUSE => EADDRINUSE,
2399
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
2400
            libc::ENETDOWN => ENETDOWN,
2401
            libc::ENETUNREACH => ENETUNREACH,
2402
            libc::ENETRESET => ENETRESET,
2403
            libc::ECONNABORTED => ECONNABORTED,
2404
            libc::ECONNRESET => ECONNRESET,
2405
            libc::ENOBUFS => ENOBUFS,
2406
            libc::EISCONN => EISCONN,
2407
            libc::ENOTCONN => ENOTCONN,
2408
            libc::ESHUTDOWN => ESHUTDOWN,
2409
            libc::ETOOMANYREFS => ETOOMANYREFS,
2410
            libc::ETIMEDOUT => ETIMEDOUT,
2411
            libc::ECONNREFUSED => ECONNREFUSED,
2412
            libc::ELOOP => ELOOP,
2413
            libc::ENAMETOOLONG => ENAMETOOLONG,
2414
            libc::EHOSTDOWN => EHOSTDOWN,
2415
            libc::EHOSTUNREACH => EHOSTUNREACH,
2416
            libc::ENOTEMPTY => ENOTEMPTY,
2417
            libc::EUSERS => EUSERS,
2418
            libc::EDQUOT => EDQUOT,
2419
            libc::ESTALE => ESTALE,
2420
            libc::EREMOTE => EREMOTE,
2421
            libc::ENOLCK => ENOLCK,
2422
            libc::ENOSYS => ENOSYS,
2423
            libc::EIDRM => EIDRM,
2424
            libc::ENOMSG => ENOMSG,
2425
            libc::EOVERFLOW => EOVERFLOW,
2426
            libc::EILSEQ => EILSEQ,
2427
            libc::ECANCELED => ECANCELED,
2428
            libc::EBADMSG => EBADMSG,
2429
            libc::ENODATA => ENODATA,
2430
            libc::ENOSR => ENOSR,
2431
            libc::ENOSTR => ENOSTR,
2432
            libc::ETIME => ETIME,
2433
            libc::EMULTIHOP => EMULTIHOP,
2434
            libc::ENOLINK => ENOLINK,
2435
            libc::EPROTO => EPROTO,
2436
            _ => UnknownErrno,
2437
        }
2438
    }
2439
}
2440
2441
#[cfg(solarish)]
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
    )]
2580
    pub const fn from_i32(e: i32) -> Errno {
2581
        use self::Errno::*;
2582
2583
        match e {
2584
            libc::EPERM => EPERM,
2585
            libc::ENOENT => ENOENT,
2586
            libc::ESRCH => ESRCH,
2587
            libc::EINTR => EINTR,
2588
            libc::EIO => EIO,
2589
            libc::ENXIO => ENXIO,
2590
            libc::E2BIG => E2BIG,
2591
            libc::ENOEXEC => ENOEXEC,
2592
            libc::EBADF => EBADF,
2593
            libc::ECHILD => ECHILD,
2594
            libc::EAGAIN => EAGAIN,
2595
            libc::ENOMEM => ENOMEM,
2596
            libc::EACCES => EACCES,
2597
            libc::EFAULT => EFAULT,
2598
            libc::ENOTBLK => ENOTBLK,
2599
            libc::EBUSY => EBUSY,
2600
            libc::EEXIST => EEXIST,
2601
            libc::EXDEV => EXDEV,
2602
            libc::ENODEV => ENODEV,
2603
            libc::ENOTDIR => ENOTDIR,
2604
            libc::EISDIR => EISDIR,
2605
            libc::EINVAL => EINVAL,
2606
            libc::ENFILE => ENFILE,
2607
            libc::EMFILE => EMFILE,
2608
            libc::ENOTTY => ENOTTY,
2609
            libc::ETXTBSY => ETXTBSY,
2610
            libc::EFBIG => EFBIG,
2611
            libc::ENOSPC => ENOSPC,
2612
            libc::ESPIPE => ESPIPE,
2613
            libc::EROFS => EROFS,
2614
            libc::EMLINK => EMLINK,
2615
            libc::EPIPE => EPIPE,
2616
            libc::EDOM => EDOM,
2617
            libc::ERANGE => ERANGE,
2618
            libc::ENOMSG => ENOMSG,
2619
            libc::EIDRM => EIDRM,
2620
            libc::ECHRNG => ECHRNG,
2621
            libc::EL2NSYNC => EL2NSYNC,
2622
            libc::EL3HLT => EL3HLT,
2623
            libc::EL3RST => EL3RST,
2624
            libc::ELNRNG => ELNRNG,
2625
            libc::EUNATCH => EUNATCH,
2626
            libc::ENOCSI => ENOCSI,
2627
            libc::EL2HLT => EL2HLT,
2628
            libc::EDEADLK => EDEADLK,
2629
            libc::ENOLCK => ENOLCK,
2630
            libc::ECANCELED => ECANCELED,
2631
            libc::ENOTSUP => ENOTSUP,
2632
            libc::EDQUOT => EDQUOT,
2633
            libc::EBADE => EBADE,
2634
            libc::EBADR => EBADR,
2635
            libc::EXFULL => EXFULL,
2636
            libc::ENOANO => ENOANO,
2637
            libc::EBADRQC => EBADRQC,
2638
            libc::EBADSLT => EBADSLT,
2639
            libc::EDEADLOCK => EDEADLOCK,
2640
            libc::EBFONT => EBFONT,
2641
            libc::EOWNERDEAD => EOWNERDEAD,
2642
            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
2643
            libc::ENOSTR => ENOSTR,
2644
            libc::ENODATA => ENODATA,
2645
            libc::ETIME => ETIME,
2646
            libc::ENOSR => ENOSR,
2647
            libc::ENONET => ENONET,
2648
            libc::ENOPKG => ENOPKG,
2649
            libc::EREMOTE => EREMOTE,
2650
            libc::ENOLINK => ENOLINK,
2651
            libc::EADV => EADV,
2652
            libc::ESRMNT => ESRMNT,
2653
            libc::ECOMM => ECOMM,
2654
            libc::EPROTO => EPROTO,
2655
            libc::ELOCKUNMAPPED => ELOCKUNMAPPED,
2656
            libc::ENOTACTIVE => ENOTACTIVE,
2657
            libc::EMULTIHOP => EMULTIHOP,
2658
            libc::EBADMSG => EBADMSG,
2659
            libc::ENAMETOOLONG => ENAMETOOLONG,
2660
            libc::EOVERFLOW => EOVERFLOW,
2661
            libc::ENOTUNIQ => ENOTUNIQ,
2662
            libc::EBADFD => EBADFD,
2663
            libc::EREMCHG => EREMCHG,
2664
            libc::ELIBACC => ELIBACC,
2665
            libc::ELIBBAD => ELIBBAD,
2666
            libc::ELIBSCN => ELIBSCN,
2667
            libc::ELIBMAX => ELIBMAX,
2668
            libc::ELIBEXEC => ELIBEXEC,
2669
            libc::EILSEQ => EILSEQ,
2670
            libc::ENOSYS => ENOSYS,
2671
            libc::ELOOP => ELOOP,
2672
            libc::ERESTART => ERESTART,
2673
            libc::ESTRPIPE => ESTRPIPE,
2674
            libc::ENOTEMPTY => ENOTEMPTY,
2675
            libc::EUSERS => EUSERS,
2676
            libc::ENOTSOCK => ENOTSOCK,
2677
            libc::EDESTADDRREQ => EDESTADDRREQ,
2678
            libc::EMSGSIZE => EMSGSIZE,
2679
            libc::EPROTOTYPE => EPROTOTYPE,
2680
            libc::ENOPROTOOPT => ENOPROTOOPT,
2681
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
2682
            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
2683
            libc::EOPNOTSUPP => EOPNOTSUPP,
2684
            libc::EPFNOSUPPORT => EPFNOSUPPORT,
2685
            libc::EAFNOSUPPORT => EAFNOSUPPORT,
2686
            libc::EADDRINUSE => EADDRINUSE,
2687
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
2688
            libc::ENETDOWN => ENETDOWN,
2689
            libc::ENETUNREACH => ENETUNREACH,
2690
            libc::ENETRESET => ENETRESET,
2691
            libc::ECONNABORTED => ECONNABORTED,
2692
            libc::ECONNRESET => ECONNRESET,
2693
            libc::ENOBUFS => ENOBUFS,
2694
            libc::EISCONN => EISCONN,
2695
            libc::ENOTCONN => ENOTCONN,
2696
            libc::ESHUTDOWN => ESHUTDOWN,
2697
            libc::ETOOMANYREFS => ETOOMANYREFS,
2698
            libc::ETIMEDOUT => ETIMEDOUT,
2699
            libc::ECONNREFUSED => ECONNREFUSED,
2700
            libc::EHOSTDOWN => EHOSTDOWN,
2701
            libc::EHOSTUNREACH => EHOSTUNREACH,
2702
            libc::EALREADY => EALREADY,
2703
            libc::EINPROGRESS => EINPROGRESS,
2704
            libc::ESTALE => ESTALE,
2705
            _ => UnknownErrno,
2706
        }
2707
    }
2708
}
2709
2710
#[cfg(target_os = "haiku")]
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
    )]
2804
    pub const fn from_i32(e: i32) -> Errno {
2805
        use self::Errno::*;
2806
2807
        match e {
2808
            libc::EPERM => EPERM,
2809
            libc::ENOENT => ENOENT,
2810
            libc::ESRCH => ESRCH,
2811
            libc::EINTR => EINTR,
2812
            libc::EIO => EIO,
2813
            libc::ENXIO => ENXIO,
2814
            libc::E2BIG => E2BIG,
2815
            libc::ENOEXEC => ENOEXEC,
2816
            libc::EBADF => EBADF,
2817
            libc::ECHILD => ECHILD,
2818
            libc::EDEADLK => EDEADLK,
2819
            libc::ENOMEM => ENOMEM,
2820
            libc::EACCES => EACCES,
2821
            libc::EFAULT => EFAULT,
2822
            libc::EBUSY => EBUSY,
2823
            libc::EEXIST => EEXIST,
2824
            libc::EXDEV => EXDEV,
2825
            libc::ENODEV => ENODEV,
2826
            libc::ENOTDIR => ENOTDIR,
2827
            libc::EISDIR => EISDIR,
2828
            libc::EINVAL => EINVAL,
2829
            libc::ENFILE => ENFILE,
2830
            libc::EMFILE => EMFILE,
2831
            libc::ENOTTY => ENOTTY,
2832
            libc::ETXTBSY => ETXTBSY,
2833
            libc::EFBIG => EFBIG,
2834
            libc::ENOSPC => ENOSPC,
2835
            libc::ESPIPE => ESPIPE,
2836
            libc::EROFS => EROFS,
2837
            libc::EMLINK => EMLINK,
2838
            libc::EPIPE => EPIPE,
2839
            libc::EDOM => EDOM,
2840
            libc::ERANGE => ERANGE,
2841
            libc::EAGAIN => EAGAIN,
2842
            libc::EINPROGRESS => EINPROGRESS,
2843
            libc::EALREADY => EALREADY,
2844
            libc::ENOTSOCK => ENOTSOCK,
2845
            libc::EDESTADDRREQ => EDESTADDRREQ,
2846
            libc::EMSGSIZE => EMSGSIZE,
2847
            libc::EPROTOTYPE => EPROTOTYPE,
2848
            libc::ENOPROTOOPT => ENOPROTOOPT,
2849
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
2850
            libc::ENOTSUP => ENOTSUP,
2851
            libc::EADDRINUSE => EADDRINUSE,
2852
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
2853
            libc::ENETDOWN => ENETDOWN,
2854
            libc::ENETUNREACH => ENETUNREACH,
2855
            libc::ENETRESET => ENETRESET,
2856
            libc::ECONNABORTED => ECONNABORTED,
2857
            libc::ECONNRESET => ECONNRESET,
2858
            libc::ENOBUFS => ENOBUFS,
2859
            libc::EISCONN => EISCONN,
2860
            libc::ENOTCONN => ENOTCONN,
2861
            libc::ESHUTDOWN => ESHUTDOWN,
2862
            libc::ETIMEDOUT => ETIMEDOUT,
2863
            libc::ECONNREFUSED => ECONNREFUSED,
2864
            libc::ELOOP => ELOOP,
2865
            libc::ENAMETOOLONG => ENAMETOOLONG,
2866
            libc::EHOSTDOWN => EHOSTDOWN,
2867
            libc::EHOSTUNREACH => EHOSTUNREACH,
2868
            libc::ENOTEMPTY => ENOTEMPTY,
2869
            libc::EDQUOT => EDQUOT,
2870
            libc::ESTALE => ESTALE,
2871
            libc::ENOLCK => ENOLCK,
2872
            libc::ENOSYS => ENOSYS,
2873
            libc::EIDRM => EIDRM,
2874
            libc::ENOMSG => ENOMSG,
2875
            libc::EOVERFLOW => EOVERFLOW,
2876
            libc::ECANCELED => ECANCELED,
2877
            libc::EILSEQ => EILSEQ,
2878
            libc::ENOATTR => ENOATTR,
2879
            libc::EBADMSG => EBADMSG,
2880
            libc::EMULTIHOP => EMULTIHOP,
2881
            libc::ENOLINK => ENOLINK,
2882
            libc::EPROTO => EPROTO,
2883
            _ => UnknownErrno,
2884
        }
2885
    }
2886
}
2887
2888
#[cfg(target_os = "aix")]
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
    )]
2999
    pub const fn from_i32(e: i32) -> Errno {
3000
        use self::Errno::*;
3001
3002
        match e {
3003
            libc::EPERM => EPERM,
3004
            libc::ENOENT => ENOENT,
3005
            libc::ESRCH => ESRCH,
3006
            libc::EINTR => EINTR,
3007
            libc::EIO => EIO,
3008
            libc::ENXIO => ENXIO,
3009
            libc::E2BIG => E2BIG,
3010
            libc::ENOEXEC => ENOEXEC,
3011
            libc::EBADF => EBADF,
3012
            libc::ECHILD => ECHILD,
3013
            libc::EAGAIN => EAGAIN,
3014
            libc::ENOMEM => ENOMEM,
3015
            libc::EACCES => EACCES,
3016
            libc::EFAULT => EFAULT,
3017
            libc::ENOTBLK => ENOTBLK,
3018
            libc::EBUSY => EBUSY,
3019
            libc::EEXIST => EEXIST,
3020
            libc::EXDEV => EXDEV,
3021
            libc::ENODEV => ENODEV,
3022
            libc::ENOTDIR => ENOTDIR,
3023
            libc::EISDIR => EISDIR,
3024
            libc::EINVAL => EINVAL,
3025
            libc::ENFILE => ENFILE,
3026
            libc::EMFILE => EMFILE,
3027
            libc::ENOTTY => ENOTTY,
3028
            libc::ETXTBSY => ETXTBSY,
3029
            libc::EFBIG => EFBIG,
3030
            libc::ENOSPC => ENOSPC,
3031
            libc::ESPIPE => ESPIPE,
3032
            libc::EROFS => EROFS,
3033
            libc::EMLINK => EMLINK,
3034
            libc::EPIPE => EPIPE,
3035
            libc::EDOM => EDOM,
3036
            libc::ERANGE => ERANGE,
3037
            libc::EDEADLK => EDEADLK,
3038
            libc::ENAMETOOLONG => ENAMETOOLONG,
3039
            libc::ENOLCK => ENOLCK,
3040
            libc::ENOSYS => ENOSYS,
3041
            libc::ENOTEMPTY => ENOTEMPTY,
3042
            libc::ELOOP => ELOOP,
3043
            libc::ENOMSG => ENOMSG,
3044
            libc::EIDRM => EIDRM,
3045
            libc::EINPROGRESS => EINPROGRESS,
3046
            libc::EALREADY => EALREADY,
3047
            libc::ENOTSOCK => ENOTSOCK,
3048
            libc::EDESTADDRREQ => EDESTADDRREQ,
3049
            libc::EMSGSIZE => EMSGSIZE,
3050
            libc::EPROTOTYPE => EPROTOTYPE,
3051
            libc::ENOPROTOOPT => ENOPROTOOPT,
3052
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
3053
            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
3054
            libc::EPFNOSUPPORT => EPFNOSUPPORT,
3055
            libc::EAFNOSUPPORT => EAFNOSUPPORT,
3056
            libc::EADDRINUSE => EADDRINUSE,
3057
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
3058
            libc::ENETDOWN => ENETDOWN,
3059
            libc::ENETUNREACH => ENETUNREACH,
3060
            libc::ENETRESET => ENETRESET,
3061
            libc::ECONNABORTED => ECONNABORTED,
3062
            libc::ECONNRESET => ECONNRESET,
3063
            libc::ENOBUFS => ENOBUFS,
3064
            libc::EISCONN => EISCONN,
3065
            libc::ENOTCONN => ENOTCONN,
3066
            libc::ESHUTDOWN => ESHUTDOWN,
3067
            libc::ETOOMANYREFS => ETOOMANYREFS,
3068
            libc::ETIMEDOUT => ETIMEDOUT,
3069
            libc::ECONNREFUSED => ECONNREFUSED,
3070
            libc::EHOSTDOWN => EHOSTDOWN,
3071
            libc::EHOSTUNREACH => EHOSTUNREACH,
3072
            libc::ECHRNG => ECHRNG,
3073
            libc::EL2NSYNC => EL2NSYNC,
3074
            libc::EL3HLT => EL3HLT,
3075
            libc::EL3RST => EL3RST,
3076
            libc::ELNRNG => ELNRNG,
3077
            libc::EUNATCH => EUNATCH,
3078
            libc::ENOCSI => ENOCSI,
3079
            libc::EL2HLT => EL2HLT,
3080
            libc::ENOLINK => ENOLINK,
3081
            libc::EPROTO => EPROTO,
3082
            libc::EMULTIHOP => EMULTIHOP,
3083
            libc::EBADMSG => EBADMSG,
3084
            libc::EOVERFLOW => EOVERFLOW,
3085
            libc::EILSEQ => EILSEQ,
3086
            libc::ERESTART => ERESTART,
3087
            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
3088
            libc::EOWNERDEAD => EOWNERDEAD,
3089
            libc::ENOTSUP => ENOTSUP,
3090
            libc::EPROCLIM => EPROCLIM,
3091
            libc::EUSERS => EUSERS,
3092
            libc::EDQUOT => EDQUOT,
3093
            libc::ESTALE => ESTALE,
3094
            libc::EREMOTE => EREMOTE,
3095
            libc::ECANCELED => ECANCELED,
3096
            libc::ENODATA => ENODATA,
3097
            libc::ENOSR => ENOSR,
3098
            libc::ENOSTR => ENOSTR,
3099
            libc::ETIME => ETIME,
3100
            libc::EOPNOTSUPP => EOPNOTSUPP,
3101
            _ => UnknownErrno,
3102
        }
3103
    }
3104
}
3105
3106
#[cfg(target_os = "hurd")]
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
    )]
3226
    pub const fn from_i32(e: i32) -> Errno {
3227
        use self::Errno::*;
3228
3229
        match e {
3230
            libc::EPERM => EPERM,
3231
            libc::ENOENT => ENOENT,
3232
            libc::ESRCH => ESRCH,
3233
            libc::EINTR => EINTR,
3234
            libc::EIO => EIO,
3235
            libc::ENXIO => ENXIO,
3236
            libc::E2BIG => E2BIG,
3237
            libc::ENOEXEC => ENOEXEC,
3238
            libc::EBADF => EBADF,
3239
            libc::ECHILD => ECHILD,
3240
            libc::EDEADLK => EDEADLK,
3241
            libc::ENOMEM => ENOMEM,
3242
            libc::EACCES => EACCES,
3243
            libc::EFAULT => EFAULT,
3244
            libc::ENOTBLK => ENOTBLK,
3245
            libc::EBUSY => EBUSY,
3246
            libc::EEXIST => EEXIST,
3247
            libc::EXDEV => EXDEV,
3248
            libc::ENODEV => ENODEV,
3249
            libc::ENOTDIR => ENOTDIR,
3250
            libc::EISDIR => EISDIR,
3251
            libc::EINVAL => EINVAL,
3252
            libc::EMFILE => EMFILE,
3253
            libc::ENFILE => ENFILE,
3254
            libc::ENOTTY => ENOTTY,
3255
            libc::ETXTBSY => ETXTBSY,
3256
            libc::EFBIG => EFBIG,
3257
            libc::ENOSPC => ENOSPC,
3258
            libc::ESPIPE => ESPIPE,
3259
            libc::EROFS => EROFS,
3260
            libc::EMLINK => EMLINK,
3261
            libc::EPIPE => EPIPE,
3262
            libc::EDOM => EDOM,
3263
            libc::ERANGE => ERANGE,
3264
            libc::EAGAIN => EAGAIN,
3265
            libc::EINPROGRESS => EINPROGRESS,
3266
            libc::EALREADY => EALREADY,
3267
            libc::ENOTSOCK => ENOTSOCK,
3268
            libc::EMSGSIZE => EMSGSIZE,
3269
            libc::EPROTOTYPE => EPROTOTYPE,
3270
            libc::ENOPROTOOPT => ENOPROTOOPT,
3271
            libc::EPROTONOSUPPORT => EPROTONOSUPPORT,
3272
            libc::ESOCKTNOSUPPORT => ESOCKTNOSUPPORT,
3273
            libc::EOPNOTSUPP => EOPNOTSUPP,
3274
            libc::EPFNOSUPPORT => EPFNOSUPPORT,
3275
            libc::EAFNOSUPPORT => EAFNOSUPPORT,
3276
            libc::EADDRINUSE => EADDRINUSE,
3277
            libc::EADDRNOTAVAIL => EADDRNOTAVAIL,
3278
            libc::ENETDOWN => ENETDOWN,
3279
            libc::ENETUNREACH => ENETUNREACH,
3280
            libc::ENETRESET => ENETRESET,
3281
            libc::ECONNABORTED => ECONNABORTED,
3282
            libc::ECONNRESET => ECONNRESET,
3283
            libc::ENOBUFS => ENOBUFS,
3284
            libc::EISCONN => EISCONN,
3285
            libc::ENOTCONN => ENOTCONN,
3286
            libc::EDESTADDRREQ => EDESTADDRREQ,
3287
            libc::ESHUTDOWN => ESHUTDOWN,
3288
            libc::ETOOMANYREFS => ETOOMANYREFS,
3289
            libc::ETIMEDOUT => ETIMEDOUT,
3290
            libc::ECONNREFUSED => ECONNREFUSED,
3291
            libc::ELOOP => ELOOP,
3292
            libc::ENAMETOOLONG => ENAMETOOLONG,
3293
            libc::EHOSTDOWN => EHOSTDOWN,
3294
            libc::EHOSTUNREACH => EHOSTUNREACH,
3295
            libc::ENOTEMPTY => ENOTEMPTY,
3296
            libc::EPROCLIM => EPROCLIM,
3297
            libc::EUSERS => EUSERS,
3298
            libc::EDQUOT => EDQUOT,
3299
            libc::ESTALE => ESTALE,
3300
            libc::EREMOTE => EREMOTE,
3301
            libc::EBADRPC => EBADRPC,
3302
            libc::ERPCMISMATCH => ERPCMISMATCH,
3303
            libc::EPROGUNAVAIL => EPROGUNAVAIL,
3304
            libc::EPROGMISMATCH => EPROGMISMATCH,
3305
            libc::EPROCUNAVAIL => EPROCUNAVAIL,
3306
            libc::ENOLCK => ENOLCK,
3307
            libc::EFTYPE => EFTYPE,
3308
            libc::EAUTH => EAUTH,
3309
            libc::ENEEDAUTH => ENEEDAUTH,
3310
            libc::ENOSYS => ENOSYS,
3311
            libc::ELIBEXEC => ELIBEXEC,
3312
            libc::ENOTSUP => ENOTSUP,
3313
            libc::EILSEQ => EILSEQ,
3314
            libc::EBACKGROUND => EBACKGROUND,
3315
            libc::EDIED => EDIED,
3316
            libc::EGREGIOUS => EGREGIOUS,
3317
            libc::EIEIO => EIEIO,
3318
            libc::EGRATUITOUS => EGRATUITOUS,
3319
            libc::EBADMSG => EBADMSG,
3320
            libc::EIDRM => EIDRM,
3321
            libc::EMULTIHOP => EMULTIHOP,
3322
            libc::ENODATA => ENODATA,
3323
            libc::ENOLINK => ENOLINK,
3324
            libc::ENOMSG => ENOMSG,
3325
            libc::ENOSR => ENOSR,
3326
            libc::ENOSTR => ENOSTR,
3327
            libc::EOVERFLOW => EOVERFLOW,
3328
            libc::EPROTO => EPROTO,
3329
            libc::ETIME => ETIME,
3330
            libc::ECANCELED => ECANCELED,
3331
            libc::EOWNERDEAD => EOWNERDEAD,
3332
            libc::ENOTRECOVERABLE => ENOTRECOVERABLE,
3333
            _ => UnknownErrno,
3334
        }
3335
    }
3336
}