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}