return wxT('?'); // FIXME-UTF8: what to use as failure character?
#else
- wchar_t buf[2];
- if ( wxConvLibc.ToWChar(buf, 2, &c, 1) != 2 )
+ char cbuf[2];
+ cbuf[0] = c;
+ cbuf[1] = '\0';
+ wchar_t wbuf[2];
+ if ( wxConvLibc.ToWChar(wbuf, 2, cbuf, 2) != 2 )
{
wxFAIL_MSG( "invalid multibyte character" );
return wxT('?'); // FIXME-UTF8: what to use as failure character?
}
- return buf[0];
+ return wbuf[0];
#endif
}
return '?'; // FIXME-UTF8: what to use as failure character?
#else
- wchar_t in = c;
- char buf[2];
- if ( wxConvLibc.FromWChar(buf, 2, &in, 1) != 2 )
+ wchar_t wbuf[2];
+ wbuf[0] = c;
+ wbuf[1] = L'\0';
+ char cbuf[2];
+ if ( wxConvLibc.FromWChar(cbuf, 2, wbuf, 2) != 2 )
{
wxFAIL_MSG( "character cannot be converted to single byte" );
return '?'; // FIXME-UTF8: what to use as failure character?
}
- return buf[0];
+ return cbuf[0];
#endif
}
for ( size_t i = 0; i < lenNew; ++i, ++pos )
*pos = utf[i];
}
- else
+ else // length of character encoding in UTF-8 changed
{
// the worse case is when the new value has either longer or shorter
// code -- in that case, we have to use wxStringImpl::replace() and
if ( iterNum == STATIC_SIZE )
{
- wxLogTrace( _T("utf8"), _T("unexpectedly many iterators") );
+ wxLogTrace( wxT("utf8"), wxT("unexpectedly many iterators") );
size_t total = iterNum + 1;
for ( wxStringIteratorNode *it2 = it; it2; it2 = it2->m_next )
// update the string:
strimpl.replace(m_pos, m_pos + lenOld, utf, lenNew);
+#if wxUSE_STRING_POS_CACHE
+ m_str.InvalidateCache();
+#endif // wxUSE_STRING_POS_CACHE
+
// finally, set the iterators to valid values again (note that this
// updates m_pos as well):
size_t i;