diff --git a/HTMLtree.c b/HTMLtree.c
index 06741c21..51c1078a 100644
--- a/HTMLtree.c
+++ b/HTMLtree.c
@@ -382,25 +382,15 @@ htmlSaveErr(int code, xmlNodePtr node, const char *extra)
* *
************************************************************************/
-static xmlCharEncodingHandler *
-htmlFindOutputEncoder(const char *encoding) {
- xmlCharEncodingHandler *handler = NULL;
+static int
+htmlFindOutputEncoder(const char *encoding, xmlCharEncodingHandler **out) {
+ /*
+ * Fallback to HTML if the encoding is unspecified
+ */
+ if (encoding == NULL)
+ encoding = "HTML";
- if (encoding != NULL) {
- int res;
-
- res = xmlOpenCharEncodingHandler(encoding, /* output */ 1,
- &handler);
- if (res != XML_ERR_OK)
- htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
- } else {
- /*
- * Fallback to HTML when the encoding is unspecified
- */
- xmlOpenCharEncodingHandler("HTML", /* output */ 1, &handler);
- }
-
- return(handler);
+ return(xmlOpenCharEncodingHandler(encoding, /* output */ 1, out));
}
/**
@@ -508,10 +498,11 @@ htmlNodeDumpFileFormat(FILE *out, xmlDocPtr doc,
/*
* save the content to a temp buffer.
*/
- handler = htmlFindOutputEncoder(encoding);
+ if (htmlFindOutputEncoder(encoding, &handler) != XML_ERR_OK)
+ return(-1);
buf = xmlOutputBufferCreateFile(out, handler);
if (buf == NULL)
- return(0);
+ return(-1);
htmlNodeDumpFormatOutput(buf, doc, cur, NULL, format);
@@ -559,7 +550,8 @@ htmlDocDumpMemoryFormat(xmlDocPtr cur, xmlChar**mem, int *size, int format) {
return;
encoding = (const char *) htmlGetMetaEncoding(cur);
- handler = htmlFindOutputEncoder(encoding);
+ if (htmlFindOutputEncoder(encoding, &handler) != XML_ERR_OK)
+ return;
buf = xmlAllocOutputBuffer(handler);
if (buf == NULL)
return;
@@ -1025,7 +1017,8 @@ htmlDocDump(FILE *f, xmlDocPtr cur) {
}
encoding = (const char *) htmlGetMetaEncoding(cur);
- handler = htmlFindOutputEncoder(encoding);
+ if (htmlFindOutputEncoder(encoding, &handler) != XML_ERR_OK)
+ return(-1);
buf = xmlOutputBufferCreateFile(f, handler);
if (buf == NULL)
return(-1);
@@ -1057,10 +1050,11 @@ htmlSaveFile(const char *filename, xmlDocPtr cur) {
xmlInitParser();
encoding = (const char *) htmlGetMetaEncoding(cur);
- handler = htmlFindOutputEncoder(encoding);
+ if (htmlFindOutputEncoder(encoding, &handler) != XML_ERR_OK)
+ return(-1);
buf = xmlOutputBufferCreateFilename(filename, handler, cur->compression);
if (buf == NULL)
- return(0);
+ return(-1);
htmlDocContentDumpOutput(buf, cur, NULL);
@@ -1091,7 +1085,8 @@ htmlSaveFileFormat(const char *filename, xmlDocPtr cur,
xmlInitParser();
- handler = htmlFindOutputEncoder(encoding);
+ if (htmlFindOutputEncoder(encoding, &handler) != XML_ERR_OK)
+ return(-1);
if (handler != NULL)
htmlSetMetaEncoding(cur, (const xmlChar *) handler->name);
else