backport a serialization fix

This commit is contained in:
darkrose 2013-11-12 21:41:28 +10:00
parent ad6d3fff9f
commit f0fbbfdb4b
1 changed files with 8 additions and 17 deletions

View File

@ -56,9 +56,7 @@ void compressZlib(SharedBuffer<u8> data, std::ostream &os)
{
z_stream z;
const s32 bufsize = 16384;
//char input_buffer[bufsize];
char output_buffer[bufsize];
int input_i = 0;
int status = 0;
int ret;
@ -70,26 +68,16 @@ void compressZlib(SharedBuffer<u8> data, std::ostream &os)
if(ret != Z_OK)
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(;;)
{
int flush = Z_NO_FLUSH;
z.next_out = (Bytef*)output_buffer;
z.avail_out = bufsize;
if(z.avail_in == 0)
{
//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);
status = deflate(&z, Z_FINISH);
if(status == Z_NEED_DICT || status == Z_DATA_ERROR
|| status == Z_MEM_ERROR)
{
@ -99,6 +87,9 @@ void compressZlib(SharedBuffer<u8> data, std::ostream &os)
int count = bufsize - z.avail_out;
if(count)
os.write(output_buffer, count);
// This determines zlib has given all output
if(status == Z_STREAM_END)
break;
}
deflateEnd(&z);