///////////////////////////////////////////////////////////////////////////////
-// 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
// Created: 20.08.02
// RCS-ID: $Id$
// Copyright: (c) 2002 Vadim Zeitlin <vadim@wxwindows.org>
-// Licence: wxWidgets licence
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_WXEXEC_CPP_
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();
// the size of the buffer
size_t m_size;
- DECLARE_NO_COPY_CLASS(wxStreamTempInputBuffer)
+ wxDECLARE_NO_COPY_CLASS(wxStreamTempInputBuffer);
};
inline wxStreamTempInputBuffer::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
- 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