summaryrefslogtreecommitdiff
path: root/content/urldb.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2009-01-31 02:12:06 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2009-01-31 02:12:06 +0000
commit92b3bdeda099efea42eeb0d0712d03a8e8927595 (patch)
tree42868dc31bb9f5b9bb66c93e2ae83278e3c285be /content/urldb.c
parent45b222ab500241728ada83db6e126d9bcad2b024 (diff)
downloadnetsurf-92b3bdeda099efea42eeb0d0712d03a8e8927595.tar.gz
netsurf-92b3bdeda099efea42eeb0d0712d03a8e8927595.tar.bz2
urldb_delete_cookie_paths() -> iteration
svn path=/trunk/netsurf/; revision=6312
Diffstat (limited to 'content/urldb.c')
-rw-r--r--content/urldb.c53
1 files changed, 35 insertions, 18 deletions
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);
}
/**