summaryrefslogtreecommitdiff
path: root/bindings/xml/expat_xmlparser.c
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/xml/expat_xmlparser.c')
-rw-r--r--bindings/xml/expat_xmlparser.c42
1 files changed, 20 insertions, 22 deletions
diff --git a/bindings/xml/expat_xmlparser.c b/bindings/xml/expat_xmlparser.c
index 9b7d113..71215e1 100644
--- a/bindings/xml/expat_xmlparser.c
+++ b/bindings/xml/expat_xmlparser.c
@@ -32,6 +32,24 @@ struct dom_xml_parser {
dom_xml_parser_fetch_cb fetch_cb; /**< Callback to fetch external entities */
};
+/* Parser callback */
+static int expat_xmlparser_parse_cb(void *parser, const char *data, int size)
+{
+ enum XML_Status status;
+
+ status = XML_Parse(parser, data, size, 0);
+ if (status != XML_STATUS_OK) {
+ XML_ParserFree(parser);
+ return XML_STATUS_OK;
+ }
+
+ XML_Parse(parser, "", 0, 1);
+ XML_ParserFree(parser);
+
+ return XML_STATUS_OK;
+}
+
+
/* Binding functions */
static void
@@ -294,13 +312,6 @@ expat_xmlparser_external_entity_ref_handler(XML_Parser parser,
const XML_Char *public_id)
{
XML_Parser subparser;
- unsigned char data[1024];
- size_t len;
- enum XML_Status status;
-
- UNUSED(data);
- UNUSED(len);
- UNUSED(status);
UNUSED(public_id);
@@ -319,23 +330,10 @@ expat_xmlparser_external_entity_ref_handler(XML_Parser parser,
return XML_STATUS_OK;
}
- if(xml_parser->fetch_cb(subparser, base, system_id) == false)
+ if(xml_parser->fetch_cb(subparser, base, system_id, expat_xmlparser_parse_cb) == false)
return XML_STATUS_OK;
-#if 0
-
- /* Parse the file bit by bit */
- while ((len = fread(data, 1, 1024, fh)) > 0) {
- status = XML_Parse(subparser, (const char *)data, len, 0);
- if (status != XML_STATUS_OK) {
- XML_ParserFree(subparser);
- return XML_STATUS_OK;
- }
- }
-#endif
- XML_Parse(subparser, "", 0, 1);
- XML_ParserFree(subparser);
-
+// add 1
return XML_STATUS_OK;
}