From 03380128b59e982fcc52c41d69023075e5cfbca2 Mon Sep 17 00:00:00 2001 From: Ladislav Zezula Date: Tue, 26 Aug 2014 10:51:32 +0200 Subject: + When adding a file in the MPQ, a space used by internal MPQ files is reused --- src/SBaseCommon.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/SBaseCommon.cpp b/src/SBaseCommon.cpp index f363c28..c8d4ba6 100644 --- a/src/SBaseCommon.cpp +++ b/src/SBaseCommon.cpp @@ -651,7 +651,8 @@ TMPQHash * AllocateHashEntry( // Finds a free space in the MPQ where to store next data // The free space begins beyond the file that is stored at the fuhrtest -// position in the MPQ. +// position in the MPQ. (listfile), (attributes) and (signature) are ignored, +// unless the MPQ is being flushed. ULONGLONG FindFreeMpqSpace(TMPQArchive * ha) { TMPQHeader * pHeader = ha->pHeader; @@ -666,6 +667,10 @@ ULONGLONG FindFreeMpqSpace(TMPQArchive * ha) // Only take existing files with nonzero size if((pFileEntry->dwFlags & MPQ_FILE_EXISTS) && (pFileEntry->dwCmpSize != 0)) { + // If we are not saving MPQ tables, ignore internal MPQ files + if((ha->dwFlags & MPQ_FLAG_SAVING_TABLES) == 0 && IsInternalMpqFileName(pFileEntry->szFileName)) + continue; + // If the end of the file is bigger than current MPQ table pos, update it if((pFileEntry->ByteOffset + pFileEntry->dwCmpSize) > FreeSpacePos) { -- cgit v1.2.3