X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8f0ff178513f59471bfce85cf6d7a78f4f4818ab..37d0e9f60320b0858ead5e2556693f4c5404dc0b:/src/common/stream.cpp diff --git a/src/common/stream.cpp b/src/common/stream.cpp index 62a8e98e7d..347b46ee8b 100644 --- a/src/common/stream.cpp +++ b/src/common/stream.cpp @@ -376,14 +376,14 @@ size_t wxStreamBuffer::Read(void *buffer, size_t size) if ( m_stream ) m_stream->Reset(); - size_t read; + size_t readBytes; if ( !HasBuffer() ) { wxInputStream *inStream = GetInputStream(); wxCHECK_MSG( inStream, 0, _T("should have a stream in wxStreamBuffer") ); - read = inStream->OnSysRead(buffer, size); + readBytes = inStream->OnSysRead(buffer, size); } else // we have a buffer, use it { @@ -414,13 +414,13 @@ size_t wxStreamBuffer::Read(void *buffer, size_t size) } } - read = orig_size - size; + readBytes = orig_size - size; } if ( m_stream ) - m_stream->m_lastcount = read; + m_stream->m_lastcount = readBytes; - return read; + return readBytes; } // this should really be called "Copy()" @@ -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); @@ -580,7 +580,9 @@ wxFileOffset wxStreamBuffer::Seek(wxFileOffset 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 @@ wxFileOffset wxStreamBuffer::Seek(wxFileOffset 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; } @@ -673,6 +677,20 @@ 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 // ---------------------------------------------------------------------------- @@ -980,18 +998,22 @@ size_t wxCountingOutputStream::OnSysWrite(const void *WXUNUSED(buffer), 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: @@ -999,6 +1021,8 @@ wxFileOffset wxCountingOutputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode return wxInvalidOffset; } + m_currentPos = new_pos; + if (m_currentPos > m_lastcount) m_lastcount = m_currentPos; @@ -1255,5 +1279,4 @@ wxOutputStream& wxEndL(wxOutputStream& stream) return stream.Write(eol, wxStrlen(eol)); } -#endif - // wxUSE_STREAMS +#endif // wxUSE_STREAMS