summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2009-01-31 01:57:15 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2009-01-31 01:57:15 +0000
commita1d409d9224e1e86ac1fd40dcccde8077bc51bae (patch)
treeb486e8aad2775c38117e19156a73f0c93214c9a8
parent887d7984cbd9500f97590e29cc214942fbc234b2 (diff)
downloadnetsurf-a1d409d9224e1e86ac1fd40dcccde8077bc51bae.tar.gz
netsurf-a1d409d9224e1e86ac1fd40dcccde8077bc51bae.tar.bz2
Make urldb_match_path() iterate.
svn path=/trunk/netsurf/; revision=6310
-rw-r--r--content/urldb.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/content/urldb.c b/content/urldb.c
index d8a85d5ea..23a150dee 100644
--- a/content/urldb.c
+++ b/content/urldb.c
@@ -1901,26 +1901,29 @@ struct path_data *urldb_find_url(const char *url)
struct path_data *urldb_match_path(const struct path_data *parent,
const char *path, const char *scheme, unsigned short port)
{
- struct path_data *p;
+ const struct path_data *p = parent;
const char *slash;
- if (*path == '\0')
- return (struct path_data *)parent;
+ do {
+ if (*path == '\0')
+ return (struct path_data *) p;
- slash = strchr(path + 1, '/');
- if (!slash)
- slash = path + strlen(path);
+ slash = strchr(path + 1, '/');
+ if (!slash)
+ slash = path + strlen(path);
- for (p = parent->children; p; p = p->next) {
if (strncmp(p->segment, path + 1, slash - path - 1) == 0 &&
strcmp(p->scheme, scheme) == 0 &&
- p->port == port)
- break;
- }
+ p->port == port) {
+ /* Match so far, go down tree */
+ p = p->children;
- if (p) {
- return urldb_match_path(p, slash, scheme, port);
- }
+ path = slash;
+ } else {
+ /* No match, try next sibling */
+ p = p->next;
+ }
+ } while (p != NULL);
return NULL;
}