projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix memory leak when handling background attribute (patch 1687900)
[wxWidgets.git]
/
src
/
xml
/
xml.cpp
diff --git
a/src/xml/xml.cpp
b/src/xml/xml.cpp
index 6a76beb7c62e81220aa8a6cebd50983d25363caf..61617537a9d5fbc1f1151bbbf6faecb4c999db93 100644
(file)
--- a/
src/xml/xml.cpp
+++ b/
src/xml/xml.cpp
@@
-386,7
+386,11
@@
void wxXmlDocument::DoCopy(const wxXmlDocument& doc)
m_encoding = doc.m_encoding;
#endif
m_fileEncoding = doc.m_fileEncoding;
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)
}
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,
// 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 = wxS
TRING_MAXLEN
)
+ const char *s, size_t len = wxS
tring::npos
)
{
#if wxUSE_UNICODE
wxUnusedVar(conv);
{
#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(
// 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 == wxS
TRING_MAXLEN
? wxNO_LEN : len, NULL));
+ wxConvUTF8.cMB2WC(s, len == wxS
tring::npos
? wxNO_LEN : len, NULL));
return wxString(wbuf, *conv);
}
else // already in UTF-8, no conversion needed
{
return wxString(wbuf, *conv);
}
else // already in UTF-8, no conversion needed
{
- return wxString(s, len != wxS
TRING_MAXLEN
? len : strlen(s));
+ return wxString(s, len != wxS
tring::npos
? len : strlen(s));
}
#endif // wxUSE_UNICODE/!wxUSE_UNICODE
}
}
#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
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;
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;
wxString s;
- wxMBConv *convMem = NULL;
+ wxMBConv *convMem = NULL,
+ *convFile;
#if wxUSE_UNICODE
#if wxUSE_UNICODE
- wxMBConv *convFile = new wxCSConv(GetFileEncoding());
+ convFile = new wxCSConv(GetFileEncoding());
+ convMem = NULL;
#else
#else
- wxMBConv *convFile = NULL;
- if ( GetFileEncoding() != GetEncoding() )
+ if ( GetFileEncoding().CmpNoCase(GetEncoding()) != 0 )
{
convFile = new wxCSConv(GetFileEncoding());
convMem = new wxCSConv(GetEncoding());
}
{
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"),
#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"));
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;
}
return true;
}