X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/47fc03d21ab5b2d88959b6650a0151fb2c241c30..29149a64916d6fdc53e445adca9ef83bc58fb6c3:/src/common/stream.cpp?ds=sidebyside diff --git a/src/common/stream.cpp b/src/common/stream.cpp index 99baaa5634..9763842c4a 100644 --- a/src/common/stream.cpp +++ b/src/common/stream.cpp @@ -81,6 +81,8 @@ void wxStreamBuffer::Init() wxStreamBuffer::wxStreamBuffer(wxStreamBase& stream, BufMode mode) { + Init(); + m_stream = &stream; m_mode = mode; @@ -90,6 +92,8 @@ wxStreamBuffer::wxStreamBuffer(wxStreamBase& stream, BufMode mode) wxStreamBuffer::wxStreamBuffer(BufMode mode) { + Init(); + m_stream = new wxStreamBase; m_mode = mode; @@ -161,7 +165,7 @@ void wxStreamBuffer::SetBufferIO(void *start, m_buffer_size = len; // if we own it, we free it - m_destroybuf = !takeOwnership; + m_destroybuf = takeOwnership; ResetBuffer(); } @@ -627,6 +631,16 @@ wxStreamBase::~wxStreamBase() { } +off_t wxStreamBase::OnSysSeek(off_t WXUNUSED(seek), wxSeekMode WXUNUSED(mode)) +{ + return wxInvalidOffset; +} + +off_t wxStreamBase::OnSysTell() const +{ + return wxInvalidOffset; +} + // ---------------------------------------------------------------------------- // wxInputStream // ---------------------------------------------------------------------------- @@ -655,7 +669,12 @@ bool wxInputStream::Eof() const char c; self->Read(&c, 1); - if ( GetLastError() == wxSTREAM_EOF ) + + // some streams can know that they're at EOF before actually trying to + // read beyond the end of stream (e.g. files) while others have no way of + // knowing it, so to provide the same behaviour in all cases we only + // return TRUE from here if the character really couldn't be read + if ( !self->LastRead() && GetLastError() == wxSTREAM_EOF ) { return TRUE; } @@ -1010,7 +1029,8 @@ wxBufferedInputStream::wxBufferedInputStream(wxInputStream& s, wxBufferedInputStream::~wxBufferedInputStream() { - m_parent_i_stream->SeekI(-m_i_streambuf->GetBytesLeft(), wxFromCurrent); + m_parent_i_stream->SeekI(-(off_t)m_i_streambuf->GetBytesLeft(), + wxFromCurrent); delete m_i_streambuf; }