-void wxTextInputStream::SkipIfEndOfLine( wxChar c )
-{
- if (EatEOL(c)) return;
- else m_input.Ungetch( c ); // no line terminator
-}
-
-wxUint32 wxTextInputStream::Read32()
-{
- /* I only implemented a simple integer parser */
- int sign;
- wxInt32 i;
-
- if (!m_input) return 0;
- int c = NextNonSeparators();
- if (c==(wxChar)0) return 0;
-
- i = 0;
- if (! (c == wxT('-') || c == wxT('+') || isdigit(c)) )
- {
- m_input.Ungetch(c);
- return 0;
- }
-
- if (c == wxT('-'))
- {
- sign = -1;
- c = m_input.GetC();
- } else
- if (c == wxT('+'))
- {
- sign = 1;
- c = m_input.GetC();
- } else
- {
- sign = 1;
+ 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];
+ }