@@ -119,27 +119,28 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
119
119
let mmap_storage = {
120
120
let mut memory_map_size = st. boot_services ( ) . memory_map_size ( ) ;
121
121
let mut target_size = memory_map_size. map_size + ( 8 * memory_map_size. entry_size ) ;
122
- let mut storage: & mut [ u8 ] ;
123
122
loop {
124
123
let ptr = st
125
124
. boot_services ( )
126
125
. allocate_pool ( MemoryType :: LOADER_DATA , target_size)
127
126
. expect ( "Failed to allocate memory for mmap storage" ) ;
128
- storage = unsafe { slice:: from_raw_parts_mut ( ptr, target_size) } ;
129
- if let Err ( _) = st. boot_services ( ) . memory_map ( storage) {
130
- memory_map_size = st. boot_services ( ) . memory_map_size ( ) ;
131
- // By measuring the size here, we can find out exactly how much we need.
132
- // We may hit this code twice, if the map allocation ends up spanning more pages.
133
- let next_target_size = memory_map_size. map_size + ( 8 * memory_map_size. entry_size ) ;
134
- target_size = next_target_size;
135
- st. boot_services ( )
136
- . free_pool ( ptr)
137
- . expect ( "Failed to free temporary memory for memory map!" ) ;
138
- continue ;
127
+ let storage = unsafe { slice:: from_raw_parts_mut ( ptr, target_size) } ;
128
+ if st. boot_services ( ) . memory_map ( storage) . is_ok ( ) {
129
+ break storage;
139
130
}
140
- break ;
131
+ // allocated memory region was not big enough -> free it again
132
+ st. boot_services ( )
133
+ . free_pool ( ptr)
134
+ . expect ( "Failed to free temporary memory for memory map!" ) ;
135
+
136
+ // By measuring the size here, we can find out exactly how much we need.
137
+ // We may hit this code twice, if the map allocation ends up spanning more pages.
138
+ memory_map_size = st. boot_services ( ) . memory_map_size ( ) ;
139
+
140
+ let next_target_size = memory_map_size. map_size + ( 8 * memory_map_size. entry_size ) ;
141
+ target_size = next_target_size;
142
+
141
143
}
142
- storage
143
144
} ;
144
145
145
146
log:: trace!( "exiting boot services" ) ;
@@ -309,11 +310,10 @@ fn load_file_from_disk(
309
310
310
311
let file_handle_result = root. open ( filename, FileMode :: Read , FileAttribute :: empty ( ) ) ;
311
312
312
- if file_handle_result. is_err ( ) {
313
- return None ;
314
- }
315
-
316
- let file_handle = file_handle_result. unwrap ( ) ;
313
+ let file_handle = match file_handle_result {
314
+ Err ( _) => return None ,
315
+ Ok ( handle) => handle,
316
+ } ;
317
317
318
318
let mut file = match file_handle. into_type ( ) . unwrap ( ) {
319
319
uefi:: proto:: media:: file:: FileType :: Regular ( f) => f,
@@ -353,7 +353,6 @@ fn load_file_from_tftp_boot_server(
353
353
assert ! ( mode. dhcp_ack_received) ;
354
354
let dhcpv4: & DhcpV4Packet = mode. dhcp_ack . as_ref ( ) ;
355
355
let server_ip = IpAddress :: new_v4 ( dhcpv4. bootp_si_addr ) ;
356
- let mut buf = [ 0u8 ; 256 ] ;
357
356
assert ! ( name. len( ) < 256 ) ;
358
357
359
358
let filename = CStr8 :: from_bytes_with_nul ( name. as_bytes ( ) ) . unwrap ( ) ;
0 commit comments