@@ -13,47 +13,15 @@ pub unsafe fn cleanup() {
1313}
1414
1515pub 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
2121pub 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 {
6634impl 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