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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user