Skip to content

Commit cb2bdb5

Browse files
committed
Don't use mem::transmute in SignalFd
There was a better case for using it before mem::uninitialized was available, but not great. Even before then, mem::zeroed could've been used instead. Issue #373
1 parent a5e0b72 commit cb2bdb5

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

src/sys/signalfd.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ libc_bitflags!{
3434
}
3535

3636
pub const SIGNALFD_NEW: RawFd = -1;
37-
pub const SIGNALFD_SIGINFO_SIZE: usize = mem::size_of::<libc::signalfd_siginfo>();
37+
#[deprecated(since = "0.23.0", note = "use mem::size_of::<siginfo>() instead")]
38+
pub const SIGNALFD_SIGINFO_SIZE: usize = mem::size_of::<siginfo>();
3839

3940
/// Creates a new file descriptor for reading signals.
4041
///
@@ -98,15 +99,14 @@ impl SignalFd {
9899
}
99100

100101
pub fn read_signal(&mut self) -> Result<Option<siginfo>> {
101-
let mut buffer = mem::MaybeUninit::<[u8; SIGNALFD_SIGINFO_SIZE]>::uninit();
102+
let mut buffer = mem::MaybeUninit::<siginfo>::uninit();
102103

104+
let size = mem::size_of_val(&buffer);
103105
let res = Errno::result(unsafe {
104-
libc::read(self.0,
105-
buffer.as_mut_ptr() as *mut libc::c_void,
106-
SIGNALFD_SIGINFO_SIZE as libc::size_t)
106+
libc::read(self.0, buffer.as_mut_ptr() as *mut libc::c_void, size)
107107
}).map(|r| r as usize);
108108
match res {
109-
Ok(SIGNALFD_SIGINFO_SIZE) => Ok(Some(unsafe { mem::transmute(buffer.assume_init()) })),
109+
Ok(x) if x == size => Ok(Some(unsafe { buffer.assume_init() })),
110110
Ok(_) => unreachable!("partial read on signalfd"),
111111
Err(Errno::EAGAIN) => Ok(None),
112112
Err(error) => Err(error)

0 commit comments

Comments
 (0)