MCPcopy Create free account
hub / github.com/diasurgical/devilution / DetermineArchiveSize_V2

Function DetermineArchiveSize_V2

3rdParty/StormLib/src/SBaseFileTable.cpp:261–289  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

259}
260
261static ULONGLONG DetermineArchiveSize_V2(
262 TMPQHeader * pHeader,
263 ULONGLONG MpqOffset,
264 ULONGLONG FileSize)
265{
266 ULONGLONG EndOfMpq = FileSize;
267 DWORD dwArchiveSize32;
268
269 // This could only be called for MPQs version 2.0
270 assert(pHeader->wFormatVersion == MPQ_FORMAT_VERSION_2);
271
272 // Check if we can rely on the archive size in the header
273 if((FileSize >> 0x20) == 0)
274 {
275 if(pHeader->dwBlockTablePos < pHeader->dwArchiveSize)
276 {
277 if((pHeader->dwArchiveSize - pHeader->dwBlockTablePos) <= (pHeader->dwBlockTableSize * sizeof(TMPQBlock)))
278 return pHeader->dwArchiveSize;
279
280 // If the archive size in the header is less than real file size
281 dwArchiveSize32 = (DWORD)(FileSize - MpqOffset);
282 if(pHeader->dwArchiveSize <= dwArchiveSize32)
283 return pHeader->dwArchiveSize;
284 }
285 }
286
287 // Return the calculated archive size
288 return (EndOfMpq - MpqOffset);
289}
290
291ULONGLONG FileOffsetFromMpqOffset(TMPQArchive * ha, ULONGLONG MpqOffset)
292{

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected