summaryrefslogtreecommitdiff
path: root/src/SFileAddFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/SFileAddFile.cpp')
-rw-r--r--src/SFileAddFile.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/SFileAddFile.cpp b/src/SFileAddFile.cpp
index 524fb50..0878ab7 100644
--- a/src/SFileAddFile.cpp
+++ b/src/SFileAddFile.cpp
@@ -725,11 +725,20 @@ bool WINAPI SFileCreateFile(
nError = ERROR_INVALID_PARAMETER;
}
- // Check for MPQs that have invalid block table size
+ // The number of files must not overflow the maximum
// Example: size of block table: 0x41, size of hash table: 0x40
if(nError == ERROR_SUCCESS)
{
- if(ha->dwFileTableSize > ha->dwMaxFileCount)
+ DWORD dwReservedFiles = ha->dwReservedFiles;
+
+ if(dwReservedFiles == 0)
+ {
+ dwReservedFiles += ha->dwFileFlags1 ? 1 : 0;
+ dwReservedFiles += ha->dwFileFlags2 ? 1 : 0;
+ dwReservedFiles += ha->dwFileFlags3 ? 1 : 0;
+ }
+
+ if((ha->dwFileTableSize + dwReservedFiles) > ha->dwMaxFileCount)
nError = ERROR_DISK_FULL;
}