X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/42a3aedbcee394eba28bc8bd1e9400f1efc42ef8..f13b39c0c3064fb073276370488161ca194839d4:/src/common/stream.cpp diff --git a/src/common/stream.cpp b/src/common/stream.cpp index 957dd933fe..a1d8cb04cc 100644 --- a/src/common/stream.cpp +++ b/src/common/stream.cpp @@ -795,17 +795,30 @@ char wxInputStream::GetC() wxInputStream& wxInputStream::Read(void *buf, size_t size) { - size_t retsize = GetWBack(buf, size); - if (retsize == size) + char *p = (char *)buf; + m_lastcount = 0; + + size_t read = GetWBack(buf, size); + for ( ;; ) { - m_lastcount = size; - m_lasterror = wxStream_NOERROR; - return *this; + size -= read; + m_lastcount += read; + p += read; + + if ( !size ) + { + // we read the requested amount of data + break; + } + + read = OnSysRead(buf, size); + if ( !read ) + { + // no more data available + break; + } } - size -= retsize; - buf = (char *)buf + retsize; - m_lastcount = OnSysRead(buf, size) + retsize; return *this; }