Skip to content

Commit bd7c3cb

Browse files
committed
use raw pointers instead of Option<NonNull<T>>
1 parent 941dadc commit bd7c3cb

File tree

1 file changed

+32
-46
lines changed

1 file changed

+32
-46
lines changed

src/proto/network/pxe.rs

+32-46
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
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

59
use bitflags::bitflags;
610
use 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

Comments
 (0)