]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/execcmn.cpp
applying patch, fixes #10523
[wxWidgets.git] / src / common / execcmn.cpp
index a2828420905a9efc04705907ca2a079a96245340..275134429507ba2d92420f9f6a3996285df9e087 100644 (file)
@@ -52,7 +52,9 @@ public:
     void Init(wxPipeInputStream *stream);
 
     // check for input on our stream and cache it in our buffer if any
     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();
 
 
     ~wxStreamTempInputBuffer();
 
@@ -66,7 +68,7 @@ private:
     // the size of the buffer
     size_t m_size;
 
     // the size of the buffer
     size_t m_size;
 
-    DECLARE_NO_COPY_CLASS(wxStreamTempInputBuffer)
+    wxDECLARE_NO_COPY_CLASS(wxStreamTempInputBuffer);
 };
 
 inline wxStreamTempInputBuffer::wxStreamTempInputBuffer()
 };
 
 inline wxStreamTempInputBuffer::wxStreamTempInputBuffer()
@@ -82,27 +84,32 @@ inline void wxStreamTempInputBuffer::Init(wxPipeInputStream *stream)
 }
 
 inline
 }
 
 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
 }
 
 inline