X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/01d0d0e57dc7c385a1a56294763b0e6486e65095..b404a8f3b072129c107c6d9a5e0f6f53cd34807b:/src/common/ipcbase.cpp?ds=inline diff --git a/src/common/ipcbase.cpp b/src/common/ipcbase.cpp index 7d74dca6ba..6f6c8c1629 100644 --- a/src/common/ipcbase.cpp +++ b/src/common/ipcbase.cpp @@ -1,75 +1,118 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: ipcbase.cpp +// Name: src/common/ipcbase.cpp // Purpose: IPC base classes // Author: Julian Smart // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "ipcbase.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #ifndef WX_PRECOMP -#include "wx/defs.h" #endif #include "wx/ipcbase.h" -IMPLEMENT_CLASS(wxServerBase, wxObject) -IMPLEMENT_CLASS(wxClientBase, wxObject) -IMPLEMENT_CLASS(wxConnectionBase, wxObject) +wxIMPLEMENT_ABSTRACT_CLASS(wxServerBase, wxObject) +wxIMPLEMENT_ABSTRACT_CLASS(wxClientBase, wxObject) +wxIMPLEMENT_ABSTRACT_CLASS(wxConnectionBase, wxObject) -wxConnectionBase::wxConnectionBase(wxChar *buffer, int size) - : m_connected(TRUE), - m_buffer(buffer), - m_buffersize(size), - m_deletebufferwhendone(FALSE) +wxConnectionBase::wxConnectionBase(void *buffer, size_t bytes) + : m_buffer((char *)buffer), + m_buffersize(bytes), + m_deletebufferwhendone(false), + m_connected(true) { - if ( buffer == (wxChar *)NULL ) + if ( buffer == NULL ) { // behave like next constructor m_buffersize = 0; - m_deletebufferwhendone = TRUE; + m_deletebufferwhendone = true; } } wxConnectionBase::wxConnectionBase() - : m_connected(TRUE), - m_buffer(NULL), + : m_buffer(NULL), m_buffersize(0), - m_deletebufferwhendone(TRUE) + m_deletebufferwhendone(true), + m_connected(true) { } -wxConnectionBase::wxConnectionBase(wxConnectionBase& copy) - : m_connected(copy.m_connected), +wxConnectionBase::wxConnectionBase(const wxConnectionBase& copy) + : wxObject(), m_buffer(copy.m_buffer), m_buffersize(copy.m_buffersize), - m_deletebufferwhendone(FALSE) + m_deletebufferwhendone(false), + m_connected(copy.m_connected) { // copy constructor would require ref-counted pointer to buffer - wxFAIL_MSG( _T("Copy constructor of wxConnectionBase not implemented") ); + wxFAIL_MSG( wxT("Copy constructor of wxConnectionBase not implemented") ); } -wxConnectionBase::~wxConnectionBase(void) +wxConnectionBase::~wxConnectionBase() { - if ( m_deletebufferwhendone && m_buffer ) - delete m_buffer; + if ( m_deletebufferwhendone ) + delete [] m_buffer; } -wxChar *wxConnectionBase::GetBufferAtLeast( size_t bytes ) +/* static */ +wxString wxConnectionBase::GetTextFromData(const void* data, + size_t size, + wxIPCFormat fmt) +{ + wxString s; + switch ( fmt ) + { + case wxIPC_TEXT: + // normally the string should be NUL-terminated and size should + // include the total size of the buffer, including NUL -- but don't + // crash (by trying to access (size_t)-1 bytes) if it doesn't + if ( size ) + size--; + + s = wxString(static_cast(data), size); + break; + +#if wxUSE_UNICODE + // TODO: we should handle both wxIPC_UTF16TEXT and wxIPC_UTF32TEXT here + // for inter-platform IPC + case wxIPC_UNICODETEXT: + wxASSERT_MSG( !(size % sizeof(wchar_t)), "invalid buffer size" ); + if ( size ) + { + size /= sizeof(wchar_t); + size--; + } + + s = wxString(static_cast(data), size); + break; + + case wxIPC_UTF8TEXT: + if ( size ) + size--; + + s = wxString::FromUTF8(static_cast(data), size); + break; +#endif // wxUSE_UNICODE + + default: + wxFAIL_MSG( "non-string IPC format in GetTextFromData()" ); + } + + return s; +} + +void *wxConnectionBase::GetBufferAtLeast( size_t bytes ) { if ( m_buffersize >= bytes ) return m_buffer; @@ -77,9 +120,8 @@ wxChar *wxConnectionBase::GetBufferAtLeast( size_t bytes ) { // need to resize buffer if ( m_deletebufferwhendone ) { // we're in charge of buffer, increase it - if ( m_buffer ) - delete m_buffer; - m_buffer = new wxChar[bytes]; + delete [] m_buffer; + m_buffer = new char[bytes]; m_buffersize = bytes; return m_buffer; } // user-supplied buffer, fail @@ -87,4 +129,3 @@ wxChar *wxConnectionBase::GetBufferAtLeast( size_t bytes ) return NULL; } } -