diff options
author | Ladislav Zezula <ladislav.zezula@avg.com> | 2014-08-26 10:51:32 +0200 |
---|---|---|
committer | Ladislav Zezula <ladislav.zezula@avg.com> | 2014-08-26 10:51:32 +0200 |
commit | 03380128b59e982fcc52c41d69023075e5cfbca2 (patch) | |
tree | cd660ad99a502a8d9726313d8573d5a4f934a236 /src | |
parent | 7dbb19b5079f2c8ddec3ec88bc3b0be9ad27e443 (diff) |
+ When adding a file in the MPQ, a space used by internal MPQ files is reused
Diffstat (limited to 'src')
-rw-r--r-- | src/SBaseCommon.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
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) { |