Also used in SFileGetFileInfo
| 884 | |
| 885 | // Also used in SFileGetFileInfo |
| 886 | TMPQBlock * 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 | |
| 925 | static USHORT * TranslateHiBlockTable( |
| 926 | TMPQArchive * ha, |