@@ -5,10 +5,11 @@ use super::err2io;
55use crate :: io:: { self , IoSlice , IoSliceMut , SeekFrom } ;
66use crate :: mem;
77use crate :: net:: Shutdown ;
8+ use crate :: os:: raw:: c_int;
89
910#[ derive( Debug ) ]
1011pub struct WasiFd {
11- fd : wasi :: Fd ,
12+ fd : c_int ,
1213}
1314
1415fn iovec < ' a > ( a : & ' a mut [ IoSliceMut < ' _ > ] ) -> & ' a [ wasi:: Iovec ] {
@@ -26,38 +27,38 @@ fn ciovec<'a>(a: &'a [IoSlice<'_>]) -> &'a [wasi::Ciovec] {
2627}
2728
2829impl WasiFd {
29- pub unsafe fn from_raw ( fd : wasi :: Fd ) -> WasiFd {
30+ pub unsafe fn from_raw ( fd : c_int ) -> WasiFd {
3031 WasiFd { fd }
3132 }
3233
33- pub fn into_raw ( self ) -> wasi :: Fd {
34+ pub fn into_raw ( self ) -> c_int {
3435 let ret = self . fd ;
3536 mem:: forget ( self ) ;
3637 ret
3738 }
3839
39- pub fn as_raw ( & self ) -> wasi :: Fd {
40+ pub fn as_raw ( & self ) -> c_int {
4041 self . fd
4142 }
4243
4344 pub fn datasync ( & self ) -> io:: Result < ( ) > {
44- unsafe { wasi:: fd_datasync ( self . fd ) . map_err ( err2io) }
45+ unsafe { wasi:: fd_datasync ( self . fd as wasi :: Fd ) . map_err ( err2io) }
4546 }
4647
4748 pub fn pread ( & self , bufs : & mut [ IoSliceMut < ' _ > ] , offset : u64 ) -> io:: Result < usize > {
48- unsafe { wasi:: fd_pread ( self . fd , iovec ( bufs) , offset) . map_err ( err2io) }
49+ unsafe { wasi:: fd_pread ( self . fd as wasi :: Fd , iovec ( bufs) , offset) . map_err ( err2io) }
4950 }
5051
5152 pub fn pwrite ( & self , bufs : & [ IoSlice < ' _ > ] , offset : u64 ) -> io:: Result < usize > {
52- unsafe { wasi:: fd_pwrite ( self . fd , ciovec ( bufs) , offset) . map_err ( err2io) }
53+ unsafe { wasi:: fd_pwrite ( self . fd as wasi :: Fd , ciovec ( bufs) , offset) . map_err ( err2io) }
5354 }
5455
5556 pub fn read ( & self , bufs : & mut [ IoSliceMut < ' _ > ] ) -> io:: Result < usize > {
56- unsafe { wasi:: fd_read ( self . fd , iovec ( bufs) ) . map_err ( err2io) }
57+ unsafe { wasi:: fd_read ( self . fd as wasi :: Fd , iovec ( bufs) ) . map_err ( err2io) }
5758 }
5859
5960 pub fn write ( & self , bufs : & [ IoSlice < ' _ > ] ) -> io:: Result < usize > {
60- unsafe { wasi:: fd_write ( self . fd , ciovec ( bufs) ) . map_err ( err2io) }
61+ unsafe { wasi:: fd_write ( self . fd as wasi :: Fd , ciovec ( bufs) ) . map_err ( err2io) }
6162 }
6263
6364 pub fn seek ( & self , pos : SeekFrom ) -> io:: Result < u64 > {
@@ -66,37 +67,37 @@ impl WasiFd {
6667 SeekFrom :: End ( pos) => ( wasi:: WHENCE_END , pos) ,
6768 SeekFrom :: Current ( pos) => ( wasi:: WHENCE_CUR , pos) ,
6869 } ;
69- unsafe { wasi:: fd_seek ( self . fd , offset, whence) . map_err ( err2io) }
70+ unsafe { wasi:: fd_seek ( self . fd as wasi :: Fd , offset, whence) . map_err ( err2io) }
7071 }
7172
7273 pub fn tell ( & self ) -> io:: Result < u64 > {
73- unsafe { wasi:: fd_tell ( self . fd ) . map_err ( err2io) }
74+ unsafe { wasi:: fd_tell ( self . fd as wasi :: Fd ) . map_err ( err2io) }
7475 }
7576
7677 // FIXME: __wasi_fd_fdstat_get
7778
7879 pub fn set_flags ( & self , flags : wasi:: Fdflags ) -> io:: Result < ( ) > {
79- unsafe { wasi:: fd_fdstat_set_flags ( self . fd , flags) . map_err ( err2io) }
80+ unsafe { wasi:: fd_fdstat_set_flags ( self . fd as wasi :: Fd , flags) . map_err ( err2io) }
8081 }
8182
8283 pub fn set_rights ( & self , base : wasi:: Rights , inheriting : wasi:: Rights ) -> io:: Result < ( ) > {
83- unsafe { wasi:: fd_fdstat_set_rights ( self . fd , base, inheriting) . map_err ( err2io) }
84+ unsafe { wasi:: fd_fdstat_set_rights ( self . fd as wasi :: Fd , base, inheriting) . map_err ( err2io) }
8485 }
8586
8687 pub fn sync ( & self ) -> io:: Result < ( ) > {
87- unsafe { wasi:: fd_sync ( self . fd ) . map_err ( err2io) }
88+ unsafe { wasi:: fd_sync ( self . fd as wasi :: Fd ) . map_err ( err2io) }
8889 }
8990
9091 pub fn advise ( & self , offset : u64 , len : u64 , advice : wasi:: Advice ) -> io:: Result < ( ) > {
91- unsafe { wasi:: fd_advise ( self . fd , offset, len, advice) . map_err ( err2io) }
92+ unsafe { wasi:: fd_advise ( self . fd as wasi :: Fd , offset, len, advice) . map_err ( err2io) }
9293 }
9394
9495 pub fn allocate ( & self , offset : u64 , len : u64 ) -> io:: Result < ( ) > {
95- unsafe { wasi:: fd_allocate ( self . fd , offset, len) . map_err ( err2io) }
96+ unsafe { wasi:: fd_allocate ( self . fd as wasi :: Fd , offset, len) . map_err ( err2io) }
9697 }
9798
9899 pub fn create_directory ( & self , path : & str ) -> io:: Result < ( ) > {
99- unsafe { wasi:: path_create_directory ( self . fd , path) . map_err ( err2io) }
100+ unsafe { wasi:: path_create_directory ( self . fd as wasi :: Fd , path) . map_err ( err2io) }
100101 }
101102
102103 pub fn link (
@@ -107,7 +108,14 @@ impl WasiFd {
107108 new_path : & str ,
108109 ) -> io:: Result < ( ) > {
109110 unsafe {
110- wasi:: path_link ( self . fd , old_flags, old_path, new_fd. fd , new_path) . map_err ( err2io)
111+ wasi:: path_link (
112+ self . fd as wasi:: Fd ,
113+ old_flags,
114+ old_path,
115+ new_fd. fd as wasi:: Fd ,
116+ new_path,
117+ )
118+ . map_err ( err2io)
111119 }
112120 }
113121
@@ -122,33 +130,42 @@ impl WasiFd {
122130 ) -> io:: Result < WasiFd > {
123131 unsafe {
124132 wasi:: path_open (
125- self . fd ,
133+ self . fd as wasi :: Fd ,
126134 dirflags,
127135 path,
128136 oflags,
129137 fs_rights_base,
130138 fs_rights_inheriting,
131139 fs_flags,
132140 )
133- . map ( |fd| WasiFd :: from_raw ( fd) )
141+ . map ( |fd| WasiFd :: from_raw ( fd as c_int ) )
134142 . map_err ( err2io)
135143 }
136144 }
137145
138146 pub fn readdir ( & self , buf : & mut [ u8 ] , cookie : wasi:: Dircookie ) -> io:: Result < usize > {
139- unsafe { wasi:: fd_readdir ( self . fd , buf. as_mut_ptr ( ) , buf. len ( ) , cookie) . map_err ( err2io) }
147+ unsafe {
148+ wasi:: fd_readdir ( self . fd as wasi:: Fd , buf. as_mut_ptr ( ) , buf. len ( ) , cookie)
149+ . map_err ( err2io)
150+ }
140151 }
141152
142153 pub fn readlink ( & self , path : & str , buf : & mut [ u8 ] ) -> io:: Result < usize > {
143- unsafe { wasi:: path_readlink ( self . fd , path, buf. as_mut_ptr ( ) , buf. len ( ) ) . map_err ( err2io) }
154+ unsafe {
155+ wasi:: path_readlink ( self . fd as wasi:: Fd , path, buf. as_mut_ptr ( ) , buf. len ( ) )
156+ . map_err ( err2io)
157+ }
144158 }
145159
146160 pub fn rename ( & self , old_path : & str , new_fd : & WasiFd , new_path : & str ) -> io:: Result < ( ) > {
147- unsafe { wasi:: path_rename ( self . fd , old_path, new_fd. fd , new_path) . map_err ( err2io) }
161+ unsafe {
162+ wasi:: path_rename ( self . fd as wasi:: Fd , old_path, new_fd. fd as wasi:: Fd , new_path)
163+ . map_err ( err2io)
164+ }
148165 }
149166
150167 pub fn filestat_get ( & self ) -> io:: Result < wasi:: Filestat > {
151- unsafe { wasi:: fd_filestat_get ( self . fd ) . map_err ( err2io) }
168+ unsafe { wasi:: fd_filestat_get ( self . fd as wasi :: Fd ) . map_err ( err2io) }
152169 }
153170
154171 pub fn filestat_set_times (
@@ -157,19 +174,21 @@ impl WasiFd {
157174 mtim : wasi:: Timestamp ,
158175 fstflags : wasi:: Fstflags ,
159176 ) -> io:: Result < ( ) > {
160- unsafe { wasi:: fd_filestat_set_times ( self . fd , atim, mtim, fstflags) . map_err ( err2io) }
177+ unsafe {
178+ wasi:: fd_filestat_set_times ( self . fd as wasi:: Fd , atim, mtim, fstflags) . map_err ( err2io)
179+ }
161180 }
162181
163182 pub fn filestat_set_size ( & self , size : u64 ) -> io:: Result < ( ) > {
164- unsafe { wasi:: fd_filestat_set_size ( self . fd , size) . map_err ( err2io) }
183+ unsafe { wasi:: fd_filestat_set_size ( self . fd as wasi :: Fd , size) . map_err ( err2io) }
165184 }
166185
167186 pub fn path_filestat_get (
168187 & self ,
169188 flags : wasi:: Lookupflags ,
170189 path : & str ,
171190 ) -> io:: Result < wasi:: Filestat > {
172- unsafe { wasi:: path_filestat_get ( self . fd , flags, path) . map_err ( err2io) }
191+ unsafe { wasi:: path_filestat_get ( self . fd as wasi :: Fd , flags, path) . map_err ( err2io) }
173192 }
174193
175194 pub fn path_filestat_set_times (
@@ -181,33 +200,33 @@ impl WasiFd {
181200 fstflags : wasi:: Fstflags ,
182201 ) -> io:: Result < ( ) > {
183202 unsafe {
184- wasi:: path_filestat_set_times ( self . fd , flags, path, atim, mtim, fstflags)
203+ wasi:: path_filestat_set_times ( self . fd as wasi :: Fd , flags, path, atim, mtim, fstflags)
185204 . map_err ( err2io)
186205 }
187206 }
188207
189208 pub fn symlink ( & self , old_path : & str , new_path : & str ) -> io:: Result < ( ) > {
190- unsafe { wasi:: path_symlink ( old_path, self . fd , new_path) . map_err ( err2io) }
209+ unsafe { wasi:: path_symlink ( old_path, self . fd as wasi :: Fd , new_path) . map_err ( err2io) }
191210 }
192211
193212 pub fn unlink_file ( & self , path : & str ) -> io:: Result < ( ) > {
194- unsafe { wasi:: path_unlink_file ( self . fd , path) . map_err ( err2io) }
213+ unsafe { wasi:: path_unlink_file ( self . fd as wasi :: Fd , path) . map_err ( err2io) }
195214 }
196215
197216 pub fn remove_directory ( & self , path : & str ) -> io:: Result < ( ) > {
198- unsafe { wasi:: path_remove_directory ( self . fd , path) . map_err ( err2io) }
217+ unsafe { wasi:: path_remove_directory ( self . fd as wasi :: Fd , path) . map_err ( err2io) }
199218 }
200219
201220 pub fn sock_recv (
202221 & self ,
203222 ri_data : & mut [ IoSliceMut < ' _ > ] ,
204223 ri_flags : wasi:: Riflags ,
205224 ) -> io:: Result < ( usize , wasi:: Roflags ) > {
206- unsafe { wasi:: sock_recv ( self . fd , iovec ( ri_data) , ri_flags) . map_err ( err2io) }
225+ unsafe { wasi:: sock_recv ( self . fd as wasi :: Fd , iovec ( ri_data) , ri_flags) . map_err ( err2io) }
207226 }
208227
209228 pub fn sock_send ( & self , si_data : & [ IoSlice < ' _ > ] , si_flags : wasi:: Siflags ) -> io:: Result < usize > {
210- unsafe { wasi:: sock_send ( self . fd , ciovec ( si_data) , si_flags) . map_err ( err2io) }
229+ unsafe { wasi:: sock_send ( self . fd as wasi :: Fd , ciovec ( si_data) , si_flags) . map_err ( err2io) }
211230 }
212231
213232 pub fn sock_shutdown ( & self , how : Shutdown ) -> io:: Result < ( ) > {
@@ -216,14 +235,14 @@ impl WasiFd {
216235 Shutdown :: Write => wasi:: SDFLAGS_WR ,
217236 Shutdown :: Both => wasi:: SDFLAGS_WR | wasi:: SDFLAGS_RD ,
218237 } ;
219- unsafe { wasi:: sock_shutdown ( self . fd , how) . map_err ( err2io) }
238+ unsafe { wasi:: sock_shutdown ( self . fd as wasi :: Fd , how) . map_err ( err2io) }
220239 }
221240}
222241
223242impl Drop for WasiFd {
224243 fn drop ( & mut self ) {
225244 // FIXME: can we handle the return code here even though we can't on
226245 // unix?
227- let _ = unsafe { wasi:: fd_close ( self . fd ) } ;
246+ let _ = unsafe { wasi:: fd_close ( self . fd as wasi :: Fd ) } ;
228247 }
229248}
0 commit comments