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

Function LoadBlockTable

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

Source from the content-addressed store, hash-verified

2225}
2226
2227TMPQBlock * LoadBlockTable(TMPQArchive * ha, bool /* bDontFixEntries */)
2228{
2229 TMPQHeader * pHeader = ha->pHeader;
2230 TMPQBlock * pBlockTable = NULL;
2231 ULONGLONG ByteOffset;
2232 DWORD dwTableSize;
2233 DWORD dwCmpSize;
2234 bool bBlockTableIsCut = false;
2235
2236 // Note: It is possible that the block table starts at offset 0
2237 // Example: MPQ_2016_v1_ProtectedMap_HashOffsIsZero.w3x
2238// if(pHeader->dwBlockTablePos == 0 && pHeader->wBlockTablePosHi == 0)
2239// return NULL;
2240
2241 // Do nothing if the block table size is zero
2242 if(pHeader->dwBlockTableSize == 0)
2243 return NULL;
2244
2245 // Load the block table for MPQ variations
2246 switch(ha->dwSubType)
2247 {
2248 case MPQ_SUBTYPE_MPQ:
2249
2250 // Calculate byte position of the block table
2251 ByteOffset = FileOffsetFromMpqOffset(ha, MAKE_OFFSET64(pHeader->wBlockTablePosHi, pHeader->dwBlockTablePos));
2252 dwTableSize = pHeader->dwBlockTableSize * sizeof(TMPQBlock);
2253 dwCmpSize = (DWORD)pHeader->BlockTableSize64;
2254
2255 // Read, decrypt and uncompress the block table
2256 pBlockTable = (TMPQBlock * )LoadMpqTable(ha, ByteOffset, dwCmpSize, dwTableSize, MPQ_KEY_BLOCK_TABLE, &bBlockTableIsCut);
2257
2258 // If the block table was cut, we need to remember it
2259 if(pBlockTable != NULL && bBlockTableIsCut)
2260 ha->dwFlags |= (MPQ_FLAG_MALFORMED | MPQ_FLAG_BLOCK_TABLE_CUT);
2261 break;
2262
2263 case MPQ_SUBTYPE_SQP:
2264
2265 pBlockTable = LoadSqpBlockTable(ha);
2266 break;
2267
2268 case MPQ_SUBTYPE_MPK:
2269
2270 pBlockTable = LoadMpkBlockTable(ha);
2271 break;
2272 }
2273
2274 return pBlockTable;
2275}
2276
2277#ifdef FULL
2278TMPQHetTable * LoadHetTable(TMPQArchive * ha)

Callers 2

BuildFileTable_ClassicFunction · 0.85
SFileGetFileInfoFunction · 0.85

Calls 4

FileOffsetFromMpqOffsetFunction · 0.85
LoadMpqTableFunction · 0.85
LoadSqpBlockTableFunction · 0.85
LoadMpkBlockTableFunction · 0.85

Tested by

no test coverage detected