X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5f62a0b2db198609b45dec622a018dae37008e..6fbf4a60fe7d1b293fabb200d43f4b8945fb522b:/src/common/stream.cpp diff --git a/src/common/stream.cpp b/src/common/stream.cpp index d5c5dd3318..babad3a110 100644 --- a/src/common/stream.cpp +++ b/src/common/stream.cpp @@ -7,7 +7,7 @@ // Created: 11/07/98 // RCS-ID: $Id$ // Copyright: (c) Guilhem Lavaux -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -18,7 +18,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "stream.h" #endif @@ -70,14 +70,14 @@ void wxStreamBuffer::InitBuffer() m_buffer_size = 0; // if we are going to allocate the buffer, we should free it later as well - m_destroybuf = TRUE; + m_destroybuf = true; } void wxStreamBuffer::Init() { InitBuffer(); - m_fixed = TRUE; + m_fixed = true; } wxStreamBuffer::wxStreamBuffer(BufMode mode) @@ -87,7 +87,7 @@ wxStreamBuffer::wxStreamBuffer(BufMode mode) m_stream = NULL; m_mode = mode; - m_flushable = FALSE; + m_flushable = false; } wxStreamBuffer::wxStreamBuffer(wxStreamBase& stream, BufMode mode) @@ -97,7 +97,7 @@ wxStreamBuffer::wxStreamBuffer(wxStreamBase& stream, BufMode mode) m_stream = &stream; m_mode = mode; - m_flushable = TRUE; + m_flushable = true; } wxStreamBuffer::wxStreamBuffer(const wxStreamBuffer& buffer) @@ -115,7 +115,7 @@ wxStreamBuffer::wxStreamBuffer(const wxStreamBuffer& buffer) m_flushable = buffer.m_flushable; m_stream = buffer.m_stream; m_mode = buffer.m_mode; - m_destroybuf = FALSE; + m_destroybuf = false; } void wxStreamBuffer::FreeBuffer() @@ -172,7 +172,7 @@ void wxStreamBuffer::SetBufferIO(size_t bufsize) if ( bufsize ) { - SetBufferIO(malloc(bufsize), bufsize, TRUE /* take ownership */); + SetBufferIO(malloc(bufsize), bufsize, true /* take ownership */); } else // no buffer size => no buffer { @@ -198,41 +198,41 @@ bool wxStreamBuffer::FillBuffer() { wxInputStream *inStream = GetInputStream(); - // It's legal to have no stream, so we don't complain about it just return FALSE + // It's legal to have no stream, so we don't complain about it just return false if ( !inStream ) - return FALSE; + return false; size_t count = inStream->OnSysRead(m_buffer_start, m_buffer_size); if ( !count ) - return FALSE; + return false; m_buffer_end = m_buffer_start + count; m_buffer_pos = m_buffer_start; - return TRUE; + return true; } // write the buffer contents to the stream (only for write buffers) bool wxStreamBuffer::FlushBuffer() { - wxCHECK_MSG( m_flushable, FALSE, _T("can't flush this buffer") ); + wxCHECK_MSG( m_flushable, false, _T("can't flush this buffer") ); // FIXME: what is this check for? (VZ) if ( m_buffer_pos == m_buffer_start ) - return FALSE; + return false; wxOutputStream *outStream = GetOutputStream(); - wxCHECK_MSG( outStream, FALSE, _T("should have a stream in wxStreamBuffer") ); + wxCHECK_MSG( outStream, false, _T("should have a stream in wxStreamBuffer") ); size_t current = m_buffer_pos - m_buffer_start; size_t count = outStream->OnSysWrite(m_buffer_start, current); if ( count != current ) - return FALSE; + return false; m_buffer_pos = m_buffer_start; - return TRUE; + return true; } size_t wxStreamBuffer::GetDataLeft() @@ -434,7 +434,7 @@ size_t wxStreamBuffer::Read(wxStreamBuffer *dbuf) do { - nRead = Read(dbuf, WXSIZEOF(buf)); + nRead = Read(buf, WXSIZEOF(buf)); if ( nRead ) { nRead = dbuf->Write(buf, nRead); @@ -454,7 +454,7 @@ size_t wxStreamBuffer::Write(const void *buffer, size_t size) m_stream->Reset(); } - size_t ret = 0; + size_t ret; if ( !HasBuffer() && m_fixed ) { @@ -551,11 +551,11 @@ size_t wxStreamBuffer::Write(wxStreamBuffer *sbuf) return total; } -off_t wxStreamBuffer::Seek(off_t pos, wxSeekMode mode) +wxFileOffset wxStreamBuffer::Seek(wxFileOffset pos, wxSeekMode mode) { - off_t ret_off, diff; + wxFileOffset ret_off, diff; - off_t last_access = GetLastAccess(); + wxFileOffset last_access = GetLastAccess(); if ( !m_flushable ) { @@ -580,7 +580,9 @@ off_t wxStreamBuffer::Seek(off_t pos, wxSeekMode mode) } if (diff < 0 || diff > last_access) return wxInvalidOffset; - SetIntPosition(diff); + size_t int_diff = (size_t)diff; + wxCHECK_MSG( (wxFileOffset)int_diff == diff, wxInvalidOffset, wxT("huge file not supported") ); + SetIntPosition(int_diff); return diff; } @@ -605,7 +607,9 @@ off_t wxStreamBuffer::Seek(off_t pos, wxSeekMode mode) } else { - SetIntPosition(diff); + size_t int_diff = (size_t)diff; + wxCHECK_MSG( (wxFileOffset)int_diff == diff, wxInvalidOffset, wxT("huge file not supported") ); + SetIntPosition(int_diff); return pos; } @@ -619,9 +623,9 @@ off_t wxStreamBuffer::Seek(off_t pos, wxSeekMode mode) return wxInvalidOffset; } -off_t wxStreamBuffer::Tell() const +wxFileOffset wxStreamBuffer::Tell() const { - off_t pos; + wxFileOffset pos; // ask the stream for position if we have a real one if ( m_stream ) @@ -657,16 +661,36 @@ wxStreamBase::~wxStreamBase() { } -off_t wxStreamBase::OnSysSeek(off_t WXUNUSED(seek), wxSeekMode WXUNUSED(mode)) +size_t wxStreamBase::GetSize() const +{ + wxFileOffset length = GetLength(); + return length == wxInvalidOffset ? 0 : (size_t)length; +} + +wxFileOffset wxStreamBase::OnSysSeek(wxFileOffset WXUNUSED(seek), wxSeekMode WXUNUSED(mode)) { return wxInvalidOffset; } -off_t wxStreamBase::OnSysTell() const +wxFileOffset wxStreamBase::OnSysTell() const { return wxInvalidOffset; } +#if WXWIN_COMPATIBILITY_2_2 + +wxStreamError wxStreamBase::LastError() const +{ + return m_lasterror; +} + +size_t wxStreamBase::StreamSize() const +{ + return GetSize(); +} + +#endif // WXWIN_COMPATIBILITY_2_2 + // ---------------------------------------------------------------------------- // wxInputStream // ---------------------------------------------------------------------------- @@ -767,7 +791,7 @@ size_t wxInputStream::Ungetch(const void *buf, size_t bufsize) if (!ptrback) return 0; - // Eof() shouldn't return TRUE any longer + // Eof() shouldn't return true any longer if ( m_lasterror == wxSTREAM_EOF ) m_lasterror = wxSTREAM_NO_ERROR; @@ -853,7 +877,7 @@ wxInputStream& wxInputStream::Read(wxOutputStream& stream_out) return *this; } -off_t wxInputStream::SeekI(off_t pos, wxSeekMode mode) +wxFileOffset wxInputStream::SeekI(wxFileOffset pos, wxSeekMode mode) { // RR: This code is duplicated in wxBufferedInputStream. This is // not really a good design, but buffered stream are different @@ -887,9 +911,9 @@ off_t wxInputStream::SeekI(off_t pos, wxSeekMode mode) return OnSysSeek(pos, mode); } -off_t wxInputStream::TellI() const +wxFileOffset wxInputStream::TellI() const { - off_t pos = OnSysTell(); + wxFileOffset pos = OnSysTell(); if (pos != wxInvalidOffset) pos -= (m_wbacksize - m_wbackcur); @@ -933,12 +957,12 @@ wxOutputStream& wxOutputStream::Write(wxInputStream& stream_in) return *this; } -off_t wxOutputStream::TellO() const +wxFileOffset wxOutputStream::TellO() const { return OnSysTell(); } -off_t wxOutputStream::SeekO(off_t pos, wxSeekMode mode) +wxFileOffset wxOutputStream::SeekO(wxFileOffset pos, wxSeekMode mode) { return OnSysSeek(pos, mode); } @@ -957,7 +981,7 @@ wxCountingOutputStream::wxCountingOutputStream () m_currentPos = 0; } -size_t wxCountingOutputStream::GetSize() const +wxFileOffset wxCountingOutputStream::GetLength() const { return m_lastcount; } @@ -972,20 +996,24 @@ size_t wxCountingOutputStream::OnSysWrite(const void *WXUNUSED(buffer), return m_currentPos; } -off_t wxCountingOutputStream::OnSysSeek(off_t pos, wxSeekMode mode) +wxFileOffset wxCountingOutputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode) { + ssize_t new_pos = (ssize_t)pos; + switch ( mode ) { case wxFromStart: - m_currentPos = pos; + wxCHECK_MSG( (wxFileOffset)new_pos == pos, wxInvalidOffset, wxT("huge position not supported") ); break; case wxFromEnd: - m_currentPos = m_lastcount + pos; + new_pos = m_lastcount + new_pos; + wxCHECK_MSG( (wxFileOffset)new_pos == (wxFileOffset)(m_lastcount + pos), wxInvalidOffset, wxT("huge position not supported") ); break; case wxFromCurrent: - m_currentPos += pos; + new_pos = m_currentPos + new_pos; + wxCHECK_MSG( (wxFileOffset)new_pos == (wxFileOffset)(m_currentPos + pos), wxInvalidOffset, wxT("huge position not supported") ); break; default: @@ -993,13 +1021,15 @@ off_t wxCountingOutputStream::OnSysSeek(off_t pos, wxSeekMode mode) return wxInvalidOffset; } + m_currentPos = new_pos; + if (m_currentPos > m_lastcount) m_lastcount = m_currentPos; return m_currentPos; } -off_t wxCountingOutputStream::OnSysTell() const +wxFileOffset wxCountingOutputStream::OnSysTell() const { return m_currentPos; } @@ -1063,7 +1093,7 @@ wxBufferedInputStream::wxBufferedInputStream(wxInputStream& s, wxBufferedInputStream::~wxBufferedInputStream() { - m_parent_i_stream->SeekI(-(off_t)m_i_streambuf->GetBytesLeft(), + m_parent_i_stream->SeekI(-(wxFileOffset)m_i_streambuf->GetBytesLeft(), wxFromCurrent); delete m_i_streambuf; @@ -1100,7 +1130,7 @@ wxInputStream& wxBufferedInputStream::Read(void *buf, size_t size) return *this; } -off_t wxBufferedInputStream::SeekI(off_t pos, wxSeekMode mode) +wxFileOffset wxBufferedInputStream::SeekI(wxFileOffset pos, wxSeekMode mode) { // RR: Look at wxInputStream for comments. @@ -1120,9 +1150,9 @@ off_t wxBufferedInputStream::SeekI(off_t pos, wxSeekMode mode) return m_i_streambuf->Seek(pos, mode); } -off_t wxBufferedInputStream::TellI() const +wxFileOffset wxBufferedInputStream::TellI() const { - off_t pos = m_i_streambuf->Tell(); + wxFileOffset pos = m_i_streambuf->Tell(); if (pos != wxInvalidOffset) pos -= (m_wbacksize - m_wbackcur); @@ -1135,12 +1165,12 @@ size_t wxBufferedInputStream::OnSysRead(void *buffer, size_t bufsize) return m_parent_i_stream->Read(buffer, bufsize).LastRead(); } -off_t wxBufferedInputStream::OnSysSeek(off_t seek, wxSeekMode mode) +wxFileOffset wxBufferedInputStream::OnSysSeek(wxFileOffset seek, wxSeekMode mode) { return m_parent_i_stream->SeekI(seek, mode); } -off_t wxBufferedInputStream::OnSysTell() const +wxFileOffset wxBufferedInputStream::OnSysTell() const { return m_parent_i_stream->TellI(); } @@ -1179,6 +1209,13 @@ wxBufferedOutputStream::~wxBufferedOutputStream() delete m_o_streambuf; } +bool wxBufferedOutputStream::Close() +{ + Sync(); + return IsOk(); +} + + wxOutputStream& wxBufferedOutputStream::Write(const void *buffer, size_t size) { m_lastcount = 0; @@ -1186,13 +1223,13 @@ wxOutputStream& wxBufferedOutputStream::Write(const void *buffer, size_t size) return *this; } -off_t wxBufferedOutputStream::SeekO(off_t pos, wxSeekMode mode) +wxFileOffset wxBufferedOutputStream::SeekO(wxFileOffset pos, wxSeekMode mode) { Sync(); return m_o_streambuf->Seek(pos, mode); } -off_t wxBufferedOutputStream::TellO() const +wxFileOffset wxBufferedOutputStream::TellO() const { return m_o_streambuf->Tell(); } @@ -1208,19 +1245,19 @@ size_t wxBufferedOutputStream::OnSysWrite(const void *buffer, size_t bufsize) return m_parent_o_stream->Write(buffer, bufsize).LastWrite(); } -off_t wxBufferedOutputStream::OnSysSeek(off_t seek, wxSeekMode mode) +wxFileOffset wxBufferedOutputStream::OnSysSeek(wxFileOffset seek, wxSeekMode mode) { return m_parent_o_stream->SeekO(seek, mode); } -off_t wxBufferedOutputStream::OnSysTell() const +wxFileOffset wxBufferedOutputStream::OnSysTell() const { return m_parent_o_stream->TellO(); } -size_t wxBufferedOutputStream::GetSize() const +wxFileOffset wxBufferedOutputStream::GetLength() const { - return m_parent_o_stream->GetSize() + m_o_streambuf->GetIntPosition(); + return m_parent_o_stream->GetLength() + m_o_streambuf->GetIntPosition(); } void wxBufferedOutputStream::SetOutputStreamBuffer(wxStreamBuffer *buffer)