summaryrefslogtreecommitdiff
path: root/libs/pbd
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-10-29 17:03:34 +0200
committerRobin Gareus <robin@gareus.org>2016-10-29 19:57:43 +0200
commit06700cb2f48b8da62b56d5cce4deb50cac029e6a (patch)
treea67657006284f09d8bac88f3e7594c6a3fec8553 /libs/pbd
parent5ed764178a7ff43d30ced21ffa8d5f36c64074c8 (diff)
Allow to construct a XML tree from a text buffer
Diffstat (limited to 'libs/pbd')
-rw-r--r--libs/pbd/pbd/xml++.h2
-rw-r--r--libs/pbd/xml++.cc11
2 files changed, 10 insertions, 3 deletions
diff --git a/libs/pbd/pbd/xml++.h b/libs/pbd/pbd/xml++.h
index 8e348a4483..9064bc1854 100644
--- a/libs/pbd/pbd/xml++.h
+++ b/libs/pbd/pbd/xml++.h
@@ -70,7 +70,7 @@ public:
bool read(const std::string& fn) { set_filename(fn); return read_internal(false); }
bool read_and_validate() { return read_internal(true); }
bool read_and_validate(const std::string& fn) { set_filename(fn); return read_internal(true); }
- bool read_buffer(const std::string&);
+ bool read_buffer(const std::string&, bool to_tree_doc = false);
bool write() const;
bool write(const std::string& fn) { set_filename(fn); return write(); }
diff --git a/libs/pbd/xml++.cc b/libs/pbd/xml++.cc
index e19a5ab244..dbe6d51e0d 100644
--- a/libs/pbd/xml++.cc
+++ b/libs/pbd/xml++.cc
@@ -120,7 +120,7 @@ XMLTree::read_internal(bool validate)
}
bool
-XMLTree::read_buffer(const string& buffer)
+XMLTree::read_buffer(const string& buffer, bool to_tree_doc)
{
xmlDocPtr doc;
@@ -135,7 +135,14 @@ XMLTree::read_buffer(const string& buffer)
}
_root = readnode(xmlDocGetRootElement(doc));
- xmlFreeDoc(doc);
+ if (to_tree_doc) {
+ if (_doc) {
+ xmlFreeDoc (_doc);
+ }
+ _doc = doc;
+ } else {
+ xmlFreeDoc (doc);
+ }
return true;
}