aboutsummaryrefslogtreecommitdiff
path: root/src/SBaseCommon.cpp
diff options
context:
space:
mode:
authorLadislav Zezula <ladislav.zezula@avg.com>2014-08-26 10:51:32 +0200
committerLadislav Zezula <ladislav.zezula@avg.com>2014-08-26 10:51:32 +0200
commit03380128b59e982fcc52c41d69023075e5cfbca2 (patch)
treecd660ad99a502a8d9726313d8573d5a4f934a236 /src/SBaseCommon.cpp
parent7dbb19b5079f2c8ddec3ec88bc3b0be9ad27e443 (diff)
+ When adding a file in the MPQ, a space used by internal MPQ files is reused
Diffstat (limited to 'src/SBaseCommon.cpp')
-rw-r--r--src/SBaseCommon.cpp7
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)
{