3 use proxmox_io
::ReadExt
;
5 use crate::{BlockRead, BlockReadError, PROXMOX_TAPE_BLOCK_SIZE}
;
7 /// Emulate tape read behavior on a normal Reader
9 /// Tapes reads are always return one whole block PROXMOX_TAPE_BLOCK_SIZE.
10 pub struct EmulateTapeReader
<R
: Read
> {
15 impl <R
: Read
> EmulateTapeReader
<R
> {
17 pub fn new(reader
: R
) -> Self {
18 Self { reader, got_eof: false }
22 impl <R
: Read
> BlockRead
for EmulateTapeReader
<R
> {
23 fn read_block(&mut self, buffer
: &mut [u8]) -> Result
<usize, BlockReadError
> {
25 return Err(BlockReadError
::Error(proxmox_sys
::io_format_err
!("detected read after EOF!")));
27 match self.reader
.read_exact_or_eof(buffer
)?
{
30 Err(BlockReadError
::EndOfFile
)
33 // test buffer len after EOF test (to allow EOF test with small buffers in BufferedReader)
34 if buffer
.len() != PROXMOX_TAPE_BLOCK_SIZE
{
35 return Err(BlockReadError
::Error(
36 proxmox_sys
::io_format_err
!(
37 "EmulateTapeReader: read_block with wrong block size ({} != {})",
39 PROXMOX_TAPE_BLOCK_SIZE
,