Fix compressZlib()
parent
38bb649582
commit
246520b5cb
|
@ -57,9 +57,7 @@ void compressZlib(SharedBuffer<u8> data, std::ostream &os)
|
||||||
{
|
{
|
||||||
z_stream z;
|
z_stream z;
|
||||||
const s32 bufsize = 16384;
|
const s32 bufsize = 16384;
|
||||||
//char input_buffer[bufsize];
|
|
||||||
char output_buffer[bufsize];
|
char output_buffer[bufsize];
|
||||||
int input_i = 0;
|
|
||||||
int status = 0;
|
int status = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -71,26 +69,16 @@ void compressZlib(SharedBuffer<u8> data, std::ostream &os)
|
||||||
if(ret != Z_OK)
|
if(ret != Z_OK)
|
||||||
throw SerializationError("compressZlib: deflateInit failed");
|
throw SerializationError("compressZlib: deflateInit failed");
|
||||||
|
|
||||||
z.avail_in = 0;
|
// Point zlib to our input buffer
|
||||||
|
z.next_in = (Bytef*)&data[0];
|
||||||
|
z.avail_in = data.getSize();
|
||||||
|
// And get all output
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
int flush = Z_NO_FLUSH;
|
|
||||||
z.next_out = (Bytef*)output_buffer;
|
z.next_out = (Bytef*)output_buffer;
|
||||||
z.avail_out = bufsize;
|
z.avail_out = bufsize;
|
||||||
|
|
||||||
if(z.avail_in == 0)
|
status = deflate(&z, Z_FINISH);
|
||||||
{
|
|
||||||
//z.next_in = (char*)&data[input_i];
|
|
||||||
z.next_in = (Bytef*)&data[input_i];
|
|
||||||
z.avail_in = data.getSize() - input_i;
|
|
||||||
input_i += z.avail_in;
|
|
||||||
if(input_i == (int)data.getSize())
|
|
||||||
flush = Z_FINISH;
|
|
||||||
}
|
|
||||||
if(z.avail_in == 0)
|
|
||||||
break;
|
|
||||||
status = deflate(&z, flush);
|
|
||||||
if(status == Z_NEED_DICT || status == Z_DATA_ERROR
|
if(status == Z_NEED_DICT || status == Z_DATA_ERROR
|
||||||
|| status == Z_MEM_ERROR)
|
|| status == Z_MEM_ERROR)
|
||||||
{
|
{
|
||||||
|
@ -100,6 +88,9 @@ void compressZlib(SharedBuffer<u8> data, std::ostream &os)
|
||||||
int count = bufsize - z.avail_out;
|
int count = bufsize - z.avail_out;
|
||||||
if(count)
|
if(count)
|
||||||
os.write(output_buffer, count);
|
os.write(output_buffer, count);
|
||||||
|
// This determines zlib has given all output
|
||||||
|
if(status == Z_STREAM_END)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
deflateEnd(&z);
|
deflateEnd(&z);
|
||||||
|
|
Loading…
Reference in New Issue