@@ -13,47 +13,15 @@ pub unsafe fn cleanup() {
13
13
}
14
14
15
15
pub struct Args {
16
- iter : vec:: IntoIter < OsString > ,
16
+ iter : vec:: IntoIter < Vec < u8 > > ,
17
17
_dont_send_or_sync_me : PhantomData < * mut ( ) > ,
18
18
}
19
19
20
20
/// Returns the command line arguments
21
21
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
57
25
}
58
26
}
59
27
@@ -66,7 +34,7 @@ impl Args {
66
34
impl Iterator for Args {
67
35
type Item = OsString ;
68
36
fn next ( & mut self ) -> Option < OsString > {
69
- self . iter . next ( )
37
+ self . iter . next ( ) . map ( OsString :: from_vec )
70
38
}
71
39
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
72
40
self . iter . size_hint ( )
0 commit comments