From 8e50d1add66530dda0e9e42906e25cbe6f8f3449 Mon Sep 17 00:00:00 2001 From: Michael Wetherell Date: Wed, 30 Nov 2005 12:41:48 +0000 Subject: [PATCH] Make Eof() consistent with other streams git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36298 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/mstream.h | 1 - src/common/mstream.cpp | 5 ----- src/common/zipstrm.cpp | 2 +- src/common/zstream.cpp | 16 +++++++++------- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/include/wx/mstream.h b/include/wx/mstream.h index d1b8a6230c..2857dc074d 100644 --- a/include/wx/mstream.h +++ b/include/wx/mstream.h @@ -27,7 +27,6 @@ public: 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(); diff --git a/src/common/mstream.cpp b/src/common/mstream.cpp index ce78979686..ab50d84386 100644 --- a/src/common/mstream.cpp +++ b/src/common/mstream.cpp @@ -88,11 +88,6 @@ char wxMemoryInputStream::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(); diff --git a/src/common/zipstrm.cpp b/src/common/zipstrm.cpp index 0eb50af0da..b39c285632 100644 --- a/src/common/zipstrm.cpp +++ b/src/common/zipstrm.cpp @@ -169,7 +169,7 @@ size_t wxStoredInputStream::OnSysRead(void *buffer, size_t size) 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; diff --git a/src/common/zstream.cpp b/src/common/zstream.cpp index bea30dce41..083ac372fb 100644 --- a/src/common/zstream.cpp +++ b/src/common/zstream.cpp @@ -131,14 +131,16 @@ size_t wxZlibInputStream::OnSysRead(void *buffer, size_t size) 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: -- 2.45.2