]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/execcmn.cpp
Make code reading BMP files more robust.
[wxWidgets.git] / src / common / execcmn.cpp
index a2828420905a9efc04705907ca2a079a96245340..1d23ed6f1cb35f291cbcc525aa4e238341e49042 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        common/wxexec.cpp
+// Name:        src/common/execcmn.cpp
 // Purpose:     defines wxStreamTempInputBuffer which is used by Unix and MSW
 //              implementations of wxExecute; this file is only used by the
 //              library and never by the user code
@@ -52,7 +52,9 @@ public:
     void Init(wxPipeInputStream *stream);
 
     // check for input on our stream and cache it in our buffer if any
-    void Update();
+    //
+    // return true if anything was done
+    bool Update();
 
     ~wxStreamTempInputBuffer();
 
@@ -66,7 +68,7 @@ private:
     // the size of the buffer
     size_t m_size;
 
-    DECLARE_NO_COPY_CLASS(wxStreamTempInputBuffer)
+    wxDECLARE_NO_COPY_CLASS(wxStreamTempInputBuffer);
 };
 
 inline wxStreamTempInputBuffer::wxStreamTempInputBuffer()
@@ -82,27 +84,32 @@ inline void wxStreamTempInputBuffer::Init(wxPipeInputStream *stream)
 }
 
 inline
-void wxStreamTempInputBuffer::Update()
+bool wxStreamTempInputBuffer::Update()
 {
-    if ( m_stream && m_stream->CanRead() )
+    if ( !m_stream || !m_stream->CanRead() )
+        return false;
+
+    // realloc in blocks of 4Kb: this is the default (and minimal) buffer
+    // size of the Unix pipes so it should be the optimal step
+    //
+    // NB: don't use "static int" in this inline function, some compilers
+    //     (e.g. IBM xlC) don't like it
+    enum { incSize = 4096 };
+
+    void *buf = realloc(m_buffer, m_size + incSize);
+    if ( !buf )
     {
-        // realloc in blocks of 4Kb: this is the default (and minimal) buffer
-        // size of the Unix pipes so it should be the optimal step
-        static const size_t incSize = 4096;
-
-        void *buf = realloc(m_buffer, m_size + incSize);
-        if ( !buf )
-        {
-            // don't read any more, we don't have enough memory to do it
-            m_stream = NULL;
-        }
-        else // got memory for the buffer
-        {
-            m_buffer = buf;
-            m_stream->Read((char *)m_buffer + m_size, incSize);
-            m_size += m_stream->LastRead();
-        }
+        // don't read any more, we don't have enough memory to do it
+        m_stream = NULL;
     }
+    else // got memory for the buffer
+    {
+        m_buffer = buf;
+        m_stream->Read((char *)m_buffer + m_size, incSize);
+        m_size += m_stream->LastRead();
+    }
+
+    return true;
 }
 
 inline