// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "zstream.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
break;
case Z_STREAM_END:
- // Unread any data taken from past the end of the deflate stream, so that
- // any additional data can be read from the underlying stream (the crc
- // in a gzip for example)
- if (m_inflate->avail_in) {
- m_parent_i_stream->Ungetch(m_inflate->next_in, m_inflate->avail_in);
- m_inflate->avail_in = 0;
+ if (m_inflate->avail_out) {
+ // Unread any data taken from past the end of the deflate stream, so that
+ // any additional data can be read from the underlying stream (the crc
+ // in a gzip for example)
+ if (m_inflate->avail_in) {
+ m_parent_i_stream->Reset();
+ m_parent_i_stream->Ungetch(m_inflate->next_in, m_inflate->avail_in);
+ m_inflate->avail_in = 0;
+ }
+ m_lasterror = wxSTREAM_EOF;
}
- m_lasterror = wxSTREAM_EOF;
break;
case Z_BUF_ERROR:
wxASSERT_MSG(m_deflate && m_z_buffer, wxT("Deflate stream not open"));
if (!m_deflate || !m_z_buffer)
+ {
+ // notice that this will make IsOk() test just below return false
m_lasterror = wxSTREAM_WRITE_ERROR;
+ }
+
if (!IsOk() || !size)
return 0;