diff options
| author | newpavlov <newpavlov@gmail.com> | 2019-08-19 14:54:37 +0300 |
|---|---|---|
| committer | newpavlov <newpavlov@gmail.com> | 2019-08-19 14:54:37 +0300 |
| commit | 7a4f0aece871f9850f83db4760a6fea4f595dc8d (patch) | |
| tree | 7bc4d25709748aef2591ad70c080b106f673db55 /src/libstd | |
| parent | 75a553fa27ffa293a21be5c5138b2b9fd69adfd2 (diff) | |
| download | rust-7a4f0aece871f9850f83db4760a6fea4f595dc8d.tar.gz rust-7a4f0aece871f9850f83db4760a6fea4f595dc8d.zip | |
use wasi::get_args
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/sys/wasi/args.rs | 42 |
1 files changed, 5 insertions, 37 deletions
diff --git a/src/libstd/sys/wasi/args.rs b/src/libstd/sys/wasi/args.rs index 679bb1b2cbe..e2fe0548f12 100644 --- a/src/libstd/sys/wasi/args.rs +++ b/src/libstd/sys/wasi/args.rs @@ -13,47 +13,15 @@ pub unsafe fn cleanup() { } pub struct Args { - iter: vec::IntoIter<OsString>, + iter: vec::IntoIter<Vec<u8>>, _dont_send_or_sync_me: PhantomData<*mut ()>, } /// Returns the command line arguments pub fn args() -> Args { - maybe_args().unwrap_or_else(|_| { - Args { - iter: Vec::new().into_iter(), - _dont_send_or_sync_me: PhantomData - } - }) -} - -fn cvt_wasi(r: u16) -> crate::io::Result<()> { - if r != 0 { - Err(Error::from_raw_os_error(r as i32)) - } else { - Ok(()) - } -} - -fn maybe_args() -> io::Result<Args> { - // FIXME: replace with safe functions - use wasi::wasi_unstable::raw::{__wasi_args_sizes_get, __wasi_args_get}; - unsafe { - let (mut argc, mut argv_buf_size) = (0, 0); - cvt_wasi(__wasi_args_sizes_get(&mut argc, &mut argv_buf_size))?; - - let mut argc = vec![core::ptr::null_mut::<u8>(); argc]; - let mut argv_buf = vec![0; argv_buf_size]; - cvt_wasi(__wasi_args_get(argc.as_mut_ptr(), argv_buf.as_mut_ptr()))?; - - let args = argc.into_iter() - .map(|ptr| CStr::from_ptr(ptr).to_bytes().to_vec()) - .map(|bytes| OsString::from_vec(bytes)) - .collect::<Vec<_>>(); - Ok(Args { - iter: args.into_iter(), - _dont_send_or_sync_me: PhantomData, - }) + Args { + iter: wasi::get_args().unwrap_or(Vec::new()), + _dont_send_or_sync_me: PhantomData } } @@ -66,7 +34,7 @@ impl Args { impl Iterator for Args { type Item = OsString; fn next(&mut self) -> Option<OsString> { - self.iter.next() + self.iter.next().map(OsString::from_vec) } fn size_hint(&self) -> (usize, Option<usize>) { self.iter.size_hint() |
