aboutsummaryrefslogtreecommitdiff
path: root/dep/CascLib/src/CascMndxRoot.cpp
diff options
context:
space:
mode:
authorNayd <dnpd.dd@gmail.com>2015-01-11 22:12:49 +0000
committerNayd <dnpd.dd@gmail.com>2015-01-11 23:02:19 +0000
commit31e3dc2e75459f681480ae09641f1087096dfd69 (patch)
tree70685fc84efd01d450f8bc06a4cb266e6478b694 /dep/CascLib/src/CascMndxRoot.cpp
parent8bbd9133d57fc34b77544cbdd59526ed9ccaa607 (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.cpp53
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);
}
}