diff options
author | Terseus <terseus@gmail.com> | 2014-02-18 21:37:58 +0100 |
---|---|---|
committer | Terseus <terseus@gmail.com> | 2014-02-18 21:37:58 +0100 |
commit | b6583909a9783dd5fc9595ba56f5d9f7557898b0 (patch) | |
tree | 76e6b24fcbeb148534772b55fbeaeead3bdabb7f /core/io | |
parent | 2bfbf8978189ed8d785d7f707ad573ce2a2bf2a7 (diff) |
Fix #113 editor_settings.xml corruption
In the `parse_tag` method of the `class ResourceInteractiveLoaderXML`,
the class responsible of loading the editor_settings.xml file, the
properties' values are loaded directly into an `String` object but the
file contents are always UTF-8, which leads to garbage in the XML file
when saved.
This patch reads the properties' values in a `CharString` and translate
them to UTF-8.
Diffstat (limited to 'core/io')
-rw-r--r-- | core/io/resource_format_xml.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/core/io/resource_format_xml.cpp b/core/io/resource_format_xml.cpp index f175c73e98..20a42f25df 100644 --- a/core/io/resource_format_xml.cpp +++ b/core/io/resource_format_xml.cpp @@ -97,16 +97,17 @@ ResourceInteractiveLoaderXML::Tag* ResourceInteractiveLoaderXML::parse_tag(bool if (!complete) { String name; - String value; + CharString r_value; bool reading_value=false; while(!f->eof_reached()) { CharType c=get_char(); if (c=='>') { - if (value.length()) { + if (r_value.size()) { - tag.args[name]=value; + r_value.push_back(0); + tag.args[name].parse_utf8(r_value.get_data()); } break; @@ -115,17 +116,18 @@ ResourceInteractiveLoaderXML::Tag* ResourceInteractiveLoaderXML::parse_tag(bool if (!reading_value && name.length()) { reading_value=true; - } else if (reading_value && value.length()) { + } else if (reading_value && r_value.size()) { - tag.args[name]=value; + r_value.push_back(0); + tag.args[name].parse_utf8(r_value.get_data()); name=""; - value=""; + r_value.clear(); reading_value=false; } } else if (reading_value) { - value+=c; + r_value.push_back(c); } else { name+=c; |