@@ -48,7 +48,7 @@ pub struct BaseCode {
48
48
buffer : * mut c_void ,
49
49
overwrite : Boolean ,
50
50
buffer_size : & mut u64 ,
51
- block_size : Option < & usize > ,
51
+ block_size : * const usize ,
52
52
server_ip : * const uefi_raw:: IpAddress ,
53
53
filename : * const Char8 ,
54
54
info : * const PxeBaseCodeMtftpInfo ,
@@ -61,8 +61,8 @@ pub struct BaseCode {
61
61
dest_port : & u16 ,
62
62
gateway_ip : * const uefi_raw:: IpAddress ,
63
63
src_ip : * const uefi_raw:: IpAddress ,
64
- src_port : Option < & mut u16 > ,
65
- header_size : Option < & usize > ,
64
+ src_port : * mut u16 ,
65
+ header_size : * const usize ,
66
66
header_ptr : * const c_void ,
67
67
buffer_size : & usize ,
68
68
buffer_ptr : * const c_void ,
@@ -71,10 +71,10 @@ pub struct BaseCode {
71
71
this : & Self ,
72
72
op_flags : UdpOpFlags ,
73
73
dest_ip : * mut uefi_raw:: IpAddress ,
74
- dest_port : Option < & mut u16 > ,
74
+ dest_port : * mut u16 ,
75
75
src_ip : * mut uefi_raw:: IpAddress ,
76
- src_port : Option < & mut u16 > ,
77
- header_size : Option < & usize > ,
76
+ src_port : * mut u16 ,
77
+ header_size : * const usize ,
78
78
header_ptr : * mut c_void ,
79
79
buffer_size : & mut usize ,
80
80
buffer_ptr : * mut c_void ,
@@ -84,14 +84,14 @@ pub struct BaseCode {
84
84
arp : unsafe extern "efiapi" fn (
85
85
this : & Self ,
86
86
ip_addr : * const uefi_raw:: IpAddress ,
87
- mac_addr : Option < & mut MacAddress > ,
87
+ mac_addr : * mut MacAddress ,
88
88
) -> Status ,
89
89
set_parameters : unsafe extern "efiapi" fn (
90
90
this : & Self ,
91
91
new_auto_arp : * const Boolean ,
92
92
new_send_guid : * const Boolean ,
93
- new_ttl : Option < & u8 > ,
94
- new_tos : Option < & u8 > ,
93
+ new_ttl : * const u8 ,
94
+ new_tos : * const u8 ,
95
95
new_make_callback : * const Boolean ,
96
96
) -> Status ,
97
97
set_station_ip : unsafe extern "efiapi" fn (
@@ -161,7 +161,7 @@ impl BaseCode {
161
161
null_mut ( ) ,
162
162
Boolean :: FALSE ,
163
163
& mut buffer_size,
164
- None ,
164
+ null ( ) ,
165
165
server_ip. as_raw_ptr ( ) ,
166
166
cstr8_to_ptr ( filename) ,
167
167
null ( ) ,
@@ -192,7 +192,7 @@ impl BaseCode {
192
192
buffer_ptr,
193
193
Boolean :: FALSE ,
194
194
& mut buffer_size,
195
- None ,
195
+ null ( ) ,
196
196
server_ip. as_raw_ptr ( ) ,
197
197
cstr8_to_ptr ( filename) ,
198
198
null ( ) ,
@@ -220,7 +220,7 @@ impl BaseCode {
220
220
buffer_ptr,
221
221
overwrite. into ( ) ,
222
222
& mut buffer_size,
223
- None ,
223
+ null ( ) ,
224
224
server_ip. as_raw_ptr ( ) ,
225
225
cstr8_to_ptr ( filename) ,
226
226
null ( ) ,
@@ -248,7 +248,7 @@ impl BaseCode {
248
248
buffer_ptr,
249
249
Boolean :: FALSE ,
250
250
& mut buffer_size,
251
- None ,
251
+ null ( ) ,
252
252
server_ip. as_raw_ptr ( ) ,
253
253
cstr8_to_ptr ( directory_name) ,
254
254
null ( ) ,
@@ -321,7 +321,7 @@ impl BaseCode {
321
321
null_mut ( ) ,
322
322
Boolean :: FALSE ,
323
323
& mut buffer_size,
324
- None ,
324
+ null ( ) ,
325
325
server_ip. as_raw_ptr ( ) ,
326
326
cstr8_to_ptr ( filename) ,
327
327
info. as_raw_ptr ( ) ,
@@ -353,7 +353,7 @@ impl BaseCode {
353
353
buffer_ptr,
354
354
Boolean :: FALSE ,
355
355
& mut buffer_size,
356
- None ,
356
+ null ( ) ,
357
357
server_ip. as_raw_ptr ( ) ,
358
358
cstr8_to_ptr ( filename) ,
359
359
info. as_raw_ptr ( ) ,
@@ -381,7 +381,7 @@ impl BaseCode {
381
381
buffer_ptr,
382
382
Boolean :: FALSE ,
383
383
& mut buffer_size,
384
- None ,
384
+ null ( ) ,
385
385
server_ip. as_raw_ptr ( ) ,
386
386
null_mut ( ) ,
387
387
info. as_raw_ptr ( ) ,
@@ -484,8 +484,8 @@ impl BaseCode {
484
484
& dest_port,
485
485
opt_ip_addr_to_ptr ( gateway_ip) ,
486
486
opt_ip_addr_to_ptr ( src_ip) ,
487
- src_port,
488
- header_size,
487
+ opt_mut_to_ptr ( src_port) ,
488
+ opt_ref_to_ptr ( header_size) ,
489
489
header_ptr,
490
490
& buffer. len ( ) ,
491
491
buffer. as_ptr ( ) . cast ( ) ,
@@ -509,9 +509,9 @@ impl BaseCode {
509
509
let header_size_tmp;
510
510
let ( header_size, header_ptr) = if let Some ( header) = header {
511
511
header_size_tmp = header. len ( ) ;
512
- ( Some ( & header_size_tmp) , header. as_mut_ptr ( ) . cast ( ) )
512
+ ( ptr :: from_ref ( & header_size_tmp) , header. as_mut_ptr ( ) . cast ( ) )
513
513
} else {
514
- ( None , null_mut ( ) )
514
+ ( null ( ) , null_mut ( ) )
515
515
} ;
516
516
517
517
let mut buffer_size = buffer. len ( ) ;
@@ -521,9 +521,9 @@ impl BaseCode {
521
521
self ,
522
522
op_flags,
523
523
opt_ip_addr_to_ptr_mut ( dest_ip) ,
524
- dest_port,
524
+ opt_mut_to_ptr ( dest_port) ,
525
525
opt_ip_addr_to_ptr_mut ( src_ip) ,
526
- src_port,
526
+ opt_mut_to_ptr ( src_port) ,
527
527
header_size,
528
528
header_ptr,
529
529
& mut buffer_size,
@@ -542,7 +542,7 @@ impl BaseCode {
542
542
543
543
/// Uses the ARP protocol to resolve a MAC address.
544
544
pub fn arp ( & mut self , ip_addr : & IpAddress , mac_addr : Option < & mut MacAddress > ) -> Result {
545
- unsafe { ( self . arp ) ( self , ip_addr. as_raw_ptr ( ) , mac_addr) } . to_result ( )
545
+ unsafe { ( self . arp ) ( self , ip_addr. as_raw_ptr ( ) , opt_mut_to_ptr ( mac_addr) ) } . to_result ( )
546
546
}
547
547
548
548
/// Updates the parameters that affect the operation of the PXE Base Code
@@ -560,8 +560,8 @@ impl BaseCode {
560
560
self ,
561
561
opt_bool_to_ptr ( & new_auto_arp) ,
562
562
opt_bool_to_ptr ( & new_send_guid) ,
563
- new_ttl. as_ref ( ) ,
564
- new_tos. as_ref ( ) ,
563
+ opt_ref_to_ptr ( new_ttl. as_ref ( ) ) ,
564
+ opt_ref_to_ptr ( new_tos. as_ref ( ) ) ,
565
565
opt_bool_to_ptr ( & new_make_callback) ,
566
566
)
567
567
}
@@ -658,6 +658,16 @@ fn opt_packet_to_ptr(arg: Option<&Packet>) -> *const PxeBaseCodePacket {
658
658
arg. map ( |p| ptr:: from_ref ( p) . cast ( ) ) . unwrap_or_else ( null)
659
659
}
660
660
661
+ /// Convert an `Option<&T>` to a `*const T`.
662
+ fn opt_ref_to_ptr < T > ( opt : Option < & T > ) -> * const T {
663
+ opt. map ( ptr:: from_ref) . unwrap_or ( null ( ) )
664
+ }
665
+
666
+ /// Convert an `Option<&mut T>` to a `*mut T`.
667
+ fn opt_mut_to_ptr < T > ( opt : Option < & mut T > ) -> * mut T {
668
+ opt. map ( ptr:: from_mut) . unwrap_or ( null_mut ( ) )
669
+ }
670
+
661
671
opaque_type ! {
662
672
/// Opaque type that should be used to represent a pointer to a [`DiscoverInfo`] in
663
673
/// foreign function interfaces. This type produces a thin pointer, unlike
0 commit comments