1
Fork 0
mirror of https://github.com/redstrate/Physis.git synced 2025-04-20 11:47:46 +00:00

Calculate and write the actual file size in LGB header

We're off by 4 bytes, but this is at least closer to being correct.
This commit is contained in:
Joshua Goins 2025-04-13 15:13:05 -04:00
parent de06972b1e
commit 344dcff584

View file

@ -522,6 +522,7 @@ struct OBSetEnableReferenced {
struct LgbHeader { struct LgbHeader {
// Example: "LGB1" // Example: "LGB1"
file_id: u32, file_id: u32,
// File size *including* this header
file_size: i32, file_size: i32,
total_chunk_count: i32, total_chunk_count: i32,
} }
@ -690,12 +691,8 @@ impl LayerGroup {
{ {
let mut cursor = Cursor::new(&mut buffer); let mut cursor = Cursor::new(&mut buffer);
let lgb_header = LgbHeader { // skip header, will be writing it later
file_id: self.file_id, cursor.seek(SeekFrom::Start(std::mem::size_of::<LgbHeader>() as u64)).unwrap();
file_size: 0,
total_chunk_count: 0,
};
lgb_header.write_le(&mut cursor).ok()?;
let mut chunk_string_heap = StringHeap { let mut chunk_string_heap = StringHeap {
pos: 0, pos: 0,
@ -753,6 +750,21 @@ impl LayerGroup {
} }
} }
let file_size = buffer.len() as i32;
{
let mut cursor = Cursor::new(&mut buffer);
// write the header, now that we now the file size
cursor.seek(SeekFrom::Start(0)).ok()?;
let lgb_header = LgbHeader {
file_id: self.file_id,
file_size,
total_chunk_count: 0,
};
lgb_header.write_le(&mut cursor).ok()?;
}
Some(buffer) Some(buffer)
} }
} }