diff options
Diffstat (limited to 'src/SFileAddFile.cpp')
-rw-r--r-- | src/SFileAddFile.cpp | 13 |
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; } |