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

Function LoadMpkBlockTable

3rdParty/StormLib/src/SBaseSubTypes.cpp:580–618  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

578}
579
580TMPQBlock * LoadMpkBlockTable(TMPQArchive * ha)
581{
582 TMPQHeader * pHeader = ha->pHeader;
583 TMPKBlock * pMpkBlockTable;
584 TMPKBlock * pMpkBlockEnd;
585 TMPQBlock * pBlockTable = NULL;
586 TMPKBlock * pMpkBlock;
587 TMPQBlock * pMpqBlock;
588
589 // Load and decrypt the MPK block table
590 pMpkBlockTable = pMpkBlock = (TMPKBlock *)LoadMpkTable(ha, pHeader->dwBlockTablePos, pHeader->dwBlockTableSize * sizeof(TMPKBlock));
591 if(pMpkBlockTable != NULL)
592 {
593 // Allocate buffer for MPQ-like block table
594 pBlockTable = pMpqBlock = STORM_ALLOC(TMPQBlock, pHeader->dwBlockTableSize);
595 if(pBlockTable != NULL)
596 {
597 // Convert the MPK block table to MPQ block table
598 pMpkBlockEnd = pMpkBlockTable + pHeader->dwBlockTableSize;
599 while(pMpkBlock < pMpkBlockEnd)
600 {
601 // Translate the MPK block table entry to MPQ block table entry
602 pMpqBlock->dwFilePos = pMpkBlock->dwFilePos;
603 pMpqBlock->dwCSize = pMpkBlock->dwCSize;
604 pMpqBlock->dwFSize = pMpkBlock->dwFSize;
605 pMpqBlock->dwFlags = ConvertMpkFlagsToMpqFlags(pMpkBlock->dwFlags);
606
607 // Move both
608 pMpkBlock++;
609 pMpqBlock++;
610 }
611 }
612
613 // Free the MPK block table
614 STORM_FREE(pMpkBlockTable);
615 }
616
617 return pBlockTable;
618}

Callers 1

LoadBlockTableFunction · 0.85

Calls 2

LoadMpkTableFunction · 0.85

Tested by

no test coverage detected