1pub(crate) mod stdio;
3use crate::{core::result::NSTDResult, NSTDUInt};
4use core::ffi::c_int;
5use libc::{
6 EACCES, EAGAIN, EBADF, ECONNRESET, EINTR, EINVAL, EISDIR, ENETDOWN, ENETUNREACH, ENOMEM,
7 ENOTCONN, EPIPE, ESPIPE, ETIMEDOUT, EWOULDBLOCK,
8};
9use nstdapi::nstdapi;
10
11#[nstdapi]
13#[derive(Clone, Copy, PartialEq, Eq)]
14#[allow(non_camel_case_types)]
15pub enum NSTDUnixIOError {
16 NSTD_UNIX_IO_ERROR_NONE,
18 NSTD_UNIX_IO_ERROR_UNKNOWN,
20 NSTD_UNIX_IO_ERROR_NOT_FOUND,
22 NSTD_UNIX_IO_ERROR_PERMISSION_DENIED,
24 NSTD_UNIX_IO_ERROR_CONNECTION_RESET,
26 NSTD_UNIX_IO_ERROR_NO_CONNECTION,
28 NSTD_UNIX_IO_ERROR_INVALID_SEEK,
31 NSTD_UNIX_IO_ERROR_BROKEN_PIPE,
33 NSTD_UNIX_IO_ERROR_BLOCKING,
35 NSTD_UNIX_IO_ERROR_IS_DIR,
37 NSTD_UNIX_IO_ERROR_INVALID_INPUT,
39 NSTD_UNIX_IO_ERROR_INVALID_DATA,
41 NSTD_UNIX_IO_ERROR_TIMED_OUT,
43 NSTD_UNIX_IO_ERROR_INTERRUPTED,
45 NSTD_UNIX_IO_ERROR_UNEXPECTED_EOF,
47 NSTD_UNIX_IO_ERROR_OUT_OF_MEMORY,
49}
50impl NSTDUnixIOError {
51 #[allow(unused)]
53 fn last() -> Self {
54 #[allow(trivial_numeric_casts, unreachable_patterns)]
55 match errno::errno().0 as c_int {
56 0 => Self::NSTD_UNIX_IO_ERROR_NONE,
57 EBADF => Self::NSTD_UNIX_IO_ERROR_NOT_FOUND,
58 EACCES => Self::NSTD_UNIX_IO_ERROR_PERMISSION_DENIED,
59 ECONNRESET => Self::NSTD_UNIX_IO_ERROR_CONNECTION_RESET,
60 ENETDOWN | ENETUNREACH | ENOTCONN => Self::NSTD_UNIX_IO_ERROR_NO_CONNECTION,
61 ESPIPE => Self::NSTD_UNIX_IO_ERROR_INVALID_SEEK,
62 EPIPE => Self::NSTD_UNIX_IO_ERROR_BROKEN_PIPE,
63 EAGAIN | EWOULDBLOCK => Self::NSTD_UNIX_IO_ERROR_BLOCKING,
64 EISDIR => Self::NSTD_UNIX_IO_ERROR_IS_DIR,
65 EINVAL => Self::NSTD_UNIX_IO_ERROR_INVALID_INPUT,
66 ETIMEDOUT => Self::NSTD_UNIX_IO_ERROR_TIMED_OUT,
67 EINTR => Self::NSTD_UNIX_IO_ERROR_INTERRUPTED,
68 ENOMEM => Self::NSTD_UNIX_IO_ERROR_OUT_OF_MEMORY,
69 _ => Self::NSTD_UNIX_IO_ERROR_UNKNOWN,
70 }
71 }
72}
73
74pub type NSTDUnixIOResult = NSTDResult<NSTDUInt, NSTDUnixIOError>;
77
78pub type NSTDUnixFileDescriptor = c_int;