Skip to content

Commit 7a4f0ae

Browse files
committed
use wasi::get_args
1 parent 75a553f commit 7a4f0ae

File tree

1 file changed

+5
-37
lines changed

1 file changed

+5
-37
lines changed

src/libstd/sys/wasi/args.rs

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -13,47 +13,15 @@ pub unsafe fn cleanup() {
1313
}
1414

1515
pub struct Args {
16-
iter: vec::IntoIter<OsString>,
16+
iter: vec::IntoIter<Vec<u8>>,
1717
_dont_send_or_sync_me: PhantomData<*mut ()>,
1818
}
1919

2020
/// Returns the command line arguments
2121
pub fn args() -> Args {
22-
maybe_args().unwrap_or_else(|_| {
23-
Args {
24-
iter: Vec::new().into_iter(),
25-
_dont_send_or_sync_me: PhantomData
26-
}
27-
})
28-
}
29-
30-
fn cvt_wasi(r: u16) -> crate::io::Result<()> {
31-
if r != 0 {
32-
Err(Error::from_raw_os_error(r as i32))
33-
} else {
34-
Ok(())
35-
}
36-
}
37-
38-
fn maybe_args() -> io::Result<Args> {
39-
// FIXME: replace with safe functions
40-
use wasi::wasi_unstable::raw::{__wasi_args_sizes_get, __wasi_args_get};
41-
unsafe {
42-
let (mut argc, mut argv_buf_size) = (0, 0);
43-
cvt_wasi(__wasi_args_sizes_get(&mut argc, &mut argv_buf_size))?;
44-
45-
let mut argc = vec![core::ptr::null_mut::<u8>(); argc];
46-
let mut argv_buf = vec![0; argv_buf_size];
47-
cvt_wasi(__wasi_args_get(argc.as_mut_ptr(), argv_buf.as_mut_ptr()))?;
48-
49-
let args = argc.into_iter()
50-
.map(|ptr| CStr::from_ptr(ptr).to_bytes().to_vec())
51-
.map(|bytes| OsString::from_vec(bytes))
52-
.collect::<Vec<_>>();
53-
Ok(Args {
54-
iter: args.into_iter(),
55-
_dont_send_or_sync_me: PhantomData,
56-
})
22+
Args {
23+
iter: wasi::get_args().unwrap_or(Vec::new()),
24+
_dont_send_or_sync_me: PhantomData
5725
}
5826
}
5927

@@ -66,7 +34,7 @@ impl Args {
6634
impl Iterator for Args {
6735
type Item = OsString;
6836
fn next(&mut self) -> Option<OsString> {
69-
self.iter.next()
37+
self.iter.next().map(OsString::from_vec)
7038
}
7139
fn size_hint(&self) -> (usize, Option<usize>) {
7240
self.iter.size_hint()

0 commit comments

Comments
 (0)