diff options
author | Nayd <dnpd.dd@gmail.com> | 2015-01-11 22:12:49 +0000 |
---|---|---|
committer | Nayd <dnpd.dd@gmail.com> | 2015-01-11 23:02:19 +0000 |
commit | 31e3dc2e75459f681480ae09641f1087096dfd69 (patch) | |
tree | 70685fc84efd01d450f8bc06a4cb266e6478b694 /dep/CascLib/src/CascMndxRoot.cpp | |
parent | 8bbd9133d57fc34b77544cbdd59526ed9ccaa607 (diff) |
Dep/CascLib: Update to https://github.com/ladislav-zezula/CascLib/commit/5d3789af3435534c288c2145e158d422651c7fe1
Closes #13866
Diffstat (limited to 'dep/CascLib/src/CascMndxRoot.cpp')
-rw-r--r-- | dep/CascLib/src/CascMndxRoot.cpp | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/dep/CascLib/src/CascMndxRoot.cpp b/dep/CascLib/src/CascMndxRoot.cpp index a788b652573..db29fba1662 100644 --- a/dep/CascLib/src/CascMndxRoot.cpp +++ b/dep/CascLib/src/CascMndxRoot.cpp @@ -202,6 +202,11 @@ DWORD GetNumberOfSetBits(DWORD Value32) static bool RootFileRead(LPBYTE pbFilePointer, LPBYTE pbFileEnd, void * pvBuffer, size_t dwBytesToRead) { + // False if the file pointer is beyond the end + if(pbFilePointer > pbFileEnd) + return false; + + // False if there is not enough bytes available if((size_t)(pbFileEnd - pbFilePointer) < dwBytesToRead) return false; @@ -2887,7 +2892,7 @@ PCASC_PACKAGE FindMndxPackage(TCascStorage * hs, const char * szFileName) static bool FillFindData(TCascSearch * pSearch, PCASC_FIND_DATA pFindData, TMndxFindResult * pStruct1C) { - CASC_ROOT_KEY_INFO RootKeyInfo; + PCASC_ROOT_ENTRY_MNDX pRootEntry = NULL; TCascStorage * hs = pSearch->hs; PCASC_PACKAGE pPackage; char * szStrippedName; @@ -2899,6 +2904,7 @@ static bool FillFindData(TCascSearch * pSearch, PCASC_FIND_DATA pFindData, TMndx // Fill the file name memcpy(pFindData->szFileName, pStruct1C->szFoundPath, pStruct1C->cchFoundPath); pFindData->szFileName[pStruct1C->cchFoundPath] = 0; + pFindData->szPlainName = (char *)GetPlainFileName(pFindData->szFileName); pFindData->dwFileSize = CASC_INVALID_SIZE; // Fill the file size @@ -2910,10 +2916,10 @@ static bool FillFindData(TCascSearch * pSearch, PCASC_FIND_DATA pFindData, TMndx while(szStrippedName[0] == '/') szStrippedName++; - nError = SearchMndxInfo(hs->pMndxInfo, szStrippedName, (DWORD)(pPackage - hs->pPackages->Packages), &RootKeyInfo); + nError = SearchMndxInfo(hs->pMndxInfo, szStrippedName, (DWORD)(pPackage - hs->pPackages->Packages), &pRootEntry); if(nError == ERROR_SUCCESS) { - pFindData->dwFileSize = (DWORD)RootKeyInfo.FileSize; + pFindData->dwFileSize = pRootEntry->FileSize; } } return true; @@ -3014,7 +3020,7 @@ int LoadMndxRootFile(TCascStorage * hs, LPBYTE pbRootFile, DWORD cbRootFile) { if(pMndxInfo->pMarFile1 == NULL || pMndxInfo->pMarFile2 == NULL || pMndxInfo->pMarFile3 == NULL) nError = ERROR_BAD_FORMAT; - if(pMndxInfo->MndxEntrySize != sizeof(CASC_MNDX_ENTRY)) + if(pMndxInfo->MndxEntrySize != sizeof(CASC_ROOT_ENTRY_MNDX)) nError = ERROR_BAD_FORMAT; } @@ -3028,7 +3034,7 @@ int LoadMndxRootFile(TCascStorage * hs, LPBYTE pbRootFile, DWORD cbRootFile) if(nError == ERROR_SUCCESS && FileNameCount == pMndxInfo->MndxEntriesValid) { cbToAllocate = pMndxInfo->MndxEntriesTotal * pMndxInfo->MndxEntrySize; - pMndxInfo->pMndxEntries = (PCASC_MNDX_ENTRY)CASC_ALLOC(BYTE, cbToAllocate); + pMndxInfo->pMndxEntries = (PCASC_ROOT_ENTRY_MNDX)CASC_ALLOC(BYTE, cbToAllocate); if(pMndxInfo->pMndxEntries != NULL) { if(!RootFileRead(pbRootFile + pMndxInfo->MndxEntriesOffset, pbRootFileEnd, pMndxInfo->pMndxEntries, cbToAllocate)) @@ -3045,10 +3051,10 @@ int LoadMndxRootFile(TCascStorage * hs, LPBYTE pbRootFile, DWORD cbRootFile) if(nError == ERROR_SUCCESS) { assert(pMndxInfo->MndxEntriesValid <= pMndxInfo->MndxEntriesTotal); - pMndxInfo->ppValidEntries = CASC_ALLOC(PCASC_MNDX_ENTRY, pMndxInfo->MndxEntriesValid + 1); + pMndxInfo->ppValidEntries = CASC_ALLOC(PCASC_ROOT_ENTRY_MNDX, pMndxInfo->MndxEntriesValid + 1); if(pMndxInfo->ppValidEntries != NULL) { - PCASC_MNDX_ENTRY pMndxEntry = pMndxInfo->pMndxEntries; + PCASC_ROOT_ENTRY_MNDX pRootEntry = pMndxInfo->pMndxEntries; DWORD ValidEntryCount = 1; // edx DWORD nIndex1 = 0; @@ -3056,14 +3062,14 @@ int LoadMndxRootFile(TCascStorage * hs, LPBYTE pbRootFile, DWORD cbRootFile) pMndxInfo->ppValidEntries[nIndex1++] = pMndxInfo->pMndxEntries; // Put the remaining entries - for(i = 0; i < pMndxInfo->MndxEntriesTotal; i++, pMndxEntry++) + for(i = 0; i < pMndxInfo->MndxEntriesTotal; i++, pRootEntry++) { if(ValidEntryCount > pMndxInfo->MndxEntriesValid) break; - if(pMndxEntry->Flags & 0x80000000) + if(pRootEntry->Flags & 0x80000000) { - pMndxInfo->ppValidEntries[nIndex1++] = pMndxEntry + 1; + pMndxInfo->ppValidEntries[nIndex1++] = pRootEntry + 1; ValidEntryCount++; } } @@ -3106,9 +3112,9 @@ int LoadMndxRootFile(TCascStorage * hs, LPBYTE pbRootFile, DWORD cbRootFile) return nError; } -int SearchMndxInfo(PCASC_MNDX_INFO pMndxInfo, const char * szFileName, DWORD dwPackage, PCASC_ROOT_KEY_INFO pFoundInfo) +int SearchMndxInfo(PCASC_MNDX_INFO pMndxInfo, const char * szFileName, DWORD dwPackage, PCASC_ROOT_ENTRY_MNDX * ppRootEntry) { - PCASC_MNDX_ENTRY pMndxEntry; + PCASC_ROOT_ENTRY_MNDX pRootEntry; TMndxFindResult Struct1C; // Search the database for the file name @@ -3124,20 +3130,19 @@ int SearchMndxInfo(PCASC_MNDX_INFO pMndxInfo, const char * szFileName, DWORD dwP if(Struct1C.FileNameIndex < pMndxInfo->MndxEntriesValid) { // HOTS: E945F4 - pMndxEntry = pMndxInfo->ppValidEntries[Struct1C.FileNameIndex]; - while((pMndxEntry->Flags & 0x00FFFFFF) != dwPackage) + pRootEntry = pMndxInfo->ppValidEntries[Struct1C.FileNameIndex]; + while((pRootEntry->Flags & 0x00FFFFFF) != dwPackage) { // The highest bit serves as a terminator if set - if(pMndxEntry->Flags & 0x80000000) + if(pRootEntry->Flags & 0x80000000) return ERROR_FILE_NOT_FOUND; - pMndxEntry++; + pRootEntry++; } - // Fill the root info - memcpy(pFoundInfo->EncodingKey, pMndxEntry->EncodingKey, MD5_HASH_SIZE); - pFoundInfo->FileSize = pMndxEntry->FileSize; - pFoundInfo->Flags = (BYTE)((pMndxEntry->Flags >> 0x18) & 0x3F); + // Give the root entry pointer to the caller + if(ppRootEntry != NULL) + ppRootEntry[0] = pRootEntry; return ERROR_SUCCESS; } } @@ -3213,14 +3218,18 @@ extern "C" { extern "C" void * allocate_zeroed_memory_x86(size_t bytes) { - return calloc(bytes, 1); + void * ptr = CASC_ALLOC(BYTE, bytes); + + if(ptr != NULL) + memset(ptr, 0, bytes); + return ptr; } extern "C" void free_memory_x86(void * ptr) { if(ptr != NULL) { - free(ptr); + CASC_FREE(ptr); } } |