summaryrefslogtreecommitdiff
path: root/core/io
diff options
context:
space:
mode:
authorTerseus <terseus@gmail.com>2014-02-18 21:37:58 +0100
committerTerseus <terseus@gmail.com>2014-02-18 21:37:58 +0100
commitb6583909a9783dd5fc9595ba56f5d9f7557898b0 (patch)
tree76e6b24fcbeb148534772b55fbeaeead3bdabb7f /core/io
parent2bfbf8978189ed8d785d7f707ad573ce2a2bf2a7 (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.cpp16
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;