implement file insertion

This commit is contained in:
Jean-Marie Mineau 2024-01-22 14:22:28 +01:00
parent 7b6a5980c8
commit 0f5764c340
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
4 changed files with 98 additions and 17 deletions

View file

@ -1,6 +1,7 @@
use std::io::{SeekFrom, Write};
use crate::compression::CompressionMethod;
use crate::error::Error;
use crate::extra_fields::{ExtraField, GenericExtraField, Zip64ExtraField};
use crate::{cp437, general_purpose_flags, Encoding, Signature};
use androscalpel_serializer::{ReadSeek, Result, Serializable};
@ -198,6 +199,20 @@ impl LocalFileHeader {
}
}
pub fn set_name(&mut self, name: &str) {
let file_name = match cp437::string_to_cp437(name) {
Ok(name) => {
self.general_purpose_flags &= !general_purpose_flags::MASK_UTF8_FILENAME;
name
}
Err(Error::NotCp437) => {
self.general_purpose_flags |= general_purpose_flags::MASK_UTF8_FILENAME;
name.as_bytes().into()
}
};
self.file_name = file_name;
}
pub fn get_uncompressed_size(&self) -> u64 {
if self.uncompressed_size != u32::MAX {
self.uncompressed_size as u64