]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/txtstrm.cpp
Applied #15375 to stop event-sending in generic wxSpinCtrl ctor (eco)
[wxWidgets.git] / src / common / txtstrm.cpp
index 830bc985ba2f83b869e463466d57498cfaeb31df..9e3fa8a7934fba0e07fc0366c03363063807ab1f 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Guilhem Lavaux
 // Modified by:
 // Created:     28/06/98
-// RCS-ID:      $Id$
 // Copyright:   (c) Guilhem Lavaux
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -75,11 +74,35 @@ wxChar wxTextInputStream::NextChar()
         if(m_input.LastRead() <= 0)
             return wxEOT;
 
-        if ( m_conv->ToWChar(wbuf, WXSIZEOF(wbuf), m_lastBytes, inlen + 1)
-                != wxCONV_FAILED )
-            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 +335,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 +355,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;