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

Function TranslateBlockTable

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

Also used in SFileGetFileInfo

Source from the content-addressed store, hash-verified

884
885// Also used in SFileGetFileInfo
886TMPQBlock * TranslateBlockTable(
887 TMPQArchive * ha,
888 ULONGLONG * pcbTableSize,
889 bool * pbNeedHiBlockTable)
890{
891 TFileEntry * pFileEntry = ha->pFileTable;
892 TMPQBlock * pBlockTable;
893 TMPQBlock * pBlock;
894 DWORD NeedHiBlockTable = 0;
895 DWORD dwBlockTableSize = ha->pHeader->dwBlockTableSize;
896
897 // Allocate copy of the hash table
898 pBlockTable = pBlock = STORM_ALLOC(TMPQBlock, dwBlockTableSize);
899 if(pBlockTable != NULL)
900 {
901 // Convert the block table
902 for(DWORD i = 0; i < dwBlockTableSize; i++)
903 {
904 NeedHiBlockTable |= (DWORD)(pFileEntry->ByteOffset >> 32);
905 pBlock->dwFilePos = (DWORD)pFileEntry->ByteOffset;
906 pBlock->dwFSize = pFileEntry->dwFileSize;
907 pBlock->dwCSize = pFileEntry->dwCmpSize;
908 pBlock->dwFlags = pFileEntry->dwFlags;
909
910 pFileEntry++;
911 pBlock++;
912 }
913
914 // Give the size to the caller
915 if(pcbTableSize != NULL)
916 *pcbTableSize = (ULONGLONG)dwBlockTableSize * sizeof(TMPQBlock);
917
918 if(pbNeedHiBlockTable != NULL)
919 *pbNeedHiBlockTable = NeedHiBlockTable ? true : false;
920 }
921
922 return pBlockTable;
923}
924
925static USHORT * TranslateHiBlockTable(
926 TMPQArchive * ha,

Callers 1

SaveMPQTablesFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected