Skip to content

Commit c8118e4

Browse files
committed
Use ptr::addr_of
As recommended by Clippy.
1 parent d979ef0 commit c8118e4

File tree

2 files changed

+12
-13
lines changed

2 files changed

+12
-13
lines changed

src/sockaddr.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ impl SockAddr {
169169

170170
/// Returns a raw pointer to the address.
171171
pub const fn as_ptr(&self) -> *const sockaddr {
172-
&self.storage as *const _ as *const _
172+
ptr::addr_of!(self.storage).cast()
173173
}
174174

175175
/// Returns true if this address is in the `AF_INET` (IPv4) family, false otherwise.
@@ -193,16 +193,16 @@ impl SockAddr {
193193
/// or `AF_INET6` (IPv6) family, otherwise returns `None`.
194194
pub fn as_socket(&self) -> Option<SocketAddr> {
195195
if self.storage.ss_family == AF_INET as sa_family_t {
196-
// Safety: if the ss_family field is AF_INET then storage must be a sockaddr_in.
197-
let addr = unsafe { &*(&self.storage as *const _ as *const sockaddr_in) };
198-
196+
// SAFETY: if the `ss_family` field is `AF_INET` then storage must
197+
// be a `sockaddr_in`.
198+
let addr = unsafe { &*(ptr::addr_of!(self.storage).cast::<sockaddr_in>()) };
199199
let ip = crate::sys::from_in_addr(addr.sin_addr);
200200
let port = u16::from_be(addr.sin_port);
201201
Some(SocketAddr::V4(SocketAddrV4::new(ip, port)))
202202
} else if self.storage.ss_family == AF_INET6 as sa_family_t {
203-
// Safety: if the ss_family field is AF_INET6 then storage must be a sockaddr_in6.
204-
let addr = unsafe { &*(&self.storage as *const _ as *const sockaddr_in6) };
205-
203+
// SAFETY: if the `ss_family` field is `AF_INET6` then storage must
204+
// be a `sockaddr_in6`.
205+
let addr = unsafe { &*(ptr::addr_of!(self.storage).cast::<sockaddr_in6>()) };
206206
let ip = crate::sys::from_in6_addr(addr.sin6_addr);
207207
let port = u16::from_be(addr.sin6_port);
208208
Some(SocketAddr::V6(SocketAddrV6::new(

src/sys/unix.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ use std::{io, slice};
4646

4747
#[cfg(not(target_vendor = "apple"))]
4848
use libc::ssize_t;
49-
use libc::{c_void, in6_addr, in_addr};
49+
use libc::{in6_addr, in_addr};
5050

5151
#[cfg(not(target_os = "redox"))]
5252
use crate::RecvFlags;
@@ -458,8 +458,7 @@ pub(crate) fn unix_sockaddr(path: &Path) -> io::Result<SockAddr> {
458458
// SAFETY: a `sockaddr_storage` of all zeros is valid.
459459
let mut storage = unsafe { mem::zeroed::<sockaddr_storage>() };
460460
let len = {
461-
let storage: &mut libc::sockaddr_un =
462-
unsafe { &mut *(&mut storage as *mut sockaddr_storage).cast() };
461+
let storage = unsafe { &mut *ptr::addr_of_mut!(storage).cast::<libc::sockaddr_un>() };
463462

464463
let bytes = path.as_os_str().as_bytes();
465464
let too_long = match bytes.first() {
@@ -483,13 +482,13 @@ pub(crate) fn unix_sockaddr(path: &Path) -> io::Result<SockAddr> {
483482
unsafe {
484483
ptr::copy_nonoverlapping(
485484
bytes.as_ptr(),
486-
storage.sun_path.as_mut_ptr() as *mut u8,
485+
storage.sun_path.as_mut_ptr().cast(),
487486
bytes.len(),
488487
)
489488
};
490489

491490
let base = storage as *const _ as usize;
492-
let path = &storage.sun_path as *const _ as usize;
491+
let path = ptr::addr_of!(storage.sun_path) as usize;
493492
let sun_path_offset = path - base;
494493
sun_path_offset
495494
+ bytes.len()
@@ -955,7 +954,7 @@ pub(crate) unsafe fn setsockopt<T>(
955954
val: c_int,
956955
payload: T,
957956
) -> io::Result<()> {
958-
let payload = &payload as *const T as *const c_void;
957+
let payload = ptr::addr_of!(payload).cast();
959958
syscall!(setsockopt(
960959
fd,
961960
opt,

0 commit comments

Comments
 (0)