wxMemoryInputStream(const wxMemoryOutputStream& stream);
virtual ~wxMemoryInputStream();
virtual wxFileOffset GetLength() const { return m_length; }
- virtual bool Eof() const;
virtual bool IsSeekable() const { return true; }
char Peek();
return buf[pos];
}
-bool wxMemoryInputStream::Eof() const
-{
- return !m_i_streambuf->GetBytesLeft();
-}
-
size_t wxMemoryInputStream::OnSysRead(void *buffer, size_t nbytes)
{
size_t pos = m_i_streambuf->GetIntPosition();
count = m_parent_i_stream->Read(buffer, count).LastRead();
m_pos += count;
- if (m_pos == m_len)
+ if (m_pos == m_len && count < size)
m_lasterror = wxSTREAM_EOF;
else if (!*m_parent_i_stream)
m_lasterror = wxSTREAM_READ_ERROR;
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->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: