From 92b3bdeda099efea42eeb0d0712d03a8e8927595 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sat, 31 Jan 2009 02:12:06 +0000 Subject: urldb_delete_cookie_paths() -> iteration svn path=/trunk/netsurf/; revision=6312 --- content/urldb.c | 53 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 18 deletions(-) (limited to 'content/urldb.c') diff --git a/content/urldb.c b/content/urldb.c index 42617985e..592df5161 100644 --- a/content/urldb.c +++ b/content/urldb.c @@ -3660,26 +3660,43 @@ void urldb_delete_cookie_paths(const char *domain, const char *path, assert(parent); - for (c = parent->cookies; c; c = c->next) { - if (!strcmp(c->domain, domain) && !strcmp(c->path, path) && - !strcmp(c->name, name)) { - if (c->prev) - c->prev->next = c->next; - else - parent->cookies = c->next; - if (c->next) - c->next->prev = c->prev; - else - parent->cookies_end = c->prev; - if (!parent->cookies) - cookies_update(domain, NULL); - urldb_free_cookie(c); - return; + do { + for (c = p->cookies; c; c = c->next) { + if (strcmp(c->domain, domain) == 0 && + strcmp(c->path, path) == 0 && + strcmp(c->name, name) == 0) { + if (c->prev) + c->prev->next = c->next; + else + p->cookies = c->next; + + if (c->next) + c->next->prev = c->prev; + else + p->cookies_end = c->prev; + + if (p->cookies == NULL) + cookies_update(domain, NULL); + + urldb_free_cookie(c); + + return; + } } - } - for (p = parent->children; p; p = p->next) - urldb_delete_cookie_paths(domain, path, name, p); + if (p->children) { + p = p->children; + } else { + while (p != parent) { + if (p->next != NULL) { + p = p->next; + break; + } + + p = p->parent; + } + } + } while(p != parent); } /** -- cgit v1.2.3