From 73ae9e012e65f631dd96f45cf7d25de678958600 Mon Sep 17 00:00:00 2001 From: Bryant Mairs Date: Mon, 17 Jul 2017 16:12:40 -0700 Subject: Fix UnsupportedOperation when using ptrace_* functions --- src/sys/ptrace.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/sys') diff --git a/src/sys/ptrace.rs b/src/sys/ptrace.rs index bf395259..4c3d29b1 100644 --- a/src/sys/ptrace.rs +++ b/src/sys/ptrace.rs @@ -91,15 +91,16 @@ fn ptrace_peek(request: ptrace::PtraceRequest, pid: Pid, addr: *mut c_void, data } } -/// Function for ptrace requests that return values from the data field. +/// Function for ptrace requests that return values from the data field. /// Some ptrace get requests populate structs or larger elements than c_long /// and therefore use the data field to return values. This function handles these /// requests. fn ptrace_get_data(request: ptrace::PtraceRequest, pid: Pid) -> Result { - // Creates an uninitialized pointer to store result in + // Creates an uninitialized pointer to store result in let data: Box = Box::new(unsafe { mem::uninitialized() }); let data: *mut c_void = unsafe { mem::transmute(data) }; - ptrace(request, pid, ptr::null_mut(), data)?; + let res = unsafe { ffi::ptrace(request, pid.into(), ptr::null_mut(), data) }; + Errno::result(res)?; // Convert back into the original data format and return unboxed value let data: Box = unsafe { mem::transmute(data) }; Ok(*data) @@ -114,7 +115,8 @@ pub fn ptrace_setoptions(pid: Pid, options: ptrace::PtraceOptions) -> Result<()> use self::ptrace::*; use std::ptr; - ptrace(PTRACE_SETOPTIONS, pid, ptr::null_mut(), options as *mut c_void).map(drop) + let res = unsafe { ffi::ptrace(PTRACE_SETOPTIONS, pid.into(), ptr::null_mut(), options as *mut c_void) }; + Errno::result(res).map(|_| ()) } /// Gets a ptrace event as described by `ptrace(PTRACE_GETEVENTMSG,...)` -- cgit v1.2.3