]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/zlibcompressed.cpp
The EOF logic wasn't quite correct
[libs/core.git] / source / io / zlibcompressed.cpp
index ea5e8030142f5fcfb90b72171b268ed1cdba3b7b..90b54a214bed69ce272952e3ebad8ca05e6ff1d4 100644 (file)
@@ -42,6 +42,7 @@ ZlibCompressed::ZlibCompressed(Base &b, unsigned level):
        buffer_size(1024),
        in_buffer(0),
        out_buffer(0),
+       stream_end(false),
        priv(0)
 {
 #ifdef WITH_ZLIB
@@ -219,7 +220,7 @@ unsigned ZlibCompressed::do_read(char *data, unsigned size)
                {
                        int ret = inflate(&priv->stream, Z_NO_FLUSH);
                        if(ret==Z_STREAM_END)
-                               set_eof();
+                               stream_end = true;
                        else if(ret!=Z_OK)
                                throw zlib_error("inflate", ret);
                        need_more_input = (priv->stream.next_out==out_buffer);
@@ -227,7 +228,7 @@ unsigned ZlibCompressed::do_read(char *data, unsigned size)
 
                if(need_more_input)
                {
-                       if(eof_flag)
+                       if(stream_end)
                                break;
 
                        if(priv->stream.next_in>in_buffer)
@@ -237,9 +238,12 @@ unsigned ZlibCompressed::do_read(char *data, unsigned size)
                        unsigned len = below.read(reinterpret_cast<char *>(priv->stream.next_in), in_buffer+buffer_size-priv->stream.next_in);
                        priv->stream.avail_in += len;
                        if(!len && below.eof())
-                               set_eof();
+                               stream_end = true;
                }
        }
+
+       if(size>0 && processed==0 && stream_end)
+               set_eof();
 #else
        (void)data;
        (void)size;