Skip to content

Commit 997b03a

Browse files
authored
Merge pull request #1870 from rust-osdev/bishop-replace-addrof
Replace remaining uses of `addr_of`/`addr_of_mut` with raw pointer syntax
2 parents f76876b + 3f8049e commit 997b03a

7 files changed

Lines changed: 37 additions & 43 deletions

File tree

uefi-test-runner/src/proto/load.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use alloc::vec::Vec;
66
use core::ffi::c_void;
77
use core::pin::Pin;
88
use core::ptr;
9-
use core::ptr::addr_of;
109
use uefi::proto::BootPolicy;
1110
use uefi::proto::device_path::build::DevicePathBuilder;
1211
use uefi::proto::media::load_file::{LoadFile, LoadFile2};
@@ -61,13 +60,14 @@ impl CustomLoadFile2Protocol {
6160

6261
unsafe fn install_protocol(handle: Handle, guid: Guid, protocol: &mut CustomLoadFile2Protocol) {
6362
unsafe {
64-
boot::install_protocol_interface(Some(handle), &guid, addr_of!(*protocol).cast()).unwrap();
63+
boot::install_protocol_interface(Some(handle), &guid, (&raw const *protocol).cast())
64+
.unwrap();
6565
}
6666
}
6767

6868
unsafe fn uninstall_protocol(handle: Handle, guid: Guid, protocol: &mut CustomLoadFile2Protocol) {
6969
unsafe {
70-
boot::uninstall_protocol_interface(handle, &guid, addr_of!(*protocol).cast()).unwrap();
70+
boot::uninstall_protocol_interface(handle, &guid, (&raw const *protocol).cast()).unwrap();
7171
}
7272
}
7373

uefi/src/proto/device_path/device_path_gen.rs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use crate::proto::device_path::{
1616
};
1717
use crate::{Guid, guid};
1818
use bitflags::bitflags;
19-
use core::ptr::addr_of;
2019
use core::{fmt, slice};
2120
use ptr_meta::Pointee;
2221
use uefi_raw::IpAddress;
@@ -274,7 +273,7 @@ pub mod hardware {
274273
f.debug_struct("Vendor")
275274
.field("vendor_guid", &{ self.vendor_guid })
276275
.field("vendor_defined_data", &{
277-
let ptr = addr_of!(self.vendor_defined_data);
276+
let ptr = &raw const self.vendor_defined_data;
278277
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
279278
let byte_len = size_of::<u8>() * len;
280279
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -570,7 +569,7 @@ pub mod acpi {
570569
/// ADR value is required.
571570
#[must_use]
572571
pub fn adr(&self) -> UnalignedSlice<'_, u32> {
573-
let ptr: *const [u32] = addr_of!(self.adr);
572+
let ptr: *const [u32] = &raw const self.adr;
574573
let (ptr, len): (*const (), usize) = ptr_meta::to_raw_parts(ptr);
575574
unsafe { UnalignedSlice::new(ptr.cast::<u32>(), len) }
576575
}
@@ -580,7 +579,7 @@ pub mod acpi {
580579
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
581580
f.debug_struct("Adr")
582581
.field("adr", &{
583-
let ptr = addr_of!(self.adr);
582+
let ptr = &raw const self.adr;
584583
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
585584
let byte_len = size_of::<u32>() * len;
586585
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -1174,7 +1173,7 @@ pub mod messaging {
11741173
/// Last 64 (or fewer) characters of the USB Serial number.
11751174
#[must_use]
11761175
pub fn serial_number(&self) -> UnalignedSlice<'_, u16> {
1177-
let ptr: *const [u16] = addr_of!(self.serial_number);
1176+
let ptr: *const [u16] = &raw const self.serial_number;
11781177
let (ptr, len): (*const (), usize) = ptr_meta::to_raw_parts(ptr);
11791178
unsafe { UnalignedSlice::new(ptr.cast::<u16>(), len) }
11801179
}
@@ -1187,7 +1186,7 @@ pub mod messaging {
11871186
.field("device_vendor_id", &{ self.device_vendor_id })
11881187
.field("device_product_id", &{ self.device_product_id })
11891188
.field("serial_number", &{
1190-
let ptr = addr_of!(self.serial_number);
1189+
let ptr = &raw const self.serial_number;
11911190
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
11921191
let byte_len = size_of::<u16>() * len;
11931192
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -1841,7 +1840,7 @@ pub mod messaging {
18411840
f.debug_struct("Vendor")
18421841
.field("vendor_guid", &{ self.vendor_guid })
18431842
.field("vendor_defined_data", &{
1844-
let ptr = addr_of!(self.vendor_defined_data);
1843+
let ptr = &raw const self.vendor_defined_data;
18451844
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
18461845
let byte_len = size_of::<u8>() * len;
18471846
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -1997,7 +1996,7 @@ pub mod messaging {
19971996
.field("logical_unit_number", &{ self.logical_unit_number })
19981997
.field("target_portal_group_tag", &{ self.target_portal_group_tag })
19991998
.field("iscsi_target_name", &{
2000-
let ptr = addr_of!(self.iscsi_target_name);
1999+
let ptr = &raw const self.iscsi_target_name;
20012000
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
20022001
let byte_len = size_of::<u8>() * len;
20032002
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -2104,7 +2103,7 @@ pub mod messaging {
21042103
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21052104
f.debug_struct("Uri")
21062105
.field("value", &{
2107-
let ptr = addr_of!(self.value);
2106+
let ptr = &raw const self.value;
21082107
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
21092108
let byte_len = size_of::<u8>() * len;
21102109
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -2424,7 +2423,7 @@ pub mod messaging {
24242423
/// One or more instances of the DNS server address.
24252424
#[must_use]
24262425
pub fn addresses(&self) -> UnalignedSlice<'_, IpAddress> {
2427-
let ptr: *const [IpAddress] = addr_of!(self.addresses);
2426+
let ptr: *const [IpAddress] = &raw const self.addresses;
24282427
let (ptr, len): (*const (), usize) = ptr_meta::to_raw_parts(ptr);
24292428
unsafe { UnalignedSlice::new(ptr.cast::<IpAddress>(), len) }
24302429
}
@@ -2435,7 +2434,7 @@ pub mod messaging {
24352434
f.debug_struct("Dns")
24362435
.field("address_type", &{ self.address_type })
24372436
.field("addresses", &{
2438-
let ptr = addr_of!(self.addresses);
2437+
let ptr = &raw const self.addresses;
24392438
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
24402439
let byte_len = size_of::<IpAddress>() * len;
24412440
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -2540,7 +2539,7 @@ pub mod messaging {
25402539
.field("service_type", &{ self.service_type })
25412540
.field("access_mode", &{ self.access_mode })
25422541
.field("vendor_guid_and_data", &{
2543-
let ptr = addr_of!(self.vendor_guid_and_data);
2542+
let ptr = &raw const self.vendor_guid_and_data;
25442543
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
25452544
let byte_len = size_of::<u8>() * len;
25462545
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -2611,7 +2610,7 @@ pub mod messaging {
26112610
.field("nidt", &{ self.nidt })
26122611
.field("nid", &{ self.nid })
26132612
.field("subsystem_nqn", &{
2614-
let ptr = addr_of!(self.subsystem_nqn);
2613+
let ptr = &raw const self.subsystem_nqn;
26152614
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
26162615
let byte_len = size_of::<u8>() * len;
26172616
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -2888,7 +2887,7 @@ pub mod media {
28882887
f.debug_struct("Vendor")
28892888
.field("vendor_guid", &{ self.vendor_guid })
28902889
.field("vendor_defined_data", &{
2891-
let ptr = addr_of!(self.vendor_defined_data);
2890+
let ptr = &raw const self.vendor_defined_data;
28922891
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
28932892
let byte_len = size_of::<u8>() * len;
28942893
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -2933,7 +2932,7 @@ pub mod media {
29332932
/// Null-terminated path.
29342933
#[must_use]
29352934
pub fn path_name(&self) -> UnalignedSlice<'_, u16> {
2936-
let ptr: *const [u16] = addr_of!(self.path_name);
2935+
let ptr: *const [u16] = &raw const self.path_name;
29372936
let (ptr, len): (*const (), usize) = ptr_meta::to_raw_parts(ptr);
29382937
unsafe { UnalignedSlice::new(ptr.cast::<u16>(), len) }
29392938
}
@@ -2943,7 +2942,7 @@ pub mod media {
29432942
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29442943
f.debug_struct("FilePath")
29452944
.field("path_name", &{
2946-
let ptr = addr_of!(self.path_name);
2945+
let ptr = &raw const self.path_name;
29472946
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
29482947
let byte_len = size_of::<u16>() * len;
29492948
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -3038,7 +3037,7 @@ pub mod media {
30383037
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30393038
f.debug_struct("PiwgFirmwareFile")
30403039
.field("data", &{
3041-
let ptr = addr_of!(self.data);
3040+
let ptr = &raw const self.data;
30423041
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
30433042
let byte_len = size_of::<u8>() * len;
30443043
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -3092,7 +3091,7 @@ pub mod media {
30923091
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30933092
f.debug_struct("PiwgFirmwareVolume")
30943093
.field("data", &{
3095-
let ptr = addr_of!(self.data);
3094+
let ptr = &raw const self.data;
30963095
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
30973096
let byte_len = size_of::<u8>() * len;
30983097
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }
@@ -3332,7 +3331,7 @@ pub mod bios_boot_spec {
33323331
.field("device_type", &{ self.device_type })
33333332
.field("status_flag", &{ self.status_flag })
33343333
.field("description_string", &{
3335-
let ptr = addr_of!(self.description_string);
3334+
let ptr = &raw const self.description_string;
33363335
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
33373336
let byte_len = size_of::<u8>() * len;
33383337
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }

uefi/src/proto/media/file/info.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,13 @@ impl FileInfo {
193193
) -> core::result::Result<&'buf mut Self, FileInfoCreationError> {
194194
unsafe {
195195
Self::new_impl(storage, file_name, |ptr, size| {
196-
ptr::addr_of_mut!((*ptr).size).write(size);
197-
ptr::addr_of_mut!((*ptr).file_size).write(file_size);
198-
ptr::addr_of_mut!((*ptr).physical_size).write(physical_size);
199-
ptr::addr_of_mut!((*ptr).create_time).write(create_time);
200-
ptr::addr_of_mut!((*ptr).last_access_time).write(last_access_time);
201-
ptr::addr_of_mut!((*ptr).modification_time).write(modification_time);
202-
ptr::addr_of_mut!((*ptr).attribute).write(attribute);
196+
(&raw mut (*ptr).size).write(size);
197+
(&raw mut (*ptr).file_size).write(file_size);
198+
(&raw mut (*ptr).physical_size).write(physical_size);
199+
(&raw mut (*ptr).create_time).write(create_time);
200+
(&raw mut (*ptr).last_access_time).write(last_access_time);
201+
(&raw mut (*ptr).modification_time).write(modification_time);
202+
(&raw mut (*ptr).attribute).write(attribute);
203203
})
204204
}
205205
}
@@ -314,11 +314,11 @@ impl FileSystemInfo {
314314
) -> core::result::Result<&'buf mut Self, FileInfoCreationError> {
315315
unsafe {
316316
Self::new_impl(storage, volume_label, |ptr, size| {
317-
ptr::addr_of_mut!((*ptr).size).write(size);
318-
ptr::addr_of_mut!((*ptr).read_only).write(read_only);
319-
ptr::addr_of_mut!((*ptr).volume_size).write(volume_size);
320-
ptr::addr_of_mut!((*ptr).free_space).write(free_space);
321-
ptr::addr_of_mut!((*ptr).block_size).write(block_size);
317+
(&raw mut (*ptr).size).write(size);
318+
(&raw mut (*ptr).read_only).write(read_only);
319+
(&raw mut (*ptr).volume_size).write(volume_size);
320+
(&raw mut (*ptr).free_space).write(free_space);
321+
(&raw mut (*ptr).block_size).write(block_size);
322322
})
323323
}
324324
}

uefi/src/proto/media/load_file.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,11 @@ impl LoadFile {
7272
file_path: &DevicePath,
7373
boot_policy: BootPolicy,
7474
) -> Result<Box<[u8]>> {
75-
let this = core::ptr::addr_of_mut!(*self).cast();
76-
7775
let fetch_data_fn = |buf: &'a mut [u8]| {
7876
let mut size = buf.len();
7977
let status = unsafe {
8078
(self.0.load_file)(
81-
this,
79+
&raw mut self.0,
8280
file_path.as_ffi_ptr().cast(),
8381
boot_policy.into(),
8482
&mut size,
@@ -135,13 +133,11 @@ impl LoadFile2 {
135133
#[cfg(feature = "alloc")]
136134
#[allow(clippy::extra_unused_lifetimes)] // false positive, it is used
137135
pub fn load_file<'a>(&mut self, file_path: &DevicePath) -> Result<Box<[u8]>> {
138-
let this = core::ptr::addr_of_mut!(*self).cast();
139-
140136
let fetch_data_fn = |buf: &'a mut [u8]| {
141137
let mut size = buf.len();
142138
let status = unsafe {
143139
(self.0.load_file)(
144-
this,
140+
&raw mut self.0,
145141
file_path.as_ffi_ptr().cast(),
146142
Boolean::FALSE, /* always false - see spec */
147143
&mut size,

xtask/src/device_path/field.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ impl NodeField {
266266
// unaligned, so use `UnalignedSlice`.
267267
ret_type = quote!(UnalignedSlice<'_, #slice_elem>);
268268
ret_val = quote!(
269-
let ptr: *const [#slice_elem] = addr_of!(self.#field_name);
269+
let ptr: *const [#slice_elem] = &raw const self.#field_name;
270270
let (ptr, len): (*const (), usize) = ptr_meta::to_raw_parts(ptr);
271271
unsafe {
272272
UnalignedSlice::new(ptr.cast::<#slice_elem>(), len)

xtask/src/device_path/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ fn gen_uefi_code_as_string(groups: &[NodeGroup]) -> Result<String> {
8080
NodeConversionError,
8181
};
8282
use crate::mem::memory_map::MemoryType;
83-
use core::ptr::addr_of;
8483
use core::{fmt, slice};
8584
use ptr_meta::Pointee;
8685
use uefi_raw::IpAddress;

xtask/src/device_path/node.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ impl Node {
209209
// the slice might be unaligned. Treat it as a byte
210210
// slice instead.
211211
quote!(&{
212-
let ptr = addr_of!(#field_val);
212+
let ptr = &raw const #field_val;
213213
let (ptr, len) = ptr_meta::to_raw_parts(ptr);
214214
let byte_len = size_of::<#slice_elem_ty>() * len;
215215
unsafe { slice::from_raw_parts(ptr.cast::<u8>(), byte_len) }

0 commit comments

Comments
 (0)