X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6292dad031833dfc67c9cf0e6e6be455badc2537..33754c4d83c59b7523a6da0c4fb21079cb60301c:/src/common/stream.cpp?ds=sidebyside diff --git a/src/common/stream.cpp b/src/common/stream.cpp index 0a6991a42f..a65c6154d8 100644 --- a/src/common/stream.cpp +++ b/src/common/stream.cpp @@ -39,6 +39,7 @@ #include "wx/stream.h" #include "wx/datstrm.h" #include "wx/objstrm.h" +#include "wx/textfile.h" // ---------------------------------------------------------------------------- // constants @@ -81,22 +82,31 @@ void wxStreamBuffer::Init() 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) { - m_stream = new wxStreamBase; + Init(); + + wxASSERT_MSG(mode != read_write, wxT("you have to use the other ctor for read_write mode") ); + if ( mode == read ) + m_stream = new wxInputStream; + else if ( mode == write) + m_stream = new wxOutputStream; + else + m_stream = NULL; + m_mode = mode; m_flushable = FALSE; m_destroystream = TRUE; - m_destroybuf = FALSE; } wxStreamBuffer::wxStreamBuffer(const wxStreamBuffer& buffer) @@ -163,7 +173,7 @@ void wxStreamBuffer::SetBufferIO(void *start, m_buffer_size = len; // if we own it, we free it - m_destroybuf = !takeOwnership; + m_destroybuf = takeOwnership; ResetBuffer(); } @@ -667,7 +677,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; } @@ -1022,7 +1037,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; } @@ -1168,15 +1184,9 @@ void wxBufferedOutputStream::SetOutputStreamBuffer(wxStreamBuffer *buffer) wxOutputStream& wxEndL(wxOutputStream& stream) { -#ifdef __MSW__ - return stream.Write("\r\n", 2); -#else -#ifdef __WXMAC__ - return stream.Write("\r", 1); -#else - return stream.Write("\n", 1); -#endif -#endif + static const wxChar *eol = wxTextFile::GetEOL(); + + return stream.Write(eol, wxStrlen(eol)); } #endif