11//! PXE Base Code protocol.
22
3- use core:: { ffi:: c_void, iter:: from_fn, ptr:: NonNull } ;
3+ use core:: {
4+ ffi:: c_void,
5+ iter:: from_fn,
6+ ptr:: { null, null_mut, NonNull } ,
7+ } ;
48
59use bitflags:: bitflags;
610use uefi_macros:: { unsafe_guid, Protocol } ;
@@ -29,12 +33,12 @@ pub struct BaseCode {
2933 mtftp : unsafe extern "efiapi" fn (
3034 this : & Self ,
3135 operation : TftpOpcode ,
32- buffer : Option < NonNull < c_void > > ,
36+ buffer : * mut c_void ,
3337 overwrite : bool ,
3438 buffer_size : & mut u64 ,
3539 block_size : Option < & usize > ,
3640 server_ip : & IpAddress ,
37- filename : Option < NonNull < Char8 > > ,
41+ filename : * const Char8 ,
3842 info : Option < & MtftpInfo > ,
3943 dont_use_buffer : bool ,
4044 ) -> Status ,
@@ -47,7 +51,7 @@ pub struct BaseCode {
4751 src_ip : Option < & IpAddress > ,
4852 src_port : Option < & mut u16 > ,
4953 header_size : Option < & usize > ,
50- header_ptr : Option < NonNull < c_void > > ,
54+ header_ptr : * const c_void ,
5155 buffer_size : & usize ,
5256 buffer_ptr : NonNull < c_void > ,
5357 ) -> Status ,
@@ -59,7 +63,7 @@ pub struct BaseCode {
5963 src_ip : Option < & mut IpAddress > ,
6064 src_port : Option < & mut u16 > ,
6165 header_size : Option < & usize > ,
62- header_ptr : Option < NonNull < c_void > > ,
66+ header_ptr : * mut c_void ,
6367 buffer_size : & mut usize ,
6468 buffer_ptr : NonNull < c_void > ,
6569 ) -> Status ,
@@ -139,18 +143,17 @@ impl BaseCode {
139143 /// Returns the size of a file located on a TFTP server.
140144 pub fn tftp_get_file_size ( & mut self , server_ip : & IpAddress , filename : & CStr8 ) -> Result < u64 > {
141145 let mut buffer_size = 0 ;
142- let filename = NonNull :: from ( & filename. to_bytes_with_nul ( ) [ 0 ] ) . cast ( ) ;
143146
144147 let status = unsafe {
145148 ( self . mtftp ) (
146149 self ,
147150 TftpOpcode :: TftpGetFileSize ,
148- None ,
151+ null_mut ( ) ,
149152 false ,
150153 & mut buffer_size,
151154 None ,
152155 server_ip,
153- Some ( filename) ,
156+ filename. as_ptr ( ) ,
154157 None ,
155158 false ,
156159 )
@@ -167,14 +170,11 @@ impl BaseCode {
167170 filename : & CStr8 ,
168171 buffer : Option < & mut [ u8 ] > ,
169172 ) -> Result < u64 > {
170- let filename = NonNull :: from ( & filename. to_bytes_with_nul ( ) [ 0 ] ) . cast ( ) ;
171-
172173 let ( buffer_ptr, mut buffer_size, dont_use_buffer) = if let Some ( buffer) = buffer {
173- let buffer_ptr = NonNull :: from ( & mut buffer[ 0 ] ) . cast :: < c_void > ( ) ;
174174 let buffer_size = u64:: try_from ( buffer. len ( ) ) . unwrap ( ) ;
175- ( Some ( buffer_ptr ) , buffer_size, false )
175+ ( ( & mut buffer [ 0 ] as * mut u8 ) . cast ( ) , buffer_size, false )
176176 } else {
177- ( None , 0 , true )
177+ ( null_mut ( ) , 0 , true )
178178 } ;
179179
180180 let status = unsafe {
@@ -186,7 +186,7 @@ impl BaseCode {
186186 & mut buffer_size,
187187 None ,
188188 server_ip,
189- Some ( filename) ,
189+ filename. as_ptr ( ) ,
190190 None ,
191191 dont_use_buffer,
192192 )
@@ -204,21 +204,19 @@ impl BaseCode {
204204 overwrite : bool ,
205205 buffer : & [ u8 ] ,
206206 ) -> Result {
207- let filename = NonNull :: from ( & filename. to_bytes_with_nul ( ) [ 0 ] ) . cast ( ) ;
208-
209- let buffer_ptr = NonNull :: from ( & buffer[ 0 ] ) . cast ( ) ;
207+ let buffer_ptr = ( & buffer[ 0 ] as * const u8 as * mut u8 ) . cast ( ) ;
210208 let mut buffer_size = u64:: try_from ( buffer. len ( ) ) . expect ( "buffer length should fit in u64" ) ;
211209
212210 unsafe {
213211 ( self . mtftp ) (
214212 self ,
215213 TftpOpcode :: TftpWriteFile ,
216- Some ( buffer_ptr) ,
214+ buffer_ptr,
217215 overwrite,
218216 & mut buffer_size,
219217 None ,
220218 server_ip,
221- Some ( filename) ,
219+ filename. as_ptr ( ) ,
222220 None ,
223221 false ,
224222 )
@@ -234,21 +232,19 @@ impl BaseCode {
234232 buffer : & ' a mut [ u8 ] ,
235233 ) -> Result < impl Iterator < Item = core:: result:: Result < TftpFileInfo < ' a > , ReadDirParseError > > + ' a >
236234 {
237- let filename = NonNull :: from ( & directory_name. to_bytes_with_nul ( ) [ 0 ] ) . cast ( ) ;
238-
239- let buffer_ptr = NonNull :: from ( & buffer[ 0 ] ) . cast ( ) ;
235+ let buffer_ptr = ( & buffer[ 0 ] as * const u8 as * mut u8 ) . cast ( ) ;
240236 let mut buffer_size = u64:: try_from ( buffer. len ( ) ) . expect ( "buffer length should fit in u64" ) ;
241237
242238 let status = unsafe {
243239 ( self . mtftp ) (
244240 self ,
245241 TftpOpcode :: TftpReadDirectory ,
246- Some ( buffer_ptr) ,
242+ buffer_ptr,
247243 false ,
248244 & mut buffer_size,
249245 None ,
250246 server_ip,
251- Some ( filename ) ,
247+ directory_name . as_ptr ( ) ,
252248 None ,
253249 false ,
254250 )
@@ -311,18 +307,17 @@ impl BaseCode {
311307 info : & MtftpInfo ,
312308 ) -> Result < u64 > {
313309 let mut buffer_size = 0 ;
314- let filename = NonNull :: from ( & filename. to_bytes_with_nul ( ) [ 0 ] ) . cast ( ) ;
315310
316311 let status = unsafe {
317312 ( self . mtftp ) (
318313 self ,
319314 TftpOpcode :: MtftpGetFileSize ,
320- None ,
315+ null_mut ( ) ,
321316 false ,
322317 & mut buffer_size,
323318 None ,
324319 server_ip,
325- Some ( filename) ,
320+ filename. as_ptr ( ) ,
326321 Some ( info) ,
327322 false ,
328323 )
@@ -340,14 +335,11 @@ impl BaseCode {
340335 buffer : Option < & mut [ u8 ] > ,
341336 info : & MtftpInfo ,
342337 ) -> Result < u64 > {
343- let filename = NonNull :: from ( & filename. to_bytes_with_nul ( ) [ 0 ] ) . cast ( ) ;
344-
345338 let ( buffer_ptr, mut buffer_size, dont_use_buffer) = if let Some ( buffer) = buffer {
346- let buffer_ptr = NonNull :: from ( & mut buffer[ 0 ] ) . cast :: < c_void > ( ) ;
347339 let buffer_size = u64:: try_from ( buffer. len ( ) ) . unwrap ( ) ;
348- ( Some ( buffer_ptr ) , buffer_size, false )
340+ ( ( & mut buffer [ 0 ] as * mut u8 ) . cast ( ) , buffer_size, false )
349341 } else {
350- ( None , 0 , true )
342+ ( null_mut ( ) , 0 , true )
351343 } ;
352344
353345 let status = unsafe {
@@ -359,7 +351,7 @@ impl BaseCode {
359351 & mut buffer_size,
360352 None ,
361353 server_ip,
362- Some ( filename) ,
354+ filename. as_ptr ( ) ,
363355 Some ( info) ,
364356 dont_use_buffer,
365357 )
@@ -377,19 +369,19 @@ impl BaseCode {
377369 info : & MtftpInfo ,
378370 ) -> Result < impl Iterator < Item = core:: result:: Result < MtftpFileInfo < ' a > , ReadDirParseError > > + ' a >
379371 {
380- let buffer_ptr = NonNull :: from ( & buffer[ 0 ] ) . cast ( ) ;
372+ let buffer_ptr = ( & buffer[ 0 ] as * const u8 as * mut u8 ) . cast ( ) ;
381373 let mut buffer_size = u64:: try_from ( buffer. len ( ) ) . expect ( "buffer length should fit in u64" ) ;
382374
383375 let status = unsafe {
384376 ( self . mtftp ) (
385377 self ,
386378 TftpOpcode :: MtftpReadDirectory ,
387- Some ( buffer_ptr) ,
379+ buffer_ptr,
388380 false ,
389381 & mut buffer_size,
390382 None ,
391383 server_ip,
392- None ,
384+ null_mut ( ) ,
393385 Some ( info) ,
394386 false ,
395387 )
@@ -477,12 +469,9 @@ impl BaseCode {
477469 let header_size_tmp;
478470 let ( header_size, header_ptr) = if let Some ( header) = header {
479471 header_size_tmp = header. len ( ) ;
480- (
481- Some ( & header_size_tmp) ,
482- Some ( NonNull :: from ( & header[ 0 ] ) . cast ( ) ) ,
483- )
472+ ( Some ( & header_size_tmp) , ( & header[ 0 ] as * const u8 ) . cast ( ) )
484473 } else {
485- ( None , None )
474+ ( None , null ( ) )
486475 } ;
487476
488477 unsafe {
@@ -518,12 +507,9 @@ impl BaseCode {
518507 let header_size_tmp;
519508 let ( header_size, header_ptr) = if let Some ( header) = header {
520509 header_size_tmp = header. len ( ) ;
521- (
522- Some ( & header_size_tmp) ,
523- Some ( NonNull :: from ( & mut header[ 0 ] ) . cast ( ) ) ,
524- )
510+ ( Some ( & header_size_tmp) , ( & mut header[ 0 ] as * mut u8 ) . cast ( ) )
525511 } else {
526- ( None , None )
512+ ( None , null_mut ( ) )
527513 } ;
528514
529515 let mut buffer_size = buffer. len ( ) ;
0 commit comments