fix off by one error in CharToString(); also simplified the conversion code a bit

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38838 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-04-19 09:38:54 +00:00
parent b4d6492404
commit ddae497f7b

View File

@@ -365,29 +365,30 @@ bool wxXmlDocument::Save(const wxString& filename) const
- process all elements, including CDATA - process all elements, including CDATA
*/ */
// converts Expat-produced string in UTF-8 into wxString. // converts Expat-produced string in UTF-8 into wxString using the specified
inline static wxString CharToString(wxMBConv *conv, // conv or keep in UTF-8 if conv is NULL
static wxString CharToString(wxMBConv *conv,
const char *s, size_t len = wxSTRING_MAXLEN) const char *s, size_t len = wxSTRING_MAXLEN)
{ {
#if wxUSE_UNICODE #if wxUSE_UNICODE
(void)conv; wxUnusedVar(conv);
return wxString(s, wxConvUTF8, len); return wxString(s, wxConvUTF8, len);
#else #else // !wxUSE_UNICODE
if ( conv ) if ( conv )
{ {
size_t nLen = (len != wxSTRING_MAXLEN) ? len : // there can be no embedded NULs in this string so we don't need the
wxConvUTF8.MB2WC((wchar_t*) NULL, s, 0); // output length, it will be NUL-terminated
const wxWCharBuffer wbuf(
wxConvUTF8.cMB2WC(s, len == wxSTRING_MAXLEN ? wxNO_LEN : len, NULL));
wchar_t *buf = new wchar_t[nLen+1]; return wxString(wbuf, conv);
wxConvUTF8.MB2WC(buf, s, nLen);
buf[nLen] = 0;
wxString str(buf, *conv, len);
delete[] buf;
return str;
} }
else else // already in UTF-8, no conversion needed
{
return wxString(s, len != wxSTRING_MAXLEN ? len : strlen(s)); return wxString(s, len != wxSTRING_MAXLEN ? len : strlen(s));
#endif }
#endif // wxUSE_UNICODE/!wxUSE_UNICODE
} }
struct wxXmlParsingContext struct wxXmlParsingContext