m_encoding = doc.m_encoding;
#endif
m_fileEncoding = doc.m_fileEncoding;
- m_root = new wxXmlNode(*doc.m_root);
+
+ if (doc.m_root)
+ m_root = new wxXmlNode(*doc.m_root);
+ else
+ m_root = NULL;
}
bool wxXmlDocument::Load(const wxString& filename, const wxString& encoding, int flags)
// converts Expat-produced string in UTF-8 into wxString using the specified
// 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::npos)
{
#if wxUSE_UNICODE
wxUnusedVar(conv);
// there can be no embedded NULs in this string so we don't need the
// output length, it will be NUL-terminated
const wxWCharBuffer wbuf(
- wxConvUTF8.cMB2WC(s, len == wxSTRING_MAXLEN ? wxNO_LEN : len, NULL));
+ wxConvUTF8.cMB2WC(s, len == wxString::npos ? wxNO_LEN : len, NULL));
return wxString(wbuf, *conv);
}
else // already in UTF-8, no conversion needed
{
- return wxString(s, len != wxSTRING_MAXLEN ? len : strlen(s));
+ return wxString(s, len != wxString::npos ? len : strlen(s));
}
#endif // wxUSE_UNICODE/!wxUSE_UNICODE
}
ctx.encoding = wxT("UTF-8"); // default in absence of encoding=""
ctx.conv = NULL;
#if !wxUSE_UNICODE
- if ( encoding != wxT("UTF-8") && encoding != wxT("utf-8") )
+ if ( encoding.CmpNoCase(wxT("UTF-8")) != 0 )
ctx.conv = new wxCSConv(encoding);
#endif
ctx.removeWhiteOnlyNodes = (flags & wxXMLDOC_KEEP_WHITESPACE_NODES) == 0;
wxString s;
- wxMBConv *convMem = NULL;
+ wxMBConv *convMem = NULL,
+ *convFile;
#if wxUSE_UNICODE
- wxMBConv *convFile = new wxCSConv(GetFileEncoding());
+ convFile = new wxCSConv(GetFileEncoding());
+ convMem = NULL;
#else
- wxMBConv *convFile = NULL;
- if ( GetFileEncoding() != GetEncoding() )
+ if ( GetFileEncoding().CmpNoCase(GetEncoding()) != 0 )
{
convFile = new wxCSConv(GetFileEncoding());
convMem = new wxCSConv(GetEncoding());
}
+ else // file and in-memory encodings are the same, no conversion needed
+ {
+ convFile =
+ convMem = NULL;
+ }
#endif
s.Printf(wxT("<?xml version=\"%s\" encoding=\"%s\"?>\n"),
OutputNode(stream, GetRoot(), 0, convMem, convFile, indentstep);
OutputString(stream, wxT("\n"));
- if ( convFile )
- delete convFile;
- if ( convMem )
- delete convMem;
+ delete convFile;
+ delete convMem;
return true;
}