Corrected a couple problems in wxStreamBuffer that show up when

reading from a wxMemoryStream


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17977 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2002-11-27 02:00:23 +00:00
parent fddf5d878a
commit d5c363173a

View File

@@ -58,7 +58,7 @@
void wxStreamBuffer::SetError(wxStreamError err) void wxStreamBuffer::SetError(wxStreamError err)
{ {
if ( m_stream->m_lasterror == wxSTREAM_NO_ERROR ) if ( m_stream && m_stream->m_lasterror == wxSTREAM_NO_ERROR )
m_stream->m_lasterror = err; m_stream->m_lasterror = err;
} }
@@ -198,7 +198,9 @@ bool wxStreamBuffer::FillBuffer()
{ {
wxInputStream *inStream = GetInputStream(); wxInputStream *inStream = GetInputStream();
wxCHECK_MSG( inStream, FALSE, _T("should have a stream in wxStreamBuffer") ); // It's legal to have no stream, so we shouldn't don't about it just return FALSE
if ( !inStream )
return FALSE;
size_t count = inStream->OnSysRead(m_buffer_start, m_buffer_size); size_t count = inStream->OnSysRead(m_buffer_start, m_buffer_size);
if ( !count ) if ( !count )
@@ -259,7 +261,7 @@ void wxStreamBuffer::GetFromBuffer(void *buffer, size_t size)
void wxStreamBuffer::PutToBuffer(const void *buffer, size_t size) void wxStreamBuffer::PutToBuffer(const void *buffer, size_t size)
{ {
size_t left = GetBytesLeft(); size_t left = GetBytesLeft();
if ( size > left ) if ( size > left )
{ {
if ( m_fixed ) if ( m_fixed )
@@ -451,7 +453,7 @@ size_t wxStreamBuffer::Write(const void *buffer, size_t size)
// lasterror is reset before all new IO calls // lasterror is reset before all new IO calls
m_stream->Reset(); m_stream->Reset();
} }
size_t ret = 0; size_t ret = 0;
if ( !HasBuffer() && m_fixed ) if ( !HasBuffer() && m_fixed )
@@ -479,7 +481,7 @@ size_t wxStreamBuffer::Write(const void *buffer, size_t size)
// //
// FIXME: fine, but if it fails we should (re)try writing it by // FIXME: fine, but if it fails we should (re)try writing it by
// chunks as this will (hopefully) always work (VZ) // chunks as this will (hopefully) always work (VZ)
if ( size > left && m_fixed ) if ( size > left && m_fixed )
{ {
PutToBuffer(buffer, left); PutToBuffer(buffer, left);
@@ -510,7 +512,7 @@ size_t wxStreamBuffer::Write(const void *buffer, size_t size)
// i am not entirely sure what we do this for // i am not entirely sure what we do this for
m_stream->m_lastcount = ret; m_stream->m_lastcount = ret;
} }
return ret; return ret;
} }
@@ -736,7 +738,7 @@ size_t wxInputStream::GetWBack(void *buf, size_t size)
toget = size; toget = size;
} }
// copy the data from the cache // copy the data from the cache
memcpy(buf, m_wback + m_wbackcur, toget); memcpy(buf, m_wback + m_wbackcur, toget);
m_wbackcur += toget; m_wbackcur += toget;
@@ -871,11 +873,11 @@ off_t wxInputStream::SeekI(off_t pos, wxSeekMode mode)
buffer if possible, but is it really needed? It would only work buffer if possible, but is it really needed? It would only work
when seeking in wxFromCurrent mode, else it would invalidate when seeking in wxFromCurrent mode, else it would invalidate
anyway... */ anyway... */
if (m_wback) if (m_wback)
{ {
wxLogDebug( wxT("Seeking in stream which has data written back to it.") ); wxLogDebug( wxT("Seeking in stream which has data written back to it.") );
free(m_wback); free(m_wback);
m_wback = NULL; m_wback = NULL;
m_wbacksize = 0; m_wbacksize = 0;
@@ -1108,13 +1110,13 @@ off_t wxBufferedInputStream::SeekI(off_t pos, wxSeekMode mode)
if (m_wback) if (m_wback)
{ {
wxLogDebug( wxT("Seeking in stream which has data written back to it.") ); wxLogDebug( wxT("Seeking in stream which has data written back to it.") );
free(m_wback); free(m_wback);
m_wback = NULL; m_wback = NULL;
m_wbacksize = 0; m_wbacksize = 0;
m_wbackcur = 0; m_wbackcur = 0;
} }
return m_i_streambuf->Seek(pos, mode); return m_i_streambuf->Seek(pos, mode);
} }
@@ -1124,7 +1126,7 @@ off_t wxBufferedInputStream::TellI() const
if (pos != wxInvalidOffset) if (pos != wxInvalidOffset)
pos -= (m_wbacksize - m_wbackcur); pos -= (m_wbacksize - m_wbackcur);
return pos; return pos;
} }