X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e2478fde622a16d25c66690af353dfdc37e7b582..66c2bf7b1d9326fb650acfaae22ec50528cfbf7c:/include/wx/unix/pipe.h?ds=sidebyside diff --git a/include/wx/unix/pipe.h b/include/wx/unix/pipe.h index a142b752a9..e8e2d427cb 100644 --- a/include/wx/unix/pipe.h +++ b/include/wx/unix/pipe.h @@ -4,8 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 24.06.2003 (extracted from src/unix/utilsunx.cpp) -// RCS-ID: $Id$ -// Copyright: (c) 2003 Vadim Zeitlin +// Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -13,6 +12,10 @@ #define _WX_UNIX_PIPE_H_ #include +#include + +#include "wx/log.h" +#include "wx/intl.h" // ---------------------------------------------------------------------------- // wxPipe: this class encapsulates pipe() system call @@ -43,31 +46,32 @@ public: { wxLogSysError(_("Pipe creation failed")); - return FALSE; + return false; } - return TRUE; + return true; + } + + // switch the given end of the pipe to non-blocking IO + bool MakeNonBlocking(Direction which) + { + const int flags = fcntl(m_fds[which], F_GETFL, 0); + if ( flags == -1 ) + return false; + + return fcntl(m_fds[which], F_SETFL, flags | O_NONBLOCK) == 0; } // return TRUE if we were created successfully bool IsOk() const { return m_fds[Read] != INVALID_FD; } // return the descriptor for one of the pipe ends - int operator[](Direction which) const - { - wxASSERT_MSG( which >= 0 && (size_t)which < WXSIZEOF(m_fds), - _T("invalid pipe index") ); - - return m_fds[which]; - } + int operator[](Direction which) const { return m_fds[which]; } // detach a descriptor, meaning that the pipe dtor won't close it, and // return it int Detach(Direction which) { - wxASSERT_MSG( which >= 0 && (size_t)which < WXSIZEOF(m_fds), - _T("invalid pipe index") ); - int fd = m_fds[which]; m_fds[which] = INVALID_FD; @@ -80,7 +84,10 @@ public: for ( size_t n = 0; n < WXSIZEOF(m_fds); n++ ) { if ( m_fds[n] != INVALID_FD ) + { close(m_fds[n]); + m_fds[n] = INVALID_FD; + } } }