X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=support%2Fzlib-helper.c;h=9dcebc7e967d6b04e9d8780c6cf7807e51bac228;hb=ab0b591ca59d99a2370bf9f579b091c5edf09ae5;hp=f364a66095fcaf23a35524746f18d4accf891736;hpb=8004de2b79b64d8a09ea173b7b2ca679dc54699c;p=mono.git diff --git a/support/zlib-helper.c b/support/zlib-helper.c index f364a66095f..9dcebc7e967 100644 --- a/support/zlib-helper.c +++ b/support/zlib-helper.c @@ -194,21 +194,22 @@ ReadZStream (ZStream *stream, guchar *buffer, gint length) while (zs->avail_out > 0) { if (zs->avail_in == 0) { n = stream->func (stream->buffer, BUFFER_SIZE, stream->gchandle); + n = n < 0 ? 0 : n; stream->total_in += n; - if (n <= 0) { - stream->eof = TRUE; - } zs->next_in = stream->buffer; - zs->avail_in = n < 0 ? 0 : n; + zs->avail_in = n; } - if (zs->avail_in == 0 && (zs->total_in == 0 || stream->total_in == zs->total_in)) - return Z_STREAM_END; + if (zs->avail_in == 0 && zs->total_in == 0) + return 0; status = inflate (stream->stream, Z_SYNC_FLUSH); if (status == Z_STREAM_END) { stream->eof = TRUE; break; + } else if (status == Z_BUF_ERROR && stream->total_in == zs->total_in) { + stream->eof = TRUE; + break; } else if (status != Z_OK) { return status; }