Files
DepotDownloaderMod/NetHook/zip.cpp
Ryan Stecker b31b57410a refactored dat shit.
--HG--
extra : convert_revision : svn%3A946a0da7-ebce-4904-9acb-2f1e67aed693%409
2010-08-08 23:09:45 +00:00

72 lines
1.5 KiB
C++

#include "zip.h"
#include "zlib/zlib.h"
#pragma pack( push, 1 )
struct LocalFileHeader
{
uint32 m_Signature;
uint16 m_VersionNeededToExtract;
uint16 m_GeneralPurposeBitFlag;
uint16 m_CompressionMethod;
uint16 m_LastModFileTime;
uint16 m_LastModFileDate;
uint32 m_Crc32;
uint32 m_CompressedSize;
uint32 m_UncompressedSize;
uint16 m_FileNameLength;
uint16 m_ExtraFieldLength;
};
#pragma pack( pop )
bool CZip::Inflate( const uint8 *pCompressed, uint32 cubCompressed, uint8 *pDecompressed, uint32 cubDecompressed )
{
LocalFileHeader *fileHeader = (LocalFileHeader *)pCompressed;
uint32 offsetStart = sizeof( LocalFileHeader ) + fileHeader->m_FileNameLength +fileHeader->m_ExtraFieldLength;
uint32 dataSize = fileHeader->m_CompressedSize;
return CZip::InternalInflate( pCompressed + offsetStart, dataSize, pDecompressed, cubDecompressed );
}
bool CZip::InternalInflate( const uint8 *pCompressed, uint32 cubCompressed, uint8 *pDecompressed, uint32 cubDecompressed )
{
z_stream zstrm;
zstrm.zalloc = Z_NULL;
zstrm.zfree = Z_NULL;
zstrm.opaque = Z_NULL;
zstrm.avail_in = cubCompressed;
zstrm.next_in = (Bytef *)pCompressed;
zstrm.avail_out = cubDecompressed;
zstrm.next_out = pDecompressed;
int ret = inflateInit2( &zstrm, -15 );
if ( ret != Z_OK )
return false;
ret = inflate( &zstrm, Z_NO_FLUSH );
inflateEnd( &zstrm );
if ( ret != Z_STREAM_END )
return false;
return true;
}