From 1edce825259b471b67f20058f6102d43610281f1 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Sun, 13 Dec 2020 12:40:53 -0800 Subject: [PATCH] Revert "Update wavereader.rs" This reverts commit f4b27f85450a9d40d57b4e4d76397243d0a8a91c. --- src/wavereader.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/wavereader.rs b/src/wavereader.rs index 184d29d..f8c5592 100644 --- a/src/wavereader.rs +++ b/src/wavereader.rs @@ -12,7 +12,7 @@ use super::chunks::ReadBWaveChunks; use super::cue::Cue; use std::io::Cursor; -use std::io::{Read, Seek, SeekFrom}; +use std::io::{Read, Seek}; /** @@ -385,10 +385,10 @@ impl WaveReader { // As time passes thi get smore obnoxious because I haven't implemented recursive chunk // parsing in the raw parser and I'm working around it - // fn chunk_reader(&mut self, signature: FourCC, at_index: u32) -> Result, ParserError> { - // let (start, length) = self.get_chunk_extent_at_index(signature, at_index)?; - // Ok( RawChunkReader::new(&mut self.inner, start, length) ) - // } + fn chunk_reader(&mut self, signature: FourCC, at_index: u32) -> Result, ParserError> { + let (start, length) = self.get_chunk_extent_at_index(signature, at_index)?; + Ok( RawChunkReader::new(&mut self.inner, start, length) ) + } fn read_list(&mut self, ident: FourCC, buffer: &mut Vec) -> Result { if let Some(index) = self.get_list_form(ident)? { @@ -399,11 +399,18 @@ impl WaveReader { } fn read_chunk(&mut self, ident: FourCC, at: u32, buffer: &mut Vec) -> Result { - let (start, length) = self.get_chunk_extent_at_index(ident, at)?; + let result = self.chunk_reader(ident, at); - self.inner.seek(SeekFrom::Start(start)); - - Ok( self.inner.read_to_end(buffer)? ) + match result { + Ok(mut chunk) => { + match chunk.read_to_end(buffer) { + Ok(read) => Ok(read), + Err(err) => Err(err.into()) + } + }, + Err(ParserError::ChunkMissing { signature : _} ) => Ok(0), + Err( any ) => Err(any.into()) + } } /// Extent of every chunk with the given fourcc