Gitweb links:

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

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

    Fetch relative URIs correctly

diff --git a/content/handlers/image/svg.c b/content/handlers/image/svg.c
index 5cd3883..d6dd893 100644
--- a/content/handlers/image/svg.c
+++ b/content/handlers/image/svg.c
@@ -49,7 +49,8 @@ typedef struct svg_content {
 struct svg_fetch_cb_data
 {
        void *parser;
-       int (*cb)(void *parser, const char *data, int size);
+       nsurl *url;
+       int (*cb)(void *parser, const char *data, int size, const char *uri);
 };
 
 /** Callback for hlcache fetch */
@@ -64,14 +65,17 @@ static nserror svg_fetch_hlcache_cb(hlcache_handle *handle,
                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);
+                       cb_userdata->cb(cb_userdata->parser, data, size,
+                                       nsurl_access(cb_userdata->url));
                        hlcache_handle_release(handle);
+                       nsurl_unref(cb_userdata->url);
                        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);
+                       nsurl_unref(cb_userdata->url);
                        free(userdata);
                break;
 
@@ -84,9 +88,10 @@ 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,
-               int (*svgtiny_expat_xmlparser_parse_cb)(void *parser, const 
char *data, int size))
+               int (*svgtiny_expat_xmlparser_parse_cb)(void *parser, const 
char *data, int size, const char *uri))
 {
        nsurl *x_ent;
+       nsurl *base_url;
        nserror ret;
        hlcache_handle *handle;
        struct svg_fetch_cb_data *userdata;
@@ -102,19 +107,26 @@ static int svg_fetch_cb(void *parser, const char *base, 
const char *uri,
        userdata->cb = svgtiny_expat_xmlparser_parse_cb;
 
        /* create url */
-       /**\todo this should be nsurl_joining base+uri */
-       ret = nsurl_create(uri, &x_ent);
+       ret = nsurl_create(base, &base_url);
        if (ret != NSERROR_OK) {
                free(userdata);
                return false;
        }
 
+       ret = nsurl_join(base_url, uri, &x_ent);
+       nsurl_unref(base_url);
+       if (ret != NSERROR_OK) {
+               free(userdata);
+               return false;
+       }
+
+       userdata->url = x_ent;
+
        ret = hlcache_handle_retrieve(x_ent, 0, NULL, NULL,
                                      svg_fetch_hlcache_cb,
                                      userdata, /* data */
                                      NULL, CONTENT_ANY,
                                      &handle);
-       nsurl_unref(x_ent);
 
        if (ret != NSERROR_OK) {
                return false;


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

Summary of changes:
 content/handlers/image/svg.c |   24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/content/handlers/image/svg.c b/content/handlers/image/svg.c
index 5cd3883..d6dd893 100644
--- a/content/handlers/image/svg.c
+++ b/content/handlers/image/svg.c
@@ -49,7 +49,8 @@ typedef struct svg_content {
 struct svg_fetch_cb_data
 {
        void *parser;
-       int (*cb)(void *parser, const char *data, int size);
+       nsurl *url;
+       int (*cb)(void *parser, const char *data, int size, const char *uri);
 };
 
 /** Callback for hlcache fetch */
@@ -64,14 +65,17 @@ static nserror svg_fetch_hlcache_cb(hlcache_handle *handle,
                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);
+                       cb_userdata->cb(cb_userdata->parser, data, size,
+                                       nsurl_access(cb_userdata->url));
                        hlcache_handle_release(handle);
+                       nsurl_unref(cb_userdata->url);
                        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);
+                       nsurl_unref(cb_userdata->url);
                        free(userdata);
                break;
 
@@ -84,9 +88,10 @@ 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,
-               int (*svgtiny_expat_xmlparser_parse_cb)(void *parser, const 
char *data, int size))
+               int (*svgtiny_expat_xmlparser_parse_cb)(void *parser, const 
char *data, int size, const char *uri))
 {
        nsurl *x_ent;
+       nsurl *base_url;
        nserror ret;
        hlcache_handle *handle;
        struct svg_fetch_cb_data *userdata;
@@ -102,19 +107,26 @@ static int svg_fetch_cb(void *parser, const char *base, 
const char *uri,
        userdata->cb = svgtiny_expat_xmlparser_parse_cb;
 
        /* create url */
-       /**\todo this should be nsurl_joining base+uri */
-       ret = nsurl_create(uri, &x_ent);
+       ret = nsurl_create(base, &base_url);
        if (ret != NSERROR_OK) {
                free(userdata);
                return false;
        }
 
+       ret = nsurl_join(base_url, uri, &x_ent);
+       nsurl_unref(base_url);
+       if (ret != NSERROR_OK) {
+               free(userdata);
+               return false;
+       }
+
+       userdata->url = x_ent;
+
        ret = hlcache_handle_retrieve(x_ent, 0, NULL, NULL,
                                      svg_fetch_hlcache_cb,
                                      userdata, /* data */
                                      NULL, CONTENT_ANY,
                                      &handle);
-       nsurl_unref(x_ent);
 
        if (ret != NSERROR_OK) {
                return false;


-- 
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