X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5f62a0b2db198609b45dec622a018dae37008e..08670ea85abf4b4946a9ce64971b591d7b1ee30b:/src/common/execcmn.cpp diff --git a/src/common/execcmn.cpp b/src/common/execcmn.cpp index 9e9012f244..1d23ed6f1c 100644 --- a/src/common/execcmn.cpp +++ b/src/common/execcmn.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// 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 @@ -16,7 +16,7 @@ // 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 // ---------------------------------------------------------------------------- @@ -52,7 +52,9 @@ public: 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(); @@ -65,6 +67,8 @@ private: // the size of the buffer size_t m_size; + + wxDECLARE_NO_COPY_CLASS(wxStreamTempInputBuffer); }; inline wxStreamTempInputBuffer::wxStreamTempInputBuffer() @@ -79,29 +83,36 @@ inline void wxStreamTempInputBuffer::Init(wxPipeInputStream *stream) 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 )