From 9a76510b8a38e5b76acc4b647684b87ec11efd0a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 29 Aug 2002 22:10:02 +0000 Subject: [PATCH] loop in wxInputStream::Read() while there is data to read git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16856 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/stream.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) 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; } -- 2.45.2