Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/180cf8d29bb484065e4e00015e1d843fe4b43a2f
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/180cf8d29bb484065e4e00015e1d843fe4b43a2f
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/180cf8d29bb484065e4e00015e1d843fe4b43a2f

The branch, chris/fetch-x-ent-ref has been updated
       via  180cf8d29bb484065e4e00015e1d843fe4b43a2f (commit)
      from  e0833d6dfcd721d42c0914c747b9cf7f07c3f16c (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/netsurf.git/commit/?id=180cf8d29bb484065e4e00015e1d843fe4b43a2f
commit 180cf8d29bb484065e4e00015e1d843fe4b43a2f
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>

    Parse the fetched external entity

diff --git a/content/handlers/image/svg.c b/content/handlers/image/svg.c
index b81f510..5cd3883 100644
--- a/content/handlers/image/svg.c
+++ b/content/handlers/image/svg.c
@@ -46,21 +46,33 @@ typedef struct svg_content {
        int current_height;
 } svg_content;
 
-
+struct svg_fetch_cb_data
+{
+       void *parser;
+       int (*cb)(void *parser, const char *data, int size);
+};
 
 /** Callback for hlcache fetch */
 static nserror svg_fetch_hlcache_cb(hlcache_handle *handle,
-                       const hlcache_event *event,
-                       void *parser)
+               const hlcache_event *event, void *userdata)
 {
+       unsigned long size = 0;
+       const char *data;
+       struct svg_fetch_cb_data *cb_userdata = userdata;
+
        switch (event->type) {
                case CONTENT_MSG_DONE:
                        LOG("external entity '%s' retrieved", 
nsurl_access(hlcache_handle_get_url(handle)));
+                       data = content_get_source_data(handle, &size);
+                       cb_userdata->cb(cb_userdata->parser, data, size);
+                       hlcache_handle_release(handle);
+                       free(userdata);
                break;
 
                case CONTENT_MSG_ERROR:
                        LOG("external entity %s error: %s", 
nsurl_access(hlcache_handle_get_url(handle)), event->data.error);
                        hlcache_handle_release(handle);
+                       free(userdata);
                break;
 
                default:
@@ -71,23 +83,35 @@ static nserror svg_fetch_hlcache_cb(hlcache_handle *handle,
 }
 
 /** Callback for libsvgtiny fetch */
-static int svg_fetch_cb(void *parser, const char *base, const char *uri)
+static int svg_fetch_cb(void *parser, const char *base, const char *uri,
+               int (*svgtiny_expat_xmlparser_parse_cb)(void *parser, const 
char *data, int size))
 {
        nsurl *x_ent;
        nserror ret;
        hlcache_handle *handle;
+       struct svg_fetch_cb_data *userdata;
 
        LOG("Fetching external entity reference %s", uri);
 
+       userdata = malloc(sizeof(struct svg_fetch_cb_data));
+       if (userdata == NULL) {
+               return false;
+       }
+
+       userdata->parser = parser;
+       userdata->cb = svgtiny_expat_xmlparser_parse_cb;
+
        /* create url */
+       /**\todo this should be nsurl_joining base+uri */
        ret = nsurl_create(uri, &x_ent);
        if (ret != NSERROR_OK) {
+               free(userdata);
                return false;
        }
 
        ret = hlcache_handle_retrieve(x_ent, 0, NULL, NULL,
                                      svg_fetch_hlcache_cb,
-                                     parser, /* data */
+                                     userdata, /* data */
                                      NULL, CONTENT_ANY,
                                      &handle);
        nsurl_unref(x_ent);


-----------------------------------------------------------------------

Summary of changes:
 content/handlers/image/svg.c |   34 +++++++++++++++++++++++++++++-----
 1 file changed, 29 insertions(+), 5 deletions(-)

diff --git a/content/handlers/image/svg.c b/content/handlers/image/svg.c
index b81f510..5cd3883 100644
--- a/content/handlers/image/svg.c
+++ b/content/handlers/image/svg.c
@@ -46,21 +46,33 @@ typedef struct svg_content {
        int current_height;
 } svg_content;
 
-
+struct svg_fetch_cb_data
+{
+       void *parser;
+       int (*cb)(void *parser, const char *data, int size);
+};
 
 /** Callback for hlcache fetch */
 static nserror svg_fetch_hlcache_cb(hlcache_handle *handle,
-                       const hlcache_event *event,
-                       void *parser)
+               const hlcache_event *event, void *userdata)
 {
+       unsigned long size = 0;
+       const char *data;
+       struct svg_fetch_cb_data *cb_userdata = userdata;
+
        switch (event->type) {
                case CONTENT_MSG_DONE:
                        LOG("external entity '%s' retrieved", 
nsurl_access(hlcache_handle_get_url(handle)));
+                       data = content_get_source_data(handle, &size);
+                       cb_userdata->cb(cb_userdata->parser, data, size);
+                       hlcache_handle_release(handle);
+                       free(userdata);
                break;
 
                case CONTENT_MSG_ERROR:
                        LOG("external entity %s error: %s", 
nsurl_access(hlcache_handle_get_url(handle)), event->data.error);
                        hlcache_handle_release(handle);
+                       free(userdata);
                break;
 
                default:
@@ -71,23 +83,35 @@ static nserror svg_fetch_hlcache_cb(hlcache_handle *handle,
 }
 
 /** Callback for libsvgtiny fetch */
-static int svg_fetch_cb(void *parser, const char *base, const char *uri)
+static int svg_fetch_cb(void *parser, const char *base, const char *uri,
+               int (*svgtiny_expat_xmlparser_parse_cb)(void *parser, const 
char *data, int size))
 {
        nsurl *x_ent;
        nserror ret;
        hlcache_handle *handle;
+       struct svg_fetch_cb_data *userdata;
 
        LOG("Fetching external entity reference %s", uri);
 
+       userdata = malloc(sizeof(struct svg_fetch_cb_data));
+       if (userdata == NULL) {
+               return false;
+       }
+
+       userdata->parser = parser;
+       userdata->cb = svgtiny_expat_xmlparser_parse_cb;
+
        /* create url */
+       /**\todo this should be nsurl_joining base+uri */
        ret = nsurl_create(uri, &x_ent);
        if (ret != NSERROR_OK) {
+               free(userdata);
                return false;
        }
 
        ret = hlcache_handle_retrieve(x_ent, 0, NULL, NULL,
                                      svg_fetch_hlcache_cb,
-                                     parser, /* data */
+                                     userdata, /* data */
                                      NULL, CONTENT_ANY,
                                      &handle);
        nsurl_unref(x_ent);


-- 
NetSurf Browser

_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to