]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xml/xml.cpp
fix part of proposal at http://news.gmane.org/find-root.php?message_id=%3c45A2343E...
[wxWidgets.git] / src / xml / xml.cpp
index 6a76beb7c62e81220aa8a6cebd50983d25363caf..61617537a9d5fbc1f1151bbbf6faecb4c999db93 100644 (file)
@@ -386,7 +386,11 @@ void wxXmlDocument::DoCopy(const wxXmlDocument& doc)
     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)
@@ -414,7 +418,7 @@ bool wxXmlDocument::Save(const wxString& filename, int indentstep) const
 // 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);
@@ -426,13 +430,13 @@ static wxString CharToString(wxMBConv *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
 }
@@ -632,7 +636,7 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding, int fl
     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;
@@ -849,17 +853,23 @@ bool wxXmlDocument::Save(wxOutputStream& stream, int indentstep) const
 
     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"),
@@ -869,10 +879,8 @@ bool wxXmlDocument::Save(wxOutputStream& stream, int indentstep) const
     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;
 }