1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
use core::intrinsics;
use error::Error as StdError;
use ffi::{OsString, OsStr};
use fmt;
use io;
use mem;
use path::{self, PathBuf};
use str;
use sys::{unsupported, Void};
pub fn errno() -> i32 {
0
}
pub fn error_string(_errno: i32) -> String {
format!("operation successful")
}
pub fn getcwd() -> io::Result<PathBuf> {
unsupported()
}
pub fn chdir(_: &path::Path) -> io::Result<()> {
unsupported()
}
pub struct SplitPaths<'a>(&'a Void);
pub fn split_paths(_unparsed: &OsStr) -> SplitPaths {
panic!("unsupported")
}
impl<'a> Iterator for SplitPaths<'a> {
type Item = PathBuf;
fn next(&mut self) -> Option<PathBuf> {
match *self.0 {}
}
}
#[derive(Debug)]
pub struct JoinPathsError;
pub fn join_paths<I, T>(_paths: I) -> Result<OsString, JoinPathsError>
where I: Iterator<Item=T>, T: AsRef<OsStr>
{
Err(JoinPathsError)
}
impl fmt::Display for JoinPathsError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
"not supported on wasm yet".fmt(f)
}
}
impl StdError for JoinPathsError {
fn description(&self) -> &str {
"not supported on wasm yet"
}
}
pub fn current_exe() -> io::Result<PathBuf> {
unsupported()
}
pub struct Env(Void);
impl Iterator for Env {
type Item = (OsString, OsString);
fn next(&mut self) -> Option<(OsString, OsString)> {
match self.0 {}
}
}
pub fn env() -> Env {
panic!("not supported on web assembly")
}
pub fn getenv(k: &OsStr) -> io::Result<Option<OsString>> {
if !super::DEBUG {
return Ok(None)
}
extern {
fn rust_wasm_getenv_len(k: *const u8, kl: usize) -> isize;
fn rust_wasm_getenv_data(k: *const u8, kl: usize, v: *mut u8);
}
unsafe {
let k: &[u8] = mem::transmute(k);
let n = rust_wasm_getenv_len(k.as_ptr(), k.len());
if n == -1 {
return Ok(None)
}
let mut data = vec![0; n as usize];
rust_wasm_getenv_data(k.as_ptr(), k.len(), data.as_mut_ptr());
Ok(Some(mem::transmute(data)))
}
}
pub fn setenv(_k: &OsStr, _v: &OsStr) -> io::Result<()> {
unsupported()
}
pub fn unsetenv(_n: &OsStr) -> io::Result<()> {
unsupported()
}
pub fn temp_dir() -> PathBuf {
panic!("no filesystem on wasm")
}
pub fn home_dir() -> Option<PathBuf> {
None
}
pub fn exit(_code: i32) -> ! {
unsafe { intrinsics::abort() }
}
pub fn getpid() -> u32 {
panic!("no pids on wasm")
}