mirror of
https://github.com/xavo95/repak.git
synced 2025-01-18 10:54:38 +00:00
fmt + clippy
This commit is contained in:
parent
529bdcac4e
commit
de69a98d34
5 changed files with 38 additions and 30 deletions
|
@ -21,5 +21,8 @@ fn load_pak(
|
|||
})
|
||||
.transpose()?;
|
||||
|
||||
unpak::PakReader::new_any( std::io::BufReader::new(std::fs::OpenOptions::new().read(true).open(&path)?), key)
|
||||
unpak::PakReader::new_any(
|
||||
std::io::BufReader::new(std::fs::OpenOptions::new().read(true).open(&path)?),
|
||||
key,
|
||||
)
|
||||
}
|
||||
|
|
23
src/entry.rs
23
src/entry.rs
|
@ -46,7 +46,7 @@ impl Entry {
|
|||
size += 8; // compressed
|
||||
size += 8; // uncompressed
|
||||
size += match version != Version::V8A {
|
||||
true => 4, // 32 bit compression
|
||||
true => 4, // 32 bit compression
|
||||
false => 1, // 8 bit compression
|
||||
};
|
||||
size += match version.version_major() == VersionMajor::Initial {
|
||||
|
@ -71,7 +71,11 @@ impl Entry {
|
|||
let offset = reader.read_u64::<LE>()?;
|
||||
let compressed = reader.read_u64::<LE>()?;
|
||||
let uncompressed = reader.read_u64::<LE>()?;
|
||||
let compression = match if version == Version::V8A { reader.read_u8()? as u32 } else { reader.read_u32::<LE>()? } {
|
||||
let compression = match if version == Version::V8A {
|
||||
reader.read_u8()? as u32
|
||||
} else {
|
||||
reader.read_u32::<LE>()?
|
||||
} {
|
||||
0x01 | 0x10 | 0x20 => Compression::Zlib,
|
||||
_ => Compression::None,
|
||||
};
|
||||
|
@ -91,8 +95,10 @@ impl Entry {
|
|||
true => Some(reader.read_array(Block::new)?),
|
||||
false => None,
|
||||
},
|
||||
encrypted: version.version_major() >= VersionMajor::CompressionEncryption && reader.read_bool()?,
|
||||
block_uncompressed: match version.version_major() >= VersionMajor::CompressionEncryption {
|
||||
encrypted: version.version_major() >= VersionMajor::CompressionEncryption
|
||||
&& reader.read_bool()?,
|
||||
block_uncompressed: match version.version_major() >= VersionMajor::CompressionEncryption
|
||||
{
|
||||
true => Some(reader.read_u32::<LE>()?),
|
||||
false => None,
|
||||
},
|
||||
|
@ -116,7 +122,7 @@ impl Entry {
|
|||
if block_uncompressed == 0x3f {
|
||||
block_uncompressed = reader.read_u32::<LE>()?;
|
||||
} else {
|
||||
block_uncompressed = block_uncompressed << 11;
|
||||
block_uncompressed <<= 11;
|
||||
}
|
||||
|
||||
let mut var_int = |bit: u32| -> Result<_, super::Error> {
|
||||
|
@ -134,7 +140,7 @@ impl Entry {
|
|||
_ => var_int(29)?,
|
||||
};
|
||||
|
||||
block_uncompressed = if compression_block_count <= 0 {
|
||||
block_uncompressed = if compression_block_count == 0 {
|
||||
0
|
||||
} else if uncompressed < block_uncompressed.into() {
|
||||
uncompressed.try_into().unwrap()
|
||||
|
@ -157,7 +163,6 @@ impl Entry {
|
|||
let mut index = offset_base;
|
||||
Some(
|
||||
(0..compression_block_count)
|
||||
.into_iter()
|
||||
.map(|_| {
|
||||
let mut block_size = reader.read_u32::<LE>()? as u64;
|
||||
let block = Block {
|
||||
|
@ -220,7 +225,9 @@ impl Entry {
|
|||
for block in blocks {
|
||||
io::copy(
|
||||
&mut <$decompressor>::new(
|
||||
&data[match version.version_major() >= VersionMajor::RelativeChunkOffsets {
|
||||
&data[match version.version_major()
|
||||
>= VersionMajor::RelativeChunkOffsets
|
||||
{
|
||||
true => {
|
||||
(block.start - (data_offset - self.offset)) as usize
|
||||
..(block.end - (data_offset - self.offset)) as usize
|
||||
|
|
|
@ -23,10 +23,12 @@ impl Footer {
|
|||
true => Some(reader.read_u128::<LE>()?),
|
||||
false => None,
|
||||
},
|
||||
encrypted: version.version_major() >= VersionMajor::IndexEncryption && reader.read_bool()?,
|
||||
encrypted: version.version_major() >= VersionMajor::IndexEncryption
|
||||
&& reader.read_bool()?,
|
||||
magic: reader.read_u32::<LE>()?,
|
||||
version,
|
||||
version_major: VersionMajor::from_repr(reader.read_u32::<LE>()?).unwrap_or(version.version_major()),
|
||||
version_major: VersionMajor::from_repr(reader.read_u32::<LE>()?)
|
||||
.unwrap_or(version.version_major()),
|
||||
index_offset: reader.read_u64::<LE>()?,
|
||||
index_size: reader.read_u64::<LE>()?,
|
||||
hash: reader.read_guid()?,
|
||||
|
|
|
@ -70,12 +70,12 @@ impl Version {
|
|||
size += 1;
|
||||
}
|
||||
if self >= Version::V8A {
|
||||
// compression names: [[u8; 32]; 5]
|
||||
// compression names: [[u8; 32]; 4]
|
||||
size += 32 * 4;
|
||||
}
|
||||
if self >= Version::V8B {
|
||||
// compression names: [[u8; 32]; 5]
|
||||
size += 32 * 1;
|
||||
// additional compression name
|
||||
size += 32;
|
||||
}
|
||||
size
|
||||
}
|
||||
|
|
28
src/pak.rs
28
src/pak.rs
|
@ -57,21 +57,11 @@ fn decrypt(key: &Option<aes::Aes256Dec>, bytes: &mut [u8]) -> Result<(), super::
|
|||
}
|
||||
|
||||
impl<R: io::Read + io::Seek> PakReader<R> {
|
||||
pub fn new_any(
|
||||
mut reader: R,
|
||||
key: Option<aes::Aes256Dec>,
|
||||
) -> Result<Self, super::Error> {
|
||||
pub fn new_any(mut reader: R, key: Option<aes::Aes256Dec>) -> Result<Self, super::Error> {
|
||||
for ver in Version::iter() {
|
||||
match PakReader::new(
|
||||
&mut reader,
|
||||
ver,
|
||||
key.clone(),
|
||||
) {
|
||||
match PakReader::new(&mut reader, ver, key.clone()) {
|
||||
Ok(pak) => {
|
||||
return Ok(PakReader {
|
||||
pak,
|
||||
reader,
|
||||
});
|
||||
return Ok(PakReader { pak, reader });
|
||||
}
|
||||
_ => continue,
|
||||
}
|
||||
|
@ -172,7 +162,7 @@ impl<R: io::Read + io::Seek> PakReader<R> {
|
|||
// concat directory with file name to match IndexV1 but should provide a more direct access method
|
||||
let path = format!(
|
||||
"{}{}",
|
||||
dir_name.strip_prefix("/").unwrap_or(dir_name),
|
||||
dir_name.strip_prefix('/').unwrap_or(dir_name),
|
||||
file_name
|
||||
);
|
||||
entries_by_path.insert(path, entry);
|
||||
|
@ -224,13 +214,19 @@ impl<R: io::Read + io::Seek> PakReader<R> {
|
|||
|
||||
pub fn read<W: io::Write>(&mut self, path: &str, writer: &mut W) -> Result<(), super::Error> {
|
||||
match self.pak.index.entries().get(path) {
|
||||
Some(entry) => entry.read(&mut self.reader, self.pak.version, self.pak.key.as_ref(), writer),
|
||||
Some(entry) => entry.read(
|
||||
&mut self.reader,
|
||||
self.pak.version,
|
||||
self.pak.key.as_ref(),
|
||||
writer,
|
||||
),
|
||||
None => Err(super::Error::Other("no file found at given path")),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn files(&self) -> std::vec::IntoIter<String> {
|
||||
self.pak.index
|
||||
self.pak
|
||||
.index
|
||||
.entries()
|
||||
.keys()
|
||||
.cloned()
|
||||
|
|
Loading…
Reference in a new issue