]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/txtstrm.cpp
Add missing WXK constants for the control keys
[wxWidgets.git] / src / common / txtstrm.cpp
index 830bc985ba2f83b869e463466d57498cfaeb31df..7ae75f5b7621efcc9e626991272e81c7e43d3951 100644 (file)
@@ -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)
-                != 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 +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;