1extern crate libc;
2use super::super::*;
3use std::io;
4pub use std::os::unix::io::AsRawFd as AsRaw;
5
6fn into_io_result(r: libc::ssize_t) -> Result<usize>
10{
11 if r >= 0 {
12 Ok(r as usize)
13 } else {
14 Err(io::Error::last_os_error())
15 }
16}
17
18pub fn pread<F: AsRaw>(fd: &F, buf: &mut [u8], offs: u64) -> Result<usize>
19{
20 into_io_result(unsafe { libc::pread(fd.as_raw_fd(), buf.as_mut_ptr() as *mut _, buf.len(), offs as libc::off_t) })
21}
22
23pub fn pwrite<F: AsRaw>(fd: &F, buf: &[u8], offs: u64) -> Result<usize>
24{
25 into_io_result(unsafe { libc::pwrite(fd.as_raw_fd(), buf.as_ptr() as *const _, buf.len(), offs as libc::off_t) })
26}