]> git.proxmox.com Git - proxmox-backup.git/commitdiff
impl Read for BufferedArchiveReader
authorDietmar Maurer <dietmar@proxmox.com>
Sun, 6 Jan 2019 09:04:45 +0000 (10:04 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Sun, 6 Jan 2019 09:04:45 +0000 (10:04 +0100)
src/backup/archive_index.rs

index d13a1343a24df0d7d9e31228e8b0abe738bf11ec..55ab1acba4e096925d3816aeadf4b15b52dfb985 100644 (file)
@@ -266,6 +266,28 @@ impl <'a> crate::tools::BufferedReader for  BufferedArchiveReader<'a> {
 
 }
 
+impl <'a> std::io::Read for  BufferedArchiveReader<'a> {
+
+    fn read(&mut self, buf: &mut [u8]) -> Result<usize, std::io::Error> {
+
+        use std::io::{Error, ErrorKind};
+        use crate::tools::BufferedReader;
+
+        let data = match self.buffered_read(self.read_offset) {
+            Ok(v) => v,
+            Err(err) => return Err(Error::new(ErrorKind::Other, err.to_string())),
+        };
+
+        let n = if data.len() > buf.len() { buf.len() } else { data.len() };
+
+        unsafe { std::ptr::copy_nonoverlapping(data.as_ptr(), buf.as_mut_ptr(), n); }
+
+        self.read_offset += n as u64;
+
+        return Ok(n);
+    }
+}
+
 impl <'a> std::io::Seek for  BufferedArchiveReader<'a> {
 
     fn seek(&mut self, pos: std::io::SeekFrom) -> Result<u64, std::io::Error> {