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();
}
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
while ( data->state )
{
#if wxUSE_STREAMS && !defined(__WXWINCE__)
- bufOut.Update();
- bufErr.Update();
+ if ( !bufOut.Update() && !bufErr.Update() )
#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();
#if HAS_PIPE_INPUT_STREAM
bool hasIO = false;
- if ( execData.bufOut )
- {
- execData.bufOut->Update();
+ if ( execData.bufOut && execData.bufOut->Update() )
hasIO = true;
- }
- if ( execData.bufErr )
- {
- execData.bufErr->Update();
+ if ( execData.bufErr && execData.bufErr->Update() )
hasIO = true;
- }
return hasIO;
#else // !HAS_PIPE_INPUT_STREAM