async_io_mini/
sys.rs

1pub use sys::*;
2
3use libc as sys;
4
5#[macro_export]
6macro_rules! syscall {
7    ($ret:expr) => {{
8        let result = $ret;
9
10        if result != 0 {
11            Err(::std::io::Error::from_raw_os_error(result))
12        } else {
13            Ok(result)
14        }
15    }};
16}
17
18#[macro_export]
19macro_rules! syscall_los {
20    ($ret:expr) => {{
21        let result = $ret;
22
23        if result == -1 {
24            Err(::std::io::Error::last_os_error())
25        } else {
26            Ok(result)
27        }
28    }};
29}
30
31#[macro_export]
32macro_rules! syscall_los_eagain {
33    ($ret:expr) => {{
34        #[allow(unreachable_patterns)]
35        match syscall_los!($ret) {
36            Ok(_) => Ok(()),
37            Err(e)
38                if matches!(
39                    e.raw_os_error(),
40                    Some(sys::EINPROGRESS) | Some(sys::EAGAIN) | Some(sys::EWOULDBLOCK)
41                ) =>
42            {
43                Ok(())
44            }
45            Err(e) => Err(e),
46        }?;
47
48        Ok::<_, io::Error>(())
49    }};
50}
51
52#[macro_export]
53macro_rules! ready {
54    ($e:expr $(,)?) => {
55        match $e {
56            core::task::Poll::Ready(t) => t,
57            core::task::Poll::Pending => return core::task::Poll::Pending,
58        }
59    };
60}