]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/stream.cpp
TRUE, not true; FALSE not false
[wxWidgets.git] / src / common / stream.cpp
index 957dd933fec1d796cb64a5959c8d08e8d33b81ef..a1d8cb04ccc4f6a2680bd3bb417e1c7f7a7bfb29 100644 (file)
@@ -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;
 }