Gitweb links:
...log
http://git.netsurf-browser.org/libdom.git/shortlog/21154af546747dd02ea8d6f0ee5332ba5fcd3acb
...commit
http://git.netsurf-browser.org/libdom.git/commit/21154af546747dd02ea8d6f0ee5332ba5fcd3acb
...tree
http://git.netsurf-browser.org/libdom.git/tree/21154af546747dd02ea8d6f0ee5332ba5fcd3acb
The branch, chris/fetch-x-ent-ref has been updated
via 21154af546747dd02ea8d6f0ee5332ba5fcd3acb (commit)
via 1231bc489c869b719f37bb66937cb7bd327afaf1 (commit)
from 7cef3ce8d0fd29f672da683787ef18e09b22ae57 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/libdom.git/commit/?id=21154af546747dd02ea8d6f0ee5332ba5fcd3acb
commit 21154af546747dd02ea8d6f0ee5332ba5fcd3acb
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>
Keep the context for the libdom binding for the subparser to use
diff --git a/bindings/xml/expat_xmlparser.c b/bindings/xml/expat_xmlparser.c
index e8ae21a..ae7780d 100644
--- a/bindings/xml/expat_xmlparser.c
+++ b/bindings/xml/expat_xmlparser.c
@@ -36,17 +36,21 @@ struct dom_xml_parser {
static int expat_xmlparser_parse_cb(void *parser, const char *data, int size,
const char *uri)
{
enum XML_Status status;
+ struct dom_xml_parser *xml_parser;
XML_SetBase(parser, uri);
+ xml_parser = XML_GetUserData(parser);
status = XML_Parse(parser, data, size, 0);
if (status != XML_STATUS_OK) {
XML_ParserFree(parser);
+ free(xml_parser);
return XML_STATUS_OK;
}
XML_Parse(parser, "", 0, 1);
XML_ParserFree(parser);
+ free(xml_parser);
return XML_STATUS_OK;
}
@@ -314,6 +318,7 @@ expat_xmlparser_external_entity_ref_handler(XML_Parser
parser,
const XML_Char *public_id)
{
XML_Parser subparser;
+ struct dom_xml_parser *xml_parser_copy;
UNUSED(public_id);
@@ -326,14 +331,21 @@ expat_xmlparser_external_entity_ref_handler(XML_Parser
parser,
return XML_STATUS_OK;
}
- /**\todo do we need to push a copy of xml_parser into our parser
userdata here? */
+ xml_parser_copy = malloc(sizeof(struct dom_xml_parser));
+ if (xml_parser_copy == NULL) {
+ return XML_STATUS_OK;
+ }
subparser = XML_ExternalEntityParserCreate(parser, context, NULL);
if (subparser == NULL) {
return XML_STATUS_OK;
}
-
+
+ memcpy(xml_parser_copy, xml_parser, sizeof(struct dom_xml_parser));
+ XML_SetUserData(subparser, xml_parser_copy);
+ xml_parser_copy->parser = subparser;
+
if(xml_parser->fetch_cb(subparser, base, system_id,
expat_xmlparser_parse_cb) == false)
return XML_STATUS_OK;
commitdiff
http://git.netsurf-browser.org/libdom.git/commit/?id=1231bc489c869b719f37bb66937cb7bd327afaf1
commit 1231bc489c869b719f37bb66937cb7bd327afaf1
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>
Handle relative URIs properly
diff --git a/bindings/xml/expat_xmlparser.c b/bindings/xml/expat_xmlparser.c
index 71215e1..e8ae21a 100644
--- a/bindings/xml/expat_xmlparser.c
+++ b/bindings/xml/expat_xmlparser.c
@@ -33,10 +33,12 @@ struct dom_xml_parser {
};
/* Parser callback */
-static int expat_xmlparser_parse_cb(void *parser, const char *data, int size)
+static int expat_xmlparser_parse_cb(void *parser, const char *data, int size,
const char *uri)
{
enum XML_Status status;
+ XML_SetBase(parser, uri);
+
status = XML_Parse(parser, data, size, 0);
if (status != XML_STATUS_OK) {
XML_ParserFree(parser);
@@ -324,6 +326,8 @@ expat_xmlparser_external_entity_ref_handler(XML_Parser
parser,
return XML_STATUS_OK;
}
+ /**\todo do we need to push a copy of xml_parser into our parser
userdata here? */
+
subparser = XML_ExternalEntityParserCreate(parser, context, NULL);
if (subparser == NULL) {
@@ -445,6 +449,7 @@ expat_xmlparser_unknown_data_handler(void *_parser,
* \param msg Informational message function
* \param mctx Pointer to client-specific private data
* \param document DOM Document
+ * \param fetch_cb Callback to call for fetching entity refs
* \return Pointer to instance, or NULL on memory exhaustion
*
* int_enc is ignored due to it being made of bees.
@@ -452,7 +457,7 @@ expat_xmlparser_unknown_data_handler(void *_parser,
dom_xml_parser *
dom_xml_parser_create(const char *enc, const char *int_enc,
dom_msg msg, void *mctx, dom_document **document,
- dom_xml_parser_fetch_cb fetch_cb)
+ const char *url, dom_xml_parser_fetch_cb fetch_cb)
{
dom_xml_parser *parser;
dom_exception err;
@@ -500,6 +505,8 @@ dom_xml_parser_create(const char *enc, const char *int_enc,
XML_SetUserData(parser->parser, parser);
+ XML_SetBase(parser->parser, url);
+
XML_SetElementHandler(parser->parser,
expat_xmlparser_start_element_handler,
expat_xmlparser_end_element_handler);
diff --git a/bindings/xml/xmlparser.h b/bindings/xml/xmlparser.h
index 1e1edd7..66557e5 100644
--- a/bindings/xml/xmlparser.h
+++ b/bindings/xml/xmlparser.h
@@ -17,12 +17,12 @@
typedef struct dom_xml_parser dom_xml_parser;
typedef int (*dom_xml_parser_fetch_cb)(void *parser, const char *base, const
char *uri,
- int (*expat_xmlparser_parse_cb)(void *parser, const char *data,
int size));
+ int (*expat_xmlparser_parse_cb)(void *parser, const char *data,
int size, const char *uri));
/* Create an XML parser instance */
dom_xml_parser *dom_xml_parser_create(const char *enc, const char *int_enc,
dom_msg msg, void *mctx, dom_document **document,
- dom_xml_parser_fetch_cb fetch_cb);
+ const char *url, dom_xml_parser_fetch_cb fetch_cb);
/* Destroy an XML parser instance */
void dom_xml_parser_destroy(dom_xml_parser *parser);
-----------------------------------------------------------------------
Summary of changes:
bindings/xml/expat_xmlparser.c | 25 ++++++++++++++++++++++---
bindings/xml/xmlparser.h | 4 ++--
2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/bindings/xml/expat_xmlparser.c b/bindings/xml/expat_xmlparser.c
index 71215e1..ae7780d 100644
--- a/bindings/xml/expat_xmlparser.c
+++ b/bindings/xml/expat_xmlparser.c
@@ -33,18 +33,24 @@ struct dom_xml_parser {
};
/* Parser callback */
-static int expat_xmlparser_parse_cb(void *parser, const char *data, int size)
+static int expat_xmlparser_parse_cb(void *parser, const char *data, int size,
const char *uri)
{
enum XML_Status status;
+ struct dom_xml_parser *xml_parser;
+
+ XML_SetBase(parser, uri);
+ xml_parser = XML_GetUserData(parser);
status = XML_Parse(parser, data, size, 0);
if (status != XML_STATUS_OK) {
XML_ParserFree(parser);
+ free(xml_parser);
return XML_STATUS_OK;
}
XML_Parse(parser, "", 0, 1);
XML_ParserFree(parser);
+ free(xml_parser);
return XML_STATUS_OK;
}
@@ -312,6 +318,7 @@ expat_xmlparser_external_entity_ref_handler(XML_Parser
parser,
const XML_Char *public_id)
{
XML_Parser subparser;
+ struct dom_xml_parser *xml_parser_copy;
UNUSED(public_id);
@@ -324,12 +331,21 @@ expat_xmlparser_external_entity_ref_handler(XML_Parser
parser,
return XML_STATUS_OK;
}
+ xml_parser_copy = malloc(sizeof(struct dom_xml_parser));
+ if (xml_parser_copy == NULL) {
+ return XML_STATUS_OK;
+ }
+
subparser = XML_ExternalEntityParserCreate(parser, context, NULL);
if (subparser == NULL) {
return XML_STATUS_OK;
}
-
+
+ memcpy(xml_parser_copy, xml_parser, sizeof(struct dom_xml_parser));
+ XML_SetUserData(subparser, xml_parser_copy);
+ xml_parser_copy->parser = subparser;
+
if(xml_parser->fetch_cb(subparser, base, system_id,
expat_xmlparser_parse_cb) == false)
return XML_STATUS_OK;
@@ -445,6 +461,7 @@ expat_xmlparser_unknown_data_handler(void *_parser,
* \param msg Informational message function
* \param mctx Pointer to client-specific private data
* \param document DOM Document
+ * \param fetch_cb Callback to call for fetching entity refs
* \return Pointer to instance, or NULL on memory exhaustion
*
* int_enc is ignored due to it being made of bees.
@@ -452,7 +469,7 @@ expat_xmlparser_unknown_data_handler(void *_parser,
dom_xml_parser *
dom_xml_parser_create(const char *enc, const char *int_enc,
dom_msg msg, void *mctx, dom_document **document,
- dom_xml_parser_fetch_cb fetch_cb)
+ const char *url, dom_xml_parser_fetch_cb fetch_cb)
{
dom_xml_parser *parser;
dom_exception err;
@@ -500,6 +517,8 @@ dom_xml_parser_create(const char *enc, const char *int_enc,
XML_SetUserData(parser->parser, parser);
+ XML_SetBase(parser->parser, url);
+
XML_SetElementHandler(parser->parser,
expat_xmlparser_start_element_handler,
expat_xmlparser_end_element_handler);
diff --git a/bindings/xml/xmlparser.h b/bindings/xml/xmlparser.h
index 1e1edd7..66557e5 100644
--- a/bindings/xml/xmlparser.h
+++ b/bindings/xml/xmlparser.h
@@ -17,12 +17,12 @@
typedef struct dom_xml_parser dom_xml_parser;
typedef int (*dom_xml_parser_fetch_cb)(void *parser, const char *base, const
char *uri,
- int (*expat_xmlparser_parse_cb)(void *parser, const char *data,
int size));
+ int (*expat_xmlparser_parse_cb)(void *parser, const char *data,
int size, const char *uri));
/* Create an XML parser instance */
dom_xml_parser *dom_xml_parser_create(const char *enc, const char *int_enc,
dom_msg msg, void *mctx, dom_document **document,
- dom_xml_parser_fetch_cb fetch_cb);
+ const char *url, dom_xml_parser_fetch_cb fetch_cb);
/* Destroy an XML parser instance */
void dom_xml_parser_destroy(dom_xml_parser *parser);
--
Document Object Model library
_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org