wxStreamBuffer::wxStreamBuffer(wxStreamBase& stream, BufMode mode)
{
+ Init();
+
m_stream = &stream;
m_mode = mode;
m_flushable = TRUE;
m_destroystream = FALSE;
- m_destroybuf = FALSE;
}
wxStreamBuffer::wxStreamBuffer(BufMode mode)
{
+ Init();
+
m_stream = new wxStreamBase;
m_mode = mode;
m_flushable = FALSE;
m_destroystream = TRUE;
- m_destroybuf = FALSE;
}
wxStreamBuffer::wxStreamBuffer(const wxStreamBuffer& buffer)
m_buffer_size = len;
// if we own it, we free it
- m_destroybuf = !takeOwnership;
+ m_destroybuf = takeOwnership;
ResetBuffer();
}
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;
}
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;
}