From 965750d9ec2607dbaa696f0e0b7683a16a9dc3d1 Mon Sep 17 00:00:00 2001 From: Jai <814683@qq.com> Date: Mon, 25 Mar 2024 19:34:32 +0800 Subject: [PATCH] fix: add files limit --- crates/stormlib/src/lib.rs | 12 ++++++++++++ deps/StormLib | 2 +- src/main.rs | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/stormlib/src/lib.rs b/crates/stormlib/src/lib.rs index 4ede574..2af646a 100644 --- a/crates/stormlib/src/lib.rs +++ b/crates/stormlib/src/lib.rs @@ -223,6 +223,18 @@ impl Archive { unsafe_try_call!(SFileCompactArchive(self.handle, ptr::null_mut(), false)); Ok(()) } + + pub fn get_max_files(&mut self) -> Result { + unsafe { + let count = SFileGetMaxFileCount(self.handle); + Ok(count) + } + } + + pub fn set_max_files(&mut self, count: u32) -> Result<()> { + unsafe_try_call!(SFileSetMaxFileCount(self.handle, count)); + Ok(()) + } } impl std::ops::Drop for Archive { diff --git a/deps/StormLib b/deps/StormLib index bf6a10b..d589102 160000 --- a/deps/StormLib +++ b/deps/StormLib @@ -1 +1 @@ -Subproject commit bf6a10b5e54c541ba5b17562ab139e58eac6393c +Subproject commit d589102f9af750c4afc7a46a5821e18fdc999a34 diff --git a/src/main.rs b/src/main.rs index 4707e0c..2081cd4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -201,6 +201,8 @@ fn extract(mpq: &str, file: &str, output: &str) -> Result { fn pack(mpq: &str, files: &FileList) -> Result { let mut ar = stormlib::Archive::open(mpq, OpenArchiveFlags::MPQ_OPEN_NO_FLAG)?; + let count = ar.get_max_files().unwrap(); + ar.set_max_files(count + (files.len() as u32)); for f in files { ar.add_file(f.name.as_str(), f.path.as_str())?; }