///////////////////////////////////////////////////////////////////////////////
-// 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
// this file should never be compiled directly, just included by other code
#ifndef _WX_USED_BY_WXEXECUTE_
- #error "Please don't exclude this file from build!"
+ #error "You should never directly build this file!"
#endif
// ----------------------------------------------------------------------------
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;
+
+ wxDECLARE_NO_COPY_CLASS(wxStreamTempInputBuffer);
};
inline wxStreamTempInputBuffer::wxStreamTempInputBuffer()
m_stream = stream;
}
-void wxStreamTempInputBuffer::Update()
+inline
+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 )
+ {
+ // don't read any more, we don't have enough memory to do it
+ m_stream = NULL;
+ }
+ else // got memory for the buffer
{
- // 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();
- }
+ m_buffer = buf;
+ m_stream->Read((char *)m_buffer + m_size, incSize);
+ m_size += m_stream->LastRead();
}
+
+ return true;
}
+inline
wxStreamTempInputBuffer::~wxStreamTempInputBuffer()
{
if ( m_buffer )