mirror of
https://github.com/lifegpc/msg-tool.git
synced 2026-06-26 21:57:08 +08:00
fix base offset calculated twice
This commit is contained in:
@@ -524,7 +524,6 @@ impl<'a, T: Iterator<Item = &'a BgiFileHeader>, R: Read + Seek + 'static> Iterat
|
|||||||
|
|
||||||
pub struct BgiArchiveWriter<T: Write + Seek> {
|
pub struct BgiArchiveWriter<T: Write + Seek> {
|
||||||
writer: T,
|
writer: T,
|
||||||
file_count: u32,
|
|
||||||
headers: HashMap<String, BgiFileHeader>,
|
headers: HashMap<String, BgiFileHeader>,
|
||||||
compress_file: bool,
|
compress_file: bool,
|
||||||
encoding: Encoding,
|
encoding: Encoding,
|
||||||
@@ -554,7 +553,6 @@ impl<T: Write + Seek> BgiArchiveWriter<T> {
|
|||||||
}
|
}
|
||||||
Ok(BgiArchiveWriter {
|
Ok(BgiArchiveWriter {
|
||||||
writer,
|
writer,
|
||||||
file_count: file_count as u32,
|
|
||||||
headers,
|
headers,
|
||||||
compress_file: config.bgi_compress_file,
|
compress_file: config.bgi_compress_file,
|
||||||
encoding,
|
encoding,
|
||||||
@@ -577,7 +575,6 @@ impl<T: Write + Seek> Archive for BgiArchiveWriter<T> {
|
|||||||
header: entry,
|
header: entry,
|
||||||
writer: &mut self.writer,
|
writer: &mut self.writer,
|
||||||
pos: 0,
|
pos: 0,
|
||||||
base_offset: 16 + (self.file_count as u64 * 0x80),
|
|
||||||
};
|
};
|
||||||
Ok(if self.compress_file {
|
Ok(if self.compress_file {
|
||||||
Box::new(BgiArchiveFileWithDsc::new(file))
|
Box::new(BgiArchiveFileWithDsc::new(file))
|
||||||
@@ -601,14 +598,12 @@ pub struct BgiArchiveFile<'a, T: Write + Seek> {
|
|||||||
header: &'a mut BgiFileHeader,
|
header: &'a mut BgiFileHeader,
|
||||||
writer: &'a mut T,
|
writer: &'a mut T,
|
||||||
pos: usize,
|
pos: usize,
|
||||||
base_offset: u64,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T: Write + Seek> Write for BgiArchiveFile<'a, T> {
|
impl<'a, T: Write + Seek> Write for BgiArchiveFile<'a, T> {
|
||||||
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
|
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
|
||||||
self.writer.seek(SeekFrom::Start(
|
self.writer
|
||||||
self.base_offset + self.header.offset as u64 + self.pos as u64,
|
.seek(SeekFrom::Start(self.header.offset as u64 + self.pos as u64))?;
|
||||||
))?;
|
|
||||||
let bytes_written = self.writer.write(buf)?;
|
let bytes_written = self.writer.write(buf)?;
|
||||||
self.pos += bytes_written;
|
self.pos += bytes_written;
|
||||||
self.header.size = self.header.size.max(self.pos as u32);
|
self.header.size = self.header.size.max(self.pos as u32);
|
||||||
|
|||||||
Reference in New Issue
Block a user