X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4cb0e8d05cadea6be3a7bd93f1fea9a9e0df95f0..64ea838d8f4d1853b7d850db93ee565e901d099a:/src/common/txtstrm.cpp diff --git a/src/common/txtstrm.cpp b/src/common/txtstrm.cpp index 9f9669faa1..7ae75f5b76 100644 --- a/src/common/txtstrm.cpp +++ b/src/common/txtstrm.cpp @@ -75,11 +75,35 @@ wxChar wxTextInputStream::NextChar() if(m_input.LastRead() <= 0) return wxEOT; - if ( m_conv->ToWChar(wbuf, WXSIZEOF(wbuf), m_lastBytes, inlen + 1) - == 1 ) - return wbuf[0]; + switch ( m_conv->ToWChar(wbuf, WXSIZEOF(wbuf), m_lastBytes, inlen + 1) ) + { + case 0: + // this is a bug in converter object as it should either fail + // or decode non-empty string to something non-empty + wxFAIL_MSG("ToWChar() can't return 0 for non-empty input"); + break; + + case wxCONV_FAILED: + // the buffer probably doesn't contain enough bytes to decode + // as a complete character, try with more bytes + break; + + default: + // if we couldn't decode a single character during the last + // loop iteration we shouldn't be able to decode 2 or more of + // them with an extra single byte, something fishy is going on + wxFAIL_MSG("unexpected decoding result"); + // fall through nevertheless and return at least something + + case 1: + // we finally decoded a character + return wbuf[0]; + } } - // there should be no encoding which requires more than nine bytes for one character... + + // there should be no encoding which requires more than nine bytes for one + // character so something must be wrong with our conversion but we have no + // way to signal it from here return wxEOT; #else m_lastBytes[0] = m_input.GetC(); @@ -312,7 +336,7 @@ wxTextOutputStream::wxTextOutputStream(wxOutputStream& s, wxEOL mode) m_mode = mode; if (m_mode == wxEOL_NATIVE) { -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__WXPM__) m_mode = wxEOL_DOS; #else m_mode = wxEOL_UNIX; @@ -332,7 +356,7 @@ void wxTextOutputStream::SetMode(wxEOL mode) m_mode = mode; if (m_mode == wxEOL_NATIVE) { -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__WXPM__) m_mode = wxEOL_DOS; #else m_mode = wxEOL_UNIX;