mirror of
https://github.com/xavo95/repak.git
synced 2025-02-23 08:03:46 +00:00
Fix decompression block size
This commit is contained in:
parent
29bf6e7859
commit
cff54acadb
1 changed files with 40 additions and 34 deletions
|
@ -394,7 +394,14 @@ impl Entry {
|
||||||
#[cfg(not(feature = "compression"))]
|
#[cfg(not(feature = "compression"))]
|
||||||
_ => return Err(super::Error::Compression),
|
_ => return Err(super::Error::Compression),
|
||||||
#[cfg(feature = "compression")]
|
#[cfg(feature = "compression")]
|
||||||
Some(comp) => match comp {
|
Some(comp) => {
|
||||||
|
let chunk_size = if ranges.len() == 1 {
|
||||||
|
self.uncompressed as usize
|
||||||
|
} else {
|
||||||
|
self.compression_block_size as usize
|
||||||
|
};
|
||||||
|
|
||||||
|
match comp {
|
||||||
Compression::Zlib => decompress!(flate2::read::ZlibDecoder<&[u8]>),
|
Compression::Zlib => decompress!(flate2::read::ZlibDecoder<&[u8]>),
|
||||||
Compression::Gzip => decompress!(flate2::read::GzDecoder<&[u8]>),
|
Compression::Gzip => decompress!(flate2::read::GzDecoder<&[u8]>),
|
||||||
Compression::Zstd => {
|
Compression::Zstd => {
|
||||||
|
@ -404,9 +411,8 @@ impl Entry {
|
||||||
}
|
}
|
||||||
Compression::LZ4 => {
|
Compression::LZ4 => {
|
||||||
let mut decompressed = vec![0; self.uncompressed as usize];
|
let mut decompressed = vec![0; self.uncompressed as usize];
|
||||||
for (decomp_chunk, comp_range) in decompressed
|
for (decomp_chunk, comp_range) in
|
||||||
.chunks_mut(self.compression_block_size as usize)
|
decompressed.chunks_mut(chunk_size).zip(ranges)
|
||||||
.zip(ranges)
|
|
||||||
{
|
{
|
||||||
lz4_flex::block::decompress_into(&data[comp_range], decomp_chunk)
|
lz4_flex::block::decompress_into(&data[comp_range], decomp_chunk)
|
||||||
.map_err(|_| Error::DecompressionFailed(Compression::LZ4))?;
|
.map_err(|_| Error::DecompressionFailed(Compression::LZ4))?;
|
||||||
|
@ -416,9 +422,8 @@ impl Entry {
|
||||||
#[cfg(feature = "oodle")]
|
#[cfg(feature = "oodle")]
|
||||||
Compression::Oodle => {
|
Compression::Oodle => {
|
||||||
let mut decompressed = vec![0; self.uncompressed as usize];
|
let mut decompressed = vec![0; self.uncompressed as usize];
|
||||||
for (decomp_chunk, comp_range) in decompressed
|
for (decomp_chunk, comp_range) in
|
||||||
.chunks_mut(self.compression_block_size as usize)
|
decompressed.chunks_mut(chunk_size).zip(ranges)
|
||||||
.zip(ranges)
|
|
||||||
{
|
{
|
||||||
let out =
|
let out =
|
||||||
oodle_loader::oodle()?.decompress(&data[comp_range], decomp_chunk);
|
oodle_loader::oodle()?.decompress(&data[comp_range], decomp_chunk);
|
||||||
|
@ -430,7 +435,8 @@ impl Entry {
|
||||||
}
|
}
|
||||||
#[cfg(not(feature = "oodle"))]
|
#[cfg(not(feature = "oodle"))]
|
||||||
Compression::Oodle => return Err(super::Error::Oodle),
|
Compression::Oodle => return Err(super::Error::Oodle),
|
||||||
},
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
buf.flush()?;
|
buf.flush()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Reference in a new issue