summaryrefslogtreecommitdiff
path: root/content/fetch.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2011-11-27 14:14:36 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2011-11-27 14:14:36 +0000
commit07309888d66c608977b31955215503dc355c7d33 (patch)
tree9cef52ee828b9e8231b1bf1db1716e6fba7fe3e5 /content/fetch.c
parentf32fa6fa0ea54696cac77ee6de5c55b21ca889a5 (diff)
downloadnetsurf-07309888d66c608977b31955215503dc355c7d33.tar.gz
netsurf-07309888d66c608977b31955215503dc355c7d33.tar.bz2
return;
Fix bug #3442642: allow scheme-specific fetchers to have a say in whether an URL can be fetched. svn path=/trunk/netsurf/; revision=13182
Diffstat (limited to 'content/fetch.c')
-rw-r--r--content/fetch.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/content/fetch.c b/content/fetch.c
index bc182f514..2a91ffef1 100644
--- a/content/fetch.c
+++ b/content/fetch.c
@@ -60,6 +60,7 @@ bool fetch_active; /**< Fetches in progress, please call fetch_poll(). */
/** Information about a fetcher for a given scheme. */
typedef struct scheme_fetcher_s {
lwc_string *scheme_name; /**< The scheme. */
+ fetcher_can_fetch can_fetch; /**< Ensure an URL can be fetched. */
fetcher_setup_fetch setup_fetch; /**< Set up a fetch. */
fetcher_start_fetch start_fetch; /**< Start a fetch. */
fetcher_abort_fetch abort_fetch; /**< Abort a fetch. */
@@ -157,6 +158,7 @@ void fetch_quit(void)
bool fetch_add_fetcher(lwc_string *scheme,
fetcher_initialise initialiser,
+ fetcher_can_fetch can_fetch,
fetcher_setup_fetch setup_fetch,
fetcher_start_fetch start_fetch,
fetcher_abort_fetch abort_fetch,
@@ -174,6 +176,7 @@ bool fetch_add_fetcher(lwc_string *scheme,
}
new_fetcher->scheme_name = scheme;
new_fetcher->refcount = 0;
+ new_fetcher->can_fetch = can_fetch;
new_fetcher->setup_fetch = setup_fetch;
new_fetcher->start_fetch = start_fetch;
new_fetcher->abort_fetch = abort_fetch;
@@ -540,16 +543,15 @@ bool fetch_can_fetch(const nsurl *url)
while (fetcher != NULL) {
lwc_string_isequal(fetcher->scheme_name, scheme, &match);
- if (match == true) {
- lwc_string_unref(scheme);
- return true;
- }
+ if (match == true)
+ break;
+
fetcher = fetcher->next_fetcher;
}
lwc_string_unref(scheme);
- return false;
+ return fetcher == NULL ? false : fetcher->can_fetch(url);
}