Coverage Report

Created: 2026-04-14 06:46

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