]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xml/xml.cpp
XML code fixes (patch #815196)
[wxWidgets.git] / src / xml / xml.cpp
index 056cc19565a4857fbf193e8c2949873f58bdfdef..ab40593bede751e0241b07634062c65743a82d35 100644 (file)
@@ -543,8 +543,10 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding)
         done = (len < BUFSIZE);
         if (!XML_Parse(parser, buf, len, done))
         {
+            wxString error(XML_ErrorString(XML_GetErrorCode(parser)),
+                           *wxConvCurrent);
             wxLogError(_("XML parsing error: '%s' at line %d"),
-                       XML_ErrorString(XML_GetErrorCode(parser)),
+                       error.c_str(),
                        XML_GetCurrentLineNumber(parser));
             ok = false;
             break;
@@ -553,10 +555,16 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding)
 
     if (ok)
     {
-        SetVersion(ctx.version);
-        SetFileEncoding(ctx.encoding);
+        if (!ctx.version.IsEmpty())
+            SetVersion(ctx.version);
+        if (!ctx.encoding.IsEmpty())
+            SetFileEncoding(ctx.encoding);
         SetRoot(ctx.root);
     }
+    else
+    {
+        delete ctx.root;
+    }
 
     XML_ParserFree(parser);
 #if !wxUSE_UNICODE
@@ -580,13 +588,7 @@ inline static void OutputString(wxOutputStream& stream, const wxString& str,
 {
     if (str.IsEmpty()) return;
 #if wxUSE_UNICODE
-    const wxWX2MBbuf buf(str.mb_str(
-#ifdef __MWERKS__
-    *(convFile ? convFile : &wxConvUTF8)
-#else
-    convFile ? *convFile : wxConvUTF8
-#endif
-    ));
+    const wxWX2MBbuf buf(str.mb_str(*(convFile ? convFile : &wxConvUTF8)));
     stream.Write((const char*)buf, strlen((const char*)buf));
 #else
     if ( convFile == NULL )