From a1d409d9224e1e86ac1fd40dcccde8077bc51bae Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sat, 31 Jan 2009 01:57:15 +0000 Subject: Make urldb_match_path() iterate. svn path=/trunk/netsurf/; revision=6310 --- content/urldb.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'content/urldb.c') 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; } -- cgit v1.2.3