mirror of https://github.com/PrimeDecomp/prime.git
33 lines
902 B
C++
33 lines
902 B
C++
#include "Kyoto/Streams/CZipInputStream.hpp"
|
|
#include "Kyoto/Streams/CZipSupport.hpp"
|
|
|
|
CZipInputStream::CZipInputStream(rstl::auto_ptr<CInputStream> in)
|
|
: CInputStream(4096)
|
|
, mCompBuf(new uchar[4096])
|
|
, mStream(in)
|
|
, mZStream(new z_stream_s) {
|
|
z_stream_s* zs = mZStream.get();
|
|
zs->next_in = mCompBuf.get();
|
|
mZStream->avail_in = 0;
|
|
mZStream->zalloc = CZipSupport::Alloc;
|
|
mZStream->zfree = CZipSupport::Free;
|
|
mZStream->opaque = 0;
|
|
inflateInit2(mZStream.get());
|
|
}
|
|
|
|
CZipInputStream::~CZipInputStream() {
|
|
inflateEnd(mZStream.get());
|
|
}
|
|
|
|
|
|
size_t CZipInputStream::Read(void* buf, size_t len) {
|
|
mZStream->next_out = static_cast<Bytef*>(buf);
|
|
mZStream->avail_out = len;
|
|
if (mZStream->avail_in == 0) {
|
|
mZStream->avail_in = mStream->ReadBytes(mCompBuf.get(), 4096);
|
|
mZStream->next_in = mCompBuf.get();
|
|
}
|
|
inflate(mZStream.get(), Z_NO_FLUSH);
|
|
return len - mZStream->avail_out;
|
|
}
|