in reverie-ptrace/src/trace/memory.rs [64:88]
fn read_vectored(
&self,
remote: &[io::IoSlice],
local: &mut [io::IoSliceMut],
) -> Result<usize, Errno> {
Errno::result(unsafe {
libc::process_vm_readv(
self.0.as_raw(),
local.as_ptr() as *const libc::iovec,
local.len() as libc::c_ulong,
remote.as_ptr() as *const libc::iovec,
remote.len() as libc::c_ulong,
0,
)
})
.map(|x| x as usize)
.or_else(|err| {
if err == Errno::EFAULT {
// Treat page faults as an EOF.
Ok(0)
} else {
Err(err)
}
})
}