X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/50c549b98d8e61e19f59c61989af293bb58319f8..582699e1ac533e85ba62ae320c6e922ad1685bec:/src/common/ipcbase.cpp diff --git a/src/common/ipcbase.cpp b/src/common/ipcbase.cpp index 0de6f3b045..64c6c1f760 100644 --- a/src/common/ipcbase.cpp +++ b/src/common/ipcbase.cpp @@ -59,10 +59,57 @@ wxConnectionBase::wxConnectionBase(const wxConnectionBase& copy) } -wxConnectionBase::~wxConnectionBase(void) +wxConnectionBase::~wxConnectionBase() { - if ( m_deletebufferwhendone && m_buffer ) - delete m_buffer; + if ( m_deletebufferwhendone ) + delete [] m_buffer; +} + +/* 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 ) @@ -73,8 +120,7 @@ void *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; + delete [] m_buffer; m_buffer = new char[bytes]; m_buffersize = bytes; return m_buffer;