]> git.saurik.com Git - wxWidgets.git/commitdiff
return bool from wxStreamTempInputBuffer::Update() indicating if anything was done...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 22 Mar 2008 03:50:35 +0000 (03:50 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 22 Mar 2008 03:50:35 +0000 (03:50 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52678 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/execcmn.cpp
src/msw/utilsexc.cpp
src/unix/utilsunx.cpp

index a84c6d10f01b0587d27674cf8d89eec4eb71349b..61bb0e2d0493176158b0a840392323fb2d781277 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();
 
@@ -82,30 +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
-        //
-        // 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 )
-        {
-            // 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
index a675969f7e421166efbc93912afdb55eac0e66dc..456594d8342ed25c11d7306afd86f979e783baea 100644 (file)
@@ -987,13 +987,13 @@ long wxExecute(const wxString& cmd, int flags, wxProcess *handler)
     while ( data->state )
     {
 #if wxUSE_STREAMS && !defined(__WXWINCE__)
     while ( data->state )
     {
 #if wxUSE_STREAMS && !defined(__WXWINCE__)
-        bufOut.Update();
-        bufErr.Update();
+        if ( !bufOut.Update() && !bufErr.Update() )
 #endif // wxUSE_STREAMS
 #endif // wxUSE_STREAMS
-
-        // don't eat 100% of the CPU -- ugly but anything else requires
-        // real async IO which we don't have for the moment
-        ::Sleep(50);
+        {
+            // don't eat 100% of the CPU -- ugly but anything else requires
+            // real async IO which we don't have for the moment
+            ::Sleep(50);
+        }
 
         // we must process messages or we'd never get wxWM_PROC_TERMINATED
         traits->AlwaysYield();
 
         // we must process messages or we'd never get wxWM_PROC_TERMINATED
         traits->AlwaysYield();
index ea8645c270d7583f653c048485b2c581bf87a940..2db499dc9e22b609fa47f64f4a78282e8a9ebfdc 100644 (file)
@@ -1313,17 +1313,11 @@ bool wxAppTraits::CheckForRedirectedIO(wxExecuteData& execData)
 #if HAS_PIPE_INPUT_STREAM
     bool hasIO = false;
 
 #if HAS_PIPE_INPUT_STREAM
     bool hasIO = false;
 
-    if ( execData.bufOut )
-    {
-        execData.bufOut->Update();
+    if ( execData.bufOut && execData.bufOut->Update() )
         hasIO = true;
         hasIO = true;
-    }
 
 
-    if ( execData.bufErr )
-    {
-        execData.bufErr->Update();
+    if ( execData.bufErr && execData.bufErr->Update() )
         hasIO = true;
         hasIO = true;
-    }
 
     return hasIO;
 #else // !HAS_PIPE_INPUT_STREAM
 
     return hasIO;
 #else // !HAS_PIPE_INPUT_STREAM