1
1
//! PXE Base Code protocol.
2
2
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
+ } ;
4
8
5
9
use bitflags:: bitflags;
6
10
use uefi_macros:: { unsafe_guid, Protocol } ;
@@ -29,12 +33,12 @@ pub struct BaseCode {
29
33
mtftp : unsafe extern "efiapi" fn (
30
34
this : & Self ,
31
35
operation : TftpOpcode ,
32
- buffer : Option < NonNull < c_void > > ,
36
+ buffer : * mut c_void ,
33
37
overwrite : bool ,
34
38
buffer_size : & mut u64 ,
35
39
block_size : Option < & usize > ,
36
40
server_ip : & IpAddress ,
37
- filename : Option < NonNull < Char8 > > ,
41
+ filename : * const Char8 ,
38
42
info : Option < & MtftpInfo > ,
39
43
dont_use_buffer : bool ,
40
44
) -> Status ,
@@ -47,7 +51,7 @@ pub struct BaseCode {
47
51
src_ip : Option < & IpAddress > ,
48
52
src_port : Option < & mut u16 > ,
49
53
header_size : Option < & usize > ,
50
- header_ptr : Option < NonNull < c_void > > ,
54
+ header_ptr : * const c_void ,
51
55
buffer_size : & usize ,
52
56
buffer_ptr : NonNull < c_void > ,
53
57
) -> Status ,
@@ -59,7 +63,7 @@ pub struct BaseCode {
59
63
src_ip : Option < & mut IpAddress > ,
60
64
src_port : Option < & mut u16 > ,
61
65
header_size : Option < & usize > ,
62
- header_ptr : Option < NonNull < c_void > > ,
66
+ header_ptr : * mut c_void ,
63
67
buffer_size : & mut usize ,
64
68
buffer_ptr : NonNull < c_void > ,
65
69
) -> Status ,
@@ -139,18 +143,17 @@ impl BaseCode {
139
143
/// Returns the size of a file located on a TFTP server.
140
144
pub fn tftp_get_file_size ( & mut self , server_ip : & IpAddress , filename : & CStr8 ) -> Result < u64 > {
141
145
let mut buffer_size = 0 ;
142
- let filename = NonNull :: from ( & filename. to_bytes_with_nul ( ) [ 0 ] ) . cast ( ) ;
143
146
144
147
let status = unsafe {
145
148
( self . mtftp ) (
146
149
self ,
147
150
TftpOpcode :: TftpGetFileSize ,
148
- None ,
151
+ null_mut ( ) ,
149
152
false ,
150
153
& mut buffer_size,
151
154
None ,
152
155
server_ip,
153
- Some ( filename) ,
156
+ filename. as_ptr ( ) ,
154
157
None ,
155
158
false ,
156
159
)
@@ -167,14 +170,11 @@ impl BaseCode {
167
170
filename : & CStr8 ,
168
171
buffer : Option < & mut [ u8 ] > ,
169
172
) -> Result < u64 > {
170
- let filename = NonNull :: from ( & filename. to_bytes_with_nul ( ) [ 0 ] ) . cast ( ) ;
171
-
172
173
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 > ( ) ;
174
174
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 )
176
176
} else {
177
- ( None , 0 , true )
177
+ ( null_mut ( ) , 0 , true )
178
178
} ;
179
179
180
180
let status = unsafe {
@@ -186,7 +186,7 @@ impl BaseCode {
186
186
& mut buffer_size,
187
187
None ,
188
188
server_ip,
189
- Some ( filename) ,
189
+ filename. as_ptr ( ) ,
190
190
None ,
191
191
dont_use_buffer,
192
192
)
@@ -204,21 +204,19 @@ impl BaseCode {
204
204
overwrite : bool ,
205
205
buffer : & [ u8 ] ,
206
206
) -> 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 ( ) ;
210
208
let mut buffer_size = u64:: try_from ( buffer. len ( ) ) . expect ( "buffer length should fit in u64" ) ;
211
209
212
210
unsafe {
213
211
( self . mtftp ) (
214
212
self ,
215
213
TftpOpcode :: TftpWriteFile ,
216
- Some ( buffer_ptr) ,
214
+ buffer_ptr,
217
215
overwrite,
218
216
& mut buffer_size,
219
217
None ,
220
218
server_ip,
221
- Some ( filename) ,
219
+ filename. as_ptr ( ) ,
222
220
None ,
223
221
false ,
224
222
)
@@ -234,21 +232,19 @@ impl BaseCode {
234
232
buffer : & ' a mut [ u8 ] ,
235
233
) -> Result < impl Iterator < Item = core:: result:: Result < TftpFileInfo < ' a > , ReadDirParseError > > + ' a >
236
234
{
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 ( ) ;
240
236
let mut buffer_size = u64:: try_from ( buffer. len ( ) ) . expect ( "buffer length should fit in u64" ) ;
241
237
242
238
let status = unsafe {
243
239
( self . mtftp ) (
244
240
self ,
245
241
TftpOpcode :: TftpReadDirectory ,
246
- Some ( buffer_ptr) ,
242
+ buffer_ptr,
247
243
false ,
248
244
& mut buffer_size,
249
245
None ,
250
246
server_ip,
251
- Some ( filename ) ,
247
+ directory_name . as_ptr ( ) ,
252
248
None ,
253
249
false ,
254
250
)
@@ -311,18 +307,17 @@ impl BaseCode {
311
307
info : & MtftpInfo ,
312
308
) -> Result < u64 > {
313
309
let mut buffer_size = 0 ;
314
- let filename = NonNull :: from ( & filename. to_bytes_with_nul ( ) [ 0 ] ) . cast ( ) ;
315
310
316
311
let status = unsafe {
317
312
( self . mtftp ) (
318
313
self ,
319
314
TftpOpcode :: MtftpGetFileSize ,
320
- None ,
315
+ null_mut ( ) ,
321
316
false ,
322
317
& mut buffer_size,
323
318
None ,
324
319
server_ip,
325
- Some ( filename) ,
320
+ filename. as_ptr ( ) ,
326
321
Some ( info) ,
327
322
false ,
328
323
)
@@ -340,14 +335,11 @@ impl BaseCode {
340
335
buffer : Option < & mut [ u8 ] > ,
341
336
info : & MtftpInfo ,
342
337
) -> Result < u64 > {
343
- let filename = NonNull :: from ( & filename. to_bytes_with_nul ( ) [ 0 ] ) . cast ( ) ;
344
-
345
338
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 > ( ) ;
347
339
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 )
349
341
} else {
350
- ( None , 0 , true )
342
+ ( null_mut ( ) , 0 , true )
351
343
} ;
352
344
353
345
let status = unsafe {
@@ -359,7 +351,7 @@ impl BaseCode {
359
351
& mut buffer_size,
360
352
None ,
361
353
server_ip,
362
- Some ( filename) ,
354
+ filename. as_ptr ( ) ,
363
355
Some ( info) ,
364
356
dont_use_buffer,
365
357
)
@@ -377,19 +369,19 @@ impl BaseCode {
377
369
info : & MtftpInfo ,
378
370
) -> Result < impl Iterator < Item = core:: result:: Result < MtftpFileInfo < ' a > , ReadDirParseError > > + ' a >
379
371
{
380
- let buffer_ptr = NonNull :: from ( & buffer[ 0 ] ) . cast ( ) ;
372
+ let buffer_ptr = ( & buffer[ 0 ] as * const u8 as * mut u8 ) . cast ( ) ;
381
373
let mut buffer_size = u64:: try_from ( buffer. len ( ) ) . expect ( "buffer length should fit in u64" ) ;
382
374
383
375
let status = unsafe {
384
376
( self . mtftp ) (
385
377
self ,
386
378
TftpOpcode :: MtftpReadDirectory ,
387
- Some ( buffer_ptr) ,
379
+ buffer_ptr,
388
380
false ,
389
381
& mut buffer_size,
390
382
None ,
391
383
server_ip,
392
- None ,
384
+ null_mut ( ) ,
393
385
Some ( info) ,
394
386
false ,
395
387
)
@@ -477,12 +469,9 @@ impl BaseCode {
477
469
let header_size_tmp;
478
470
let ( header_size, header_ptr) = if let Some ( header) = header {
479
471
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 ( ) )
484
473
} else {
485
- ( None , None )
474
+ ( None , null ( ) )
486
475
} ;
487
476
488
477
unsafe {
@@ -518,12 +507,9 @@ impl BaseCode {
518
507
let header_size_tmp;
519
508
let ( header_size, header_ptr) = if let Some ( header) = header {
520
509
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 ( ) )
525
511
} else {
526
- ( None , None )
512
+ ( None , null_mut ( ) )
527
513
} ;
528
514
529
515
let mut buffer_size = buffer. len ( ) ;
0 commit comments