diff --git a/render/html.c b/render/html.c
index 7e3fb834c..e028e523d 100644
--- a/render/html.c
+++ b/render/html.c
@@ -69,7 +69,6 @@ void html_create(struct content *c, const char *params[])
}
html->parser = htmlCreatePushParserCtxt(0, 0, "", 0, 0, html->encoding);
- html->document = 0;
html->base_url = xstrdup(c->url);
html->layout = 0;
html->background_colour = TRANSPARENT;
@@ -140,7 +139,7 @@ int html_convert(struct content *c, unsigned int width, unsigned int height)
/* finish parsing */
htmlParseChunk(c->data.html.parser, "", 0, 1);
- document = c->data.html.document = c->data.html.parser->myDoc;
+ document = c->data.html.parser->myDoc;
/*xmlDebugDumpDocument(stderr, c->data.html.parser->myDoc);*/
htmlFreeParserCtxt(c->data.html.parser);
c->data.html.parser = 0;
@@ -182,7 +181,7 @@ int html_convert(struct content *c, unsigned int width, unsigned int height)
/*box_dump(c->data.html.layout->children, 0);*/
/* XML tree not required past this point */
- //xmlFreeDoc(document);
+ xmlFreeDoc(document);
/* layout the box tree */
sprintf(c->status_message, messages_get("Formatting"));
@@ -756,9 +755,6 @@ void html_destroy(struct content *c)
if (c->data.html.parser)
htmlFreeParserCtxt(c->data.html.parser);
- if (c->data.html.document)
- xmlFreeDoc(c->data.html.document);
-
free(c->data.html.base_url);
if (c->data.html.layout)
diff --git a/render/html.h b/render/html.h
index 673e57317..d029a7554 100644
--- a/render/html.h
+++ b/render/html.h
@@ -36,7 +36,6 @@ struct box_position {
/** Data specific to CONTENT_HTML. */
struct content_html_data {
htmlParserCtxt *parser; /**< HTML parser context. */
- xmlDoc *document; /**< the XML document tree */
xmlCharEncoding encoding; /**< Encoding of source. */
bool getenc; /**< Need to get the encoding from the document, as server is broken. */
diff --git a/riscos/save_complete.c b/riscos/save_complete.c
index 0738f2240..d63ceedf0 100644
--- a/riscos/save_complete.c
+++ b/riscos/save_complete.c
@@ -58,7 +58,7 @@ void save_complete(struct content *c) {
unsigned int i;
struct url_entry urls = {0, 0, 0, 0}; /* sentinel at head */
struct url_entry *object;
- xmlDoc *toSave;
+ htmlParserCtxtPtr toSave;
if (c->type != CONTENT_HTML)
return;
@@ -136,26 +136,28 @@ void save_complete(struct content *c) {
}
/* make a copy of the document tree */
- toSave = xmlCopyDoc(c->data.html.document, 1);
-
- if (!toSave) {
+ toSave = htmlCreateMemoryParserCtxt(c->source_data, c->source_size);
+ if (htmlParseDocument(toSave) == -1) {
+ htmlFreeParserCtxt(toSave);
xfree(spath);
return;
}
/* rewrite all urls we know about */
- if (rewrite_document_urls(toSave, &urls, fname) == 0) {
+ if (rewrite_document_urls(toSave->myDoc, &urls, fname) == 0) {
xfree(spath);
- xmlFreeDoc(toSave);
+ xmlFreeDoc(toSave->myDoc);
+ htmlFreeParserCtxt(toSave);
return;
}
/* save the html file out last of all */
sprintf(spath, "%s%s", SAVE_PATH, fname);
- htmlSaveFile(spath, toSave);
+ htmlSaveFile(spath, toSave->myDoc);
xosfile_set_type(spath, 0xfaf);
- xmlFreeDoc(toSave);
+ xmlFreeDoc(toSave->myDoc);
+ htmlFreeParserCtxt(toSave);
xfree(spath);
//xfree(fname);
}