Fixed wxInputStream::Ungetch behaviour so that if you
a) unget a buffer (AAABBB) b) read some data (AAA) c) unget a second buffer (CCC) it works OK now (you will get CCCBBB, instead of CCCAAABBB as before) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4870 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -494,23 +494,30 @@ wxInputStream::~wxInputStream()
|
|||||||
char *wxInputStream::AllocSpaceWBack(size_t needed_size)
|
char *wxInputStream::AllocSpaceWBack(size_t needed_size)
|
||||||
{
|
{
|
||||||
char *temp_b;
|
char *temp_b;
|
||||||
size_t old_size;
|
size_t toget;
|
||||||
|
|
||||||
old_size = m_wbacksize;
|
/* get number of bytes left from previous wback buffer */
|
||||||
m_wbacksize += needed_size;
|
toget = m_wbacksize - m_wbackcur;
|
||||||
|
|
||||||
if (!m_wback)
|
/* allocate a buffer large enough to hold prev + new data */
|
||||||
temp_b = (char *)malloc(m_wbacksize);
|
temp_b = (char *) malloc(needed_size + toget);
|
||||||
else
|
|
||||||
temp_b = (char *)realloc(m_wback, m_wbacksize);
|
|
||||||
|
|
||||||
if (!temp_b)
|
if (!temp_b)
|
||||||
return (char*)NULL;
|
return NULL;
|
||||||
m_wback = temp_b;
|
|
||||||
|
|
||||||
memmove(m_wback+needed_size, m_wback, old_size);
|
/* copy previous data (and free old buffer) if needed */
|
||||||
|
if (m_wback)
|
||||||
return (char *)(m_wback);
|
{
|
||||||
|
memmove(temp_b + needed_size, m_wback + m_wbackcur, toget);
|
||||||
|
free(m_wback);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* done */
|
||||||
|
m_wback = temp_b;
|
||||||
|
m_wbackcur = 0;
|
||||||
|
m_wbacksize = needed_size + toget;
|
||||||
|
|
||||||
|
return (char *) m_wback;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t wxInputStream::GetWBack(char *buf, size_t bsize)
|
size_t wxInputStream::GetWBack(char *buf, size_t bsize)
|
||||||
@@ -581,6 +588,7 @@ wxInputStream& wxInputStream::Read(void *buffer, size_t size)
|
|||||||
size -= retsize;
|
size -= retsize;
|
||||||
buf += retsize;
|
buf += retsize;
|
||||||
|
|
||||||
|
// GRG: shouldn't we also add retsize to m_lastcount here?
|
||||||
m_lastcount = OnSysRead(buf, size);
|
m_lastcount = OnSysRead(buf, size);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user