mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 08:55:32 +01:00
57 lines
2.0 KiB
C++
57 lines
2.0 KiB
C++
/*****************************************************************************/
|
|
/* CascDecompress.cpp Copyright (c) Ladislav Zezula 2014 */
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Decompression functions */
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Date Ver Who Comment */
|
|
/* -------- ---- --- ------- */
|
|
/* 02.05.14 1.00 Lad The first version of CascDecompress.cpp */
|
|
/*****************************************************************************/
|
|
|
|
#define __CASCLIB_SELF__
|
|
#include "CascLib.h"
|
|
#include "CascCommon.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Public functions
|
|
|
|
DWORD CascDecompress(LPBYTE pbOutBuffer, PDWORD pcbOutBuffer, LPBYTE pbInBuffer, DWORD cbInBuffer)
|
|
{
|
|
z_stream z; // Stream information for zlib
|
|
DWORD dwErrCode = ERROR_FILE_CORRUPT;
|
|
uInt cbOutBuffer = *pcbOutBuffer;
|
|
int nResult;
|
|
|
|
// Fill the stream structure for zlib
|
|
z.next_in = pbInBuffer;
|
|
z.avail_in = cbInBuffer;
|
|
z.total_in = cbInBuffer;
|
|
z.next_out = pbOutBuffer;
|
|
z.avail_out = cbOutBuffer;
|
|
z.total_out = 0;
|
|
z.zalloc = NULL;
|
|
z.zfree = NULL;
|
|
|
|
// Reset the total number of output bytes
|
|
cbOutBuffer = 0;
|
|
|
|
// Initialize the decompression structure
|
|
if((nResult = inflateInit(&z)) == Z_OK)
|
|
{
|
|
// Call zlib to decompress the data
|
|
nResult = inflate(&z, Z_NO_FLUSH);
|
|
if (nResult == Z_OK || nResult == Z_STREAM_END)
|
|
{
|
|
// Give the size of the uncompressed data
|
|
cbOutBuffer = z.total_out;
|
|
dwErrCode = ERROR_SUCCESS;
|
|
}
|
|
|
|
inflateEnd(&z);
|
|
}
|
|
|
|
// Give the caller the number of bytes needed
|
|
pcbOutBuffer[0] = cbOutBuffer;
|
|
return dwErrCode;
|
|
}
|