]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/execcmn.cpp
Make code reading BMP files more robust.
[wxWidgets.git] / src / common / execcmn.cpp
index f89e061b2c241918751a1b5cc83bd4a7e0c102f4..1d23ed6f1cb35f291cbcc525aa4e238341e49042 100644 (file)
@@ -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->IsAvailable() )
+    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 )
@@ -111,24 +122,5 @@ wxStreamTempInputBuffer::~wxStreamTempInputBuffer()
     }
 }
 
-// ----------------------------------------------------------------------------
-// platform-dependent parts of wxProcess implementation included
-// ----------------------------------------------------------------------------
-
-bool wxProcess::IsInputOpened() const
-{
-    return m_inputStream && ((wxPipeInputStream *)m_inputStream)->IsOpened();
-}
-
-bool wxProcess::IsInputAvailable() const
-{
-    return m_inputStream && ((wxPipeInputStream *)m_inputStream)->IsAvailable();
-}
-
-bool wxProcess::IsErrorAvailable() const
-{
-    return m_errorStream && ((wxPipeInputStream *)m_errorStream)->IsAvailable();
-}
-
 #endif // _WX_WXEXEC_CPP_