chj_rustbin/io/
rawfdreader.rs1use libc;
4use std::io::{Error, Read, Result};
5use std::os::unix::io::{FromRawFd, RawFd};
6
7pub struct RawFdReader {
8 fd: RawFd,
9}
10
11impl FromRawFd for RawFdReader {
12 unsafe fn from_raw_fd(fd: RawFd) -> Self {
13 Self { fd }
14 }
15}
16
17impl Read for RawFdReader {
18 fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
19 assert!(buf.len() <= isize::max_value() as usize);
20 match unsafe { libc::read(self.fd, buf.as_mut_ptr() as _, buf.len()) } {
21 x if x < 0 => Err(Error::last_os_error()),
22 x => Ok(x as usize),
23 }
24 }
25}