summaryrefslogtreecommitdiffstats
path: root/gui/pages.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/pages.cpp')
-rw-r--r--gui/pages.cpp36
1 files changed, 25 insertions, 11 deletions
diff --git a/gui/pages.cpp b/gui/pages.cpp
index aae85aec9..94c351be2 100644
--- a/gui/pages.cpp
+++ b/gui/pages.cpp
@@ -557,11 +557,16 @@ PageSet::~PageSet()
{
for (std::vector<Page*>::iterator itr = mPages.begin(); itr != mPages.end(); ++itr)
delete *itr;
- for (std::vector<xml_node<>*>::iterator itr2 = templates.begin(); itr2 != templates.end(); ++itr2)
- delete *itr2;
delete mResources;
free(mXmlFile);
+
+ mDoc.clear();
+
+ for (std::vector<xml_document<>*>::iterator itr = mIncludedDocs.begin(); itr != mIncludedDocs.end(); ++itr) {
+ (*itr)->clear();
+ delete *itr;
+ }
}
int PageSet::Load(ZipArchive* package)
@@ -605,7 +610,7 @@ int PageSet::Load(ZipArchive* package)
return -1;
}
}
-
+
return CheckInclude(package, &mDoc);
}
@@ -620,7 +625,7 @@ int PageSet::CheckInclude(ZipArchive* package, xml_document<> *parentDoc)
long len;
char* xmlFile = NULL;
string filename;
- xml_document<> doc;
+ xml_document<> *doc = NULL;
par = parentDoc->first_node("recovery");
if (!par) {
@@ -682,11 +687,14 @@ int PageSet::CheckInclude(ZipArchive* package, xml_document<> *parentDoc)
return -1;
}
}
- doc.parse<0>(xmlFile);
- parent = doc.first_node("recovery");
+ xmlFile[len] = '\0';
+ doc = new xml_document<>();
+ doc->parse<0>(xmlFile);
+
+ parent = doc->first_node("recovery");
if (!parent)
- parent = doc.first_node("install");
+ parent = doc->first_node("install");
// Now, let's parse the XML
LOGINFO("Loading included resources...\n");
@@ -711,11 +719,17 @@ int PageSet::CheckInclude(ZipArchive* package, xml_document<> *parentDoc)
templates.push_back(xmltemplate);
child = parent->first_node("pages");
- if (child)
- if (LoadPages(child))
- return -1;
+ if (child && LoadPages(child))
+ {
+ templates.pop_back();
+ doc->clear();
+ delete doc;
+ return -1;
+ }
+
+ mIncludedDocs.push_back(doc);
- if (CheckInclude(package, &doc))
+ if (CheckInclude(package, doc))
return -1;
chld = chld->next_sibling("xmlfile");