This commit is contained in:
Jean-Marie Mineau 2024-01-19 11:46:36 +01:00
parent 99ecf178df
commit 3f521b5754
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
4 changed files with 277 additions and 5 deletions

View file

@ -215,6 +215,31 @@ impl LocalFileHeader {
}
}
pub fn set_uncompressed_size(&mut self, uncompressed_size: u64) {
if let Some(ExtraField::Zip64(Zip64ExtraField {
original_size: Some(original_size),
..
})) = self
.extra_field
.iter_mut()
.find(|f| matches!(f, ExtraField::Zip64(_)))
{
*original_size = uncompressed_size;
self.uncompressed_size = u32::MAX;
} else if uncompressed_size > u32::MAX as u64 {
self.extra_field.push(ExtraField::Zip64(Zip64ExtraField {
original_size: Some(uncompressed_size),
compressed_size: Some(self.compressed_size as u64),
disk_number: None,
offset_header: None,
}));
self.uncompressed_size = u32::MAX;
self.compressed_size = u32::MAX;
} else {
self.uncompressed_size = uncompressed_size as u32;
}
}
pub fn get_compressed_size(&self) -> u64 {
if self.compressed_size != u32::MAX {
self.compressed_size as u64
@ -231,6 +256,31 @@ impl LocalFileHeader {
self.compressed_size as u64
}
}
pub fn set_compressed_size(&mut self, compressed_size: u64) {
if let Some(ExtraField::Zip64(Zip64ExtraField {
compressed_size: Some(compressed_size_),
..
})) = self
.extra_field
.iter_mut()
.find(|f| matches!(f, ExtraField::Zip64(_)))
{
*compressed_size_ = compressed_size;
self.compressed_size = u32::MAX;
} else if compressed_size > u32::MAX as u64 {
self.extra_field.push(ExtraField::Zip64(Zip64ExtraField {
original_size: Some(self.uncompressed_size as u64),
compressed_size: Some(compressed_size),
disk_number: None,
offset_header: None,
}));
self.uncompressed_size = u32::MAX;
self.compressed_size = u32::MAX;
} else {
self.compressed_size = compressed_size as u32;
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]