diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-01-31 01:57:15 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-01-31 01:57:15 +0000 |
commit | a1d409d9224e1e86ac1fd40dcccde8077bc51bae (patch) | |
tree | b486e8aad2775c38117e19156a73f0c93214c9a8 | |
parent | 887d7984cbd9500f97590e29cc214942fbc234b2 (diff) | |
download | netsurf-a1d409d9224e1e86ac1fd40dcccde8077bc51bae.tar.gz netsurf-a1d409d9224e1e86ac1fd40dcccde8077bc51bae.tar.bz2 |
Make urldb_match_path() iterate.
svn path=/trunk/netsurf/; revision=6310
-rw-r--r-- | content/urldb.c | 29 |
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; } |