]>
Commit | Line | Data |
---|---|---|
532ac7d7 XL |
1 | //! System bindings for the wasm/web platform |
2 | //! | |
3 | //! This module contains the facade (aka platform-specific) implementations of | |
4 | //! OS level functionality for wasm. Note that this wasm is *not* the emscripten | |
5 | //! wasm, so we have no runtime here. | |
6 | //! | |
7 | //! This is all super highly experimental and not actually intended for | |
8 | //! wide/production use yet, it's still all in the experimental category. This | |
9 | //! will likely change over time. | |
10 | //! | |
11 | //! Currently all functions here are basically stubs that immediately return | |
12 | //! errors. The hope is that with a portability lint we can turn actually just | |
13 | //! remove all this and just omit parts of the standard library if we're | |
14 | //! compiling for wasm. That way it's a compile time error for something that's | |
15 | //! guaranteed to be a runtime error! | |
16 | ||
e1599b0c | 17 | use crate::io as std_io; |
532ac7d7 | 18 | use crate::mem; |
532ac7d7 | 19 | |
1b1a35ee | 20 | #[path = "../unix/alloc.rs"] |
532ac7d7 XL |
21 | pub mod alloc; |
22 | pub mod args; | |
cdc7bbd5 | 23 | #[path = "../unix/cmath.rs"] |
532ac7d7 | 24 | pub mod cmath; |
3dfed10e | 25 | #[path = "../unsupported/condvar.rs"] |
532ac7d7 XL |
26 | pub mod condvar; |
27 | pub mod env; | |
28 | pub mod fd; | |
29 | pub mod fs; | |
dfeec247 | 30 | pub mod io; |
3dfed10e | 31 | #[path = "../unsupported/mutex.rs"] |
532ac7d7 XL |
32 | pub mod mutex; |
33 | pub mod net; | |
532ac7d7 XL |
34 | pub mod os; |
35 | pub use crate::sys_common::os_str_bytes as os_str; | |
1b1a35ee | 36 | #[path = "../unix/path.rs"] |
532ac7d7 | 37 | pub mod path; |
1b1a35ee | 38 | #[path = "../unsupported/pipe.rs"] |
532ac7d7 | 39 | pub mod pipe; |
1b1a35ee | 40 | #[path = "../unsupported/process.rs"] |
532ac7d7 | 41 | pub mod process; |
3dfed10e | 42 | #[path = "../unsupported/rwlock.rs"] |
532ac7d7 | 43 | pub mod rwlock; |
532ac7d7 XL |
44 | pub mod stdio; |
45 | pub mod thread; | |
3dfed10e XL |
46 | #[path = "../unsupported/thread_local_dtor.rs"] |
47 | pub mod thread_local_dtor; | |
48 | #[path = "../unsupported/thread_local_key.rs"] | |
49 | pub mod thread_local_key; | |
532ac7d7 | 50 | pub mod time; |
532ac7d7 | 51 | |
3dfed10e | 52 | #[path = "../unsupported/common.rs"] |
29967ef6 | 53 | #[deny(unsafe_op_in_unsafe_fn)] |
3dfed10e XL |
54 | #[allow(unused)] |
55 | mod common; | |
56 | pub use common::*; | |
532ac7d7 | 57 | |
e1599b0c XL |
58 | pub fn decode_error_kind(errno: i32) -> std_io::ErrorKind { |
59 | use std_io::ErrorKind::*; | |
f035d41b | 60 | if errno > u16::MAX as i32 || errno < 0 { |
136023e0 | 61 | return Uncategorized; |
e1599b0c | 62 | } |
60c5eb7d XL |
63 | match errno as u16 { |
64 | wasi::ERRNO_CONNREFUSED => ConnectionRefused, | |
65 | wasi::ERRNO_CONNRESET => ConnectionReset, | |
66 | wasi::ERRNO_PERM | wasi::ERRNO_ACCES => PermissionDenied, | |
67 | wasi::ERRNO_PIPE => BrokenPipe, | |
68 | wasi::ERRNO_NOTCONN => NotConnected, | |
69 | wasi::ERRNO_CONNABORTED => ConnectionAborted, | |
70 | wasi::ERRNO_ADDRNOTAVAIL => AddrNotAvailable, | |
71 | wasi::ERRNO_ADDRINUSE => AddrInUse, | |
72 | wasi::ERRNO_NOENT => NotFound, | |
73 | wasi::ERRNO_INTR => Interrupted, | |
74 | wasi::ERRNO_INVAL => InvalidInput, | |
75 | wasi::ERRNO_TIMEDOUT => TimedOut, | |
76 | wasi::ERRNO_EXIST => AlreadyExists, | |
77 | wasi::ERRNO_AGAIN => WouldBlock, | |
cdc7bbd5 | 78 | wasi::ERRNO_NOSYS => Unsupported, |
17df50a5 | 79 | wasi::ERRNO_NOMEM => OutOfMemory, |
136023e0 | 80 | _ => Uncategorized, |
e1599b0c | 81 | } |
532ac7d7 XL |
82 | } |
83 | ||
f9f354fc XL |
84 | pub fn abort_internal() -> ! { |
85 | unsafe { libc::abort() } | |
532ac7d7 XL |
86 | } |
87 | ||
88 | pub fn hashmap_random_keys() -> (u64, u64) { | |
89 | let mut ret = (0u64, 0u64); | |
90 | unsafe { | |
60c5eb7d | 91 | let base = &mut ret as *mut (u64, u64) as *mut u8; |
532ac7d7 | 92 | let len = mem::size_of_val(&ret); |
60c5eb7d | 93 | wasi::random_get(base, len).expect("random_get failure"); |
532ac7d7 | 94 | } |
dfeec247 | 95 | return ret; |
532ac7d7 XL |
96 | } |
97 | ||
e1599b0c | 98 | fn err2io(err: wasi::Error) -> std_io::Error { |
60c5eb7d | 99 | std_io::Error::from_raw_os_error(err.raw_error().into()) |
532ac7d7 | 100 | } |