#include "wx/stream.h"
#include "wx/datstrm.h"
#include "wx/objstrm.h"
+#include "wx/textfile.h"
// ----------------------------------------------------------------------------
// constants
wxStreamBuffer::wxStreamBuffer(wxStreamBase& stream, BufMode mode)
{
+ Init();
+
m_stream = &stream;
m_mode = mode;
wxStreamBuffer::wxStreamBuffer(BufMode mode)
{
+ Init();
+
m_stream = new wxStreamBase;
m_mode = mode;
m_buffer_size = len;
// if we own it, we free it
- m_destroybuf = !takeOwnership;
+ m_destroybuf = takeOwnership;
ResetBuffer();
}
{
}
+off_t wxStreamBase::OnSysSeek(off_t WXUNUSED(seek), wxSeekMode WXUNUSED(mode))
+{
+ return wxInvalidOffset;
+}
+
+off_t wxStreamBase::OnSysTell() const
+{
+ return wxInvalidOffset;
+}
+
// ----------------------------------------------------------------------------
// wxInputStream
// ----------------------------------------------------------------------------
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;
}
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