Allow custom min len header

This commit is contained in:
2025-08-06 22:48:40 +08:00
parent 226ac24844
commit dcba086021
11 changed files with 52 additions and 19 deletions

View File

@@ -514,6 +514,7 @@ pub struct BgiArchiveWriter<T: Write + Seek> {
headers: HashMap<String, BgiFileHeader>,
compress_file: bool,
encoding: Encoding,
min_len: usize,
}
impl<T: Write + Seek> BgiArchiveWriter<T> {
@@ -543,6 +544,7 @@ impl<T: Write + Seek> BgiArchiveWriter<T> {
headers,
compress_file: config.bgi_compress_file,
encoding,
min_len: config.bgi_compress_min_len,
})
}
}
@@ -564,7 +566,7 @@ impl<T: Write + Seek> Archive for BgiArchiveWriter<T> {
pos: 0,
};
Ok(if self.compress_file {
Box::new(BgiArchiveFileWithDsc::new(file))
Box::new(BgiArchiveFileWithDsc::new(file, self.min_len))
} else {
Box::new(file)
})
@@ -643,13 +645,15 @@ impl<'a, T: Write + Seek> Seek for BgiArchiveFile<'a, T> {
pub struct BgiArchiveFileWithDsc<'a, T: Write + Seek> {
writer: BgiArchiveFile<'a, T>,
buf: MemWriter,
min_len: usize,
}
impl<'a, T: Write + Seek> BgiArchiveFileWithDsc<'a, T> {
pub fn new(writer: BgiArchiveFile<'a, T>) -> Self {
pub fn new(writer: BgiArchiveFile<'a, T>, min_len: usize) -> Self {
BgiArchiveFileWithDsc {
writer,
buf: MemWriter::new(),
min_len,
}
}
}
@@ -681,7 +685,7 @@ impl<'a, T: Write + Seek> Seek for BgiArchiveFileWithDsc<'a, T> {
impl<'a, T: Write + Seek> Drop for BgiArchiveFileWithDsc<'a, T> {
fn drop(&mut self) {
let buf = self.buf.as_slice();
let encoder = DscEncoder::new(&mut self.writer);
let encoder = DscEncoder::new(&mut self.writer, self.min_len);
if let Err(e) = encoder.pack(&buf) {
eprintln!("Failed to write DSC data: {}", e);
crate::COUNTER.inc_error();