1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//! This package exposes the `cvt` function used extensively by `libstd` to
//! convert platform-specific syscall error codes to `std::io::Result`.
//!
//! Usually syscalls use return values for errors, the conventions differ. For instance,
//! on Unix `0` usually means success on Unix but failure on Windows.
//! While those conventions are not always followed, they usually are and
//! `cvt` is there to reduce the mental bookkeeping and make it easier to handle syscall errors.
//!
//! The code was mostly copied over from Rust libstd, because the function is not public.

cfg_if::cfg_if! {
    if #[cfg(target_os = "vxworks")] {
        mod vxworks;
        pub use self::vxworks::{cvt, cvt_r};
    } else if #[cfg(unix)] {
        mod unix;
        pub use self::unix::{cvt, cvt_r};
    } else if #[cfg(windows)] {
        mod windows;
        pub use self::windows::cvt;
    } else {
        compile_error!("cvt doesn't compile for this platform yet");
    }
}