insert file in zip
This commit is contained in:
parent
3f521b5754
commit
7b6a5980c8
6 changed files with 210 additions and 8 deletions
|
|
@ -1,6 +1,8 @@
|
|||
use std::io::{SeekFrom, Write};
|
||||
|
||||
use crate::compression::CompressionMethod;
|
||||
use crate::cp437::string_to_cp437;
|
||||
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};
|
||||
|
|
@ -188,6 +190,36 @@ impl FileHeader {
|
|||
const SIGNATURE: Signature = Signature(0x02014b50);
|
||||
const MIN_SIZE: usize = 4 + 6 * 2 + 4 * 3 + 5 * 2 + 4 * 2;
|
||||
|
||||
pub fn new_default(name: &str) -> Self {
|
||||
let mut general_purpose_flags = 0;
|
||||
let file_name = match string_to_cp437(name) {
|
||||
Ok(name) => name,
|
||||
Err(Error::NotCp437) => {
|
||||
general_purpose_flags |= general_purpose_flags::MASK_UTF8_FILENAME;
|
||||
name.as_bytes().into()
|
||||
}
|
||||
};
|
||||
FileHeader {
|
||||
version_made_by: 768,
|
||||
version_needed_to_extract: 0,
|
||||
general_purpose_flags,
|
||||
compression_method: CompressionMethod::Deflated,
|
||||
last_mod_file_time: 0,
|
||||
last_mod_file_data: 0,
|
||||
crc_32: 0,
|
||||
compressed_size: 0,
|
||||
uncompressed_size: 0,
|
||||
disk_number_start: 0,
|
||||
internal_file_attributes: 0,
|
||||
external_file_attributes: 0b1000000110100100 << 16, // TODO
|
||||
offset_local_header: 0,
|
||||
file_name,
|
||||
extra_field: vec![],
|
||||
malformed_extra_field: vec![],
|
||||
file_comment: vec![],
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_name_encoding(&self) -> Encoding {
|
||||
if self.general_purpose_flags & general_purpose_flags::MASK_UTF8_FILENAME != 0 {
|
||||
Encoding::UTF8
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue