Skip to content

Commit bba9e43

Browse files
committed
Refactor ptrace_get_data
The boxing and unboxing was unnecessary and instead the references to the type on the stack can just be cast.
1 parent 73ae9e0 commit bba9e43

File tree

1 file changed

+3
-6
lines changed

1 file changed

+3
-6
lines changed

src/sys/ptrace.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,10 @@ fn ptrace_peek(request: ptrace::PtraceRequest, pid: Pid, addr: *mut c_void, data
9797
/// requests.
9898
fn ptrace_get_data<T>(request: ptrace::PtraceRequest, pid: Pid) -> Result<T> {
9999
// Creates an uninitialized pointer to store result in
100-
let data: Box<T> = Box::new(unsafe { mem::uninitialized() });
101-
let data: *mut c_void = unsafe { mem::transmute(data) };
102-
let res = unsafe { ffi::ptrace(request, pid.into(), ptr::null_mut(), data) };
100+
let data: T = unsafe { mem::uninitialized() };
101+
let res = unsafe { ffi::ptrace(request, pid.into(), ptr::null_mut(), &data as *const _ as *const c_void) };
103102
Errno::result(res)?;
104-
// Convert back into the original data format and return unboxed value
105-
let data: Box<T> = unsafe { mem::transmute(data) };
106-
Ok(*data)
103+
Ok(data)
107104
}
108105

109106
fn ptrace_other(request: ptrace::PtraceRequest, pid: Pid, addr: *mut c_void, data: *mut c_void) -> Result<c_long> {

0 commit comments

Comments
 (0)