mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Dep/CascLib: Update to ladislav-zezula/CascLib@0a05c59eb8
This commit is contained in:
@@ -40,7 +40,10 @@ static DWORD OpenDataStream(TCascFile * hf, PCASC_FILE_SPAN pFileSpan, PCASC_CKE
|
||||
{
|
||||
DWORD dwArchiveIndex = pFileSpan->ArchiveIndex;
|
||||
|
||||
// If the file is not open yet, do it
|
||||
// Lock the storage to make the operation thread-safe
|
||||
CascLock(hs->StorageLock);
|
||||
|
||||
// If the data archive is not open yet, open it now.
|
||||
if(hs->DataFiles[dwArchiveIndex] == NULL)
|
||||
{
|
||||
// Prepare the name of the data file
|
||||
@@ -53,6 +56,9 @@ static DWORD OpenDataStream(TCascFile * hf, PCASC_FILE_SPAN pFileSpan, PCASC_CKE
|
||||
hs->DataFiles[dwArchiveIndex] = pStream;
|
||||
}
|
||||
|
||||
// Unlock the storage
|
||||
CascUnlock(hs->StorageLock);
|
||||
|
||||
// Return error or success
|
||||
pFileSpan->pStream = hs->DataFiles[dwArchiveIndex];
|
||||
return (pFileSpan->pStream != NULL) ? ERROR_SUCCESS : ERROR_FILE_NOT_FOUND;
|
||||
@@ -257,7 +263,7 @@ static LPBYTE CaptureBlteFileFrame(CASC_FILE_FRAME & Frame, LPBYTE pbFramePtr, L
|
||||
return pbFramePtr + sizeof(BLTE_FRAME);
|
||||
}
|
||||
|
||||
static DWORD LoadSpanFrames(PCASC_FILE_SPAN pFileSpan, PCASC_CKEY_ENTRY pCKeyEntry, DWORD DataFileOffset, LPBYTE pbFramePtr, LPBYTE pbFrameEnd, size_t cbHeaderSize)
|
||||
static DWORD LoadSpanFrames(PCASC_FILE_SPAN pFileSpan, PCASC_CKEY_ENTRY pCKeyEntry, ULONGLONG DataFileOffset, LPBYTE pbFramePtr, LPBYTE pbFrameEnd, size_t cbHeaderSize)
|
||||
{
|
||||
PCASC_FILE_FRAME pFrames = NULL;
|
||||
DWORD ContentSize = 0;
|
||||
@@ -420,8 +426,8 @@ static DWORD LoadEncodedHeaderAndSpanFrames(PCASC_FILE_SPAN pFileSpan, PCASC_CKE
|
||||
// Load the array of frame headers
|
||||
if (dwErrCode == ERROR_SUCCESS)
|
||||
{
|
||||
assert((DWORD)(ReadOffset + cbHeaderSize) > (DWORD)ReadOffset);
|
||||
dwErrCode = LoadSpanFrames(pFileSpan, pCKeyEntry, (DWORD)(ReadOffset + cbHeaderSize), pbEncodedBuffer + cbHeaderSize, pbEncodedBuffer + cbEncodedBuffer, cbHeaderSize);
|
||||
assert((ReadOffset + cbHeaderSize) > ReadOffset);
|
||||
dwErrCode = LoadSpanFrames(pFileSpan, pCKeyEntry, ReadOffset + cbHeaderSize, pbEncodedBuffer + cbHeaderSize, pbEncodedBuffer + cbEncodedBuffer, cbHeaderSize);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -821,7 +827,6 @@ static DWORD ReadFile_FrameCached(TCascFile * hf, LPBYTE pbBuffer, ULONGLONG Sta
|
||||
PCASC_CKEY_ENTRY pCKeyEntry = hf->pCKeyEntry;
|
||||
PCASC_FILE_SPAN pFileSpan = hf->pFileSpan;
|
||||
PCASC_FILE_FRAME pFileFrame = NULL;
|
||||
ULONGLONG ByteOffset;
|
||||
LPBYTE pbSaveBuffer = pbBuffer;
|
||||
LPBYTE pbEncoded = NULL;
|
||||
LPBYTE pbDecoded = NULL;
|
||||
@@ -876,8 +881,7 @@ static DWORD ReadFile_FrameCached(TCascFile * hf, LPBYTE pbBuffer, ULONGLONG Sta
|
||||
}
|
||||
|
||||
// Load the frame to the encoded buffer
|
||||
ByteOffset = pFileFrame->DataFileOffset;
|
||||
if(FileStream_Read(pFileSpan->pStream, &ByteOffset, pbEncoded, pFileFrame->EncodedSize))
|
||||
if(FileStream_Read(pFileSpan->pStream, &pFileFrame->DataFileOffset, pbEncoded, pFileFrame->EncodedSize))
|
||||
{
|
||||
ULONGLONG EndOfCopy = CASCLIB_MIN(pFileFrame->EndOffset, EndOffset);
|
||||
DWORD dwBytesToCopy = (DWORD)(EndOfCopy - StartOffset);
|
||||
@@ -1143,7 +1147,7 @@ bool WINAPI CascSetFilePointer64(HANDLE hFile, LONGLONG DistanceToMove, PULONGLO
|
||||
}
|
||||
|
||||
// Do not allow the file pointer to move to negative values
|
||||
if((FilePosition = FilePosition + DistanceToMove) < 0)
|
||||
if((LONGLONG)(FilePosition = FilePosition + DistanceToMove) < 0)
|
||||
FilePosition = 0;
|
||||
hf->FilePointer = FilePosition;
|
||||
}
|
||||
@@ -1269,6 +1273,8 @@ bool WINAPI CascReadFile(HANDLE hFile, void * pvBuffer, DWORD dwBytesToRead, PDW
|
||||
if(PtrBytesRead != NULL)
|
||||
PtrBytesRead[0] = 0;
|
||||
hf->FilePointer = SaveFilePointer;
|
||||
return false;
|
||||
|
||||
// If 0 bytes were requested, it's actually a success
|
||||
return (dwBytesToRead == 0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user