tape: make fsf/bsf driver specific
Because the virtual tape driver behaves different than LTO drives.
This commit is contained in:
		| @ -179,6 +179,14 @@ impl LtoTapeHandle { | ||||
|         Ok(status) | ||||
|     } | ||||
|  | ||||
|     pub fn forward_space_count_files(&mut self, count: usize) -> Result<(), Error> { | ||||
|         self.sg_tape.space_filemarks(isize::try_from(count)?) | ||||
|     } | ||||
|  | ||||
|     pub fn backward_space_count_files(&mut self, count: usize) -> Result<(), Error> { | ||||
|         self.sg_tape.space_filemarks(-isize::try_from(count)?) | ||||
|     } | ||||
|  | ||||
|     pub fn erase_media(&mut self, fast: bool) -> Result<(), Error> { | ||||
|         self.sg_tape.erase_media(fast) | ||||
|     } | ||||
| @ -211,12 +219,25 @@ impl TapeDriver for LtoTapeHandle { | ||||
|         self.sg_tape.move_to_eom() | ||||
|     } | ||||
|  | ||||
|     fn forward_space_count_files(&mut self, count: usize) -> Result<(), Error> { | ||||
|         self.sg_tape.space_filemarks(isize::try_from(count)?) | ||||
|     } | ||||
|     fn move_to_last_file(&mut self) -> Result<(), Error> { | ||||
|  | ||||
|     fn backward_space_count_files(&mut self, count: usize) -> Result<(), Error> { | ||||
|         self.sg_tape.space_filemarks(-isize::try_from(count)?) | ||||
|         self.move_to_eom()?; | ||||
|  | ||||
|         let pos = self.current_file_number()?; | ||||
|  | ||||
|         if pos == 0 { | ||||
|             bail!("move_to_last_file failed - media contains no data"); | ||||
|         } | ||||
|  | ||||
|         if pos == 1 { | ||||
|             self.rewind()?; | ||||
|             return Ok(()); | ||||
|         } | ||||
|  | ||||
|         self.backward_space_count_files(2)?; | ||||
|         self.forward_space_count_files(1)?; | ||||
|  | ||||
|         Ok(()) | ||||
|     } | ||||
|  | ||||
|     fn rewind(&mut self) -> Result<(), Error> { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user