Allow to construct a XML tree from a text buffer
authorRobin Gareus <robin@gareus.org>
Sat, 29 Oct 2016 15:03:34 +0000 (17:03 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 29 Oct 2016 17:57:43 +0000 (19:57 +0200)
libs/pbd/pbd/xml++.h
libs/pbd/xml++.cc

index 8e348a448365a15fcf728da9de3f063c2099651d..9064bc185439b4544fd50e706dcedd52e2b82a38 100644 (file)
@@ -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(); }
index e19a5ab2440a0de8051d4971dee35a628c1d33cd..dbe6d51e0d302efbbc27737e79e3db5b9b5133a0 100644 (file)
@@ -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;
 }