diff options
author | Richard Wilson <rjw@netsurf-browser.org> | 2006-07-16 21:42:37 +0000 |
---|---|---|
committer | Richard Wilson <rjw@netsurf-browser.org> | 2006-07-16 21:42:37 +0000 |
commit | 0309e937e6bf13bbea5f1a95721919e0524eeab8 (patch) | |
tree | ec578cb987471c7ab16d1e8d921f647d220ac903 /content | |
parent | 81512fa939c2cfa759b80a48a89f39fdc5238cd4 (diff) | |
download | netsurf-0309e937e6bf13bbea5f1a95721919e0524eeab8.tar.gz netsurf-0309e937e6bf13bbea5f1a95721919e0524eeab8.tar.bz2 |
Allow the user to delete cookies.
svn path=/trunk/netsurf/; revision=2770
Diffstat (limited to 'content')
-rw-r--r-- | content/urldb.c | 54 | ||||
-rw-r--r-- | content/urldb.h | 1 |
2 files changed, 54 insertions, 1 deletions
diff --git a/content/urldb.c b/content/urldb.c index 11cfe2ca8..a405d7e3d 100644 --- a/content/urldb.c +++ b/content/urldb.c @@ -245,6 +245,8 @@ static bool urldb_insert_cookie(struct cookie_internal_data *c, const char *sche static void urldb_free_cookie(struct cookie_internal_data *c); static bool urldb_concat_cookie(struct cookie_internal_data *c, int *used, int *alloc, char **buf); +static void urldb_delete_cookie_hosts(const char *domain, const char *path, const char *name, struct host_part *parent); +static void urldb_delete_cookie_paths(const char *domain, const char *path, const char *name, struct path_data *parent); static void urldb_save_cookie_hosts(FILE *fp, struct host_part *parent); static void urldb_save_cookie_paths(FILE *fp, struct path_data *parent); @@ -2372,6 +2374,7 @@ char *urldb_get_cookie(const char *url, const char *referer) version = c->version; c->last_used = now; + cookies_update(c->domain, (struct cookie_data *)c); count++; } @@ -2411,7 +2414,7 @@ char *urldb_get_cookie(const char *url, const char *referer) version = c->version; c->last_used = now; - + cookies_update(c->domain, (struct cookie_data *)c); count++; } } @@ -2454,6 +2457,7 @@ char *urldb_get_cookie(const char *url, const char *referer) version = c->version; c->last_used = now; + cookies_update(c->domain, (struct cookie_data *)c); count++; } @@ -3190,6 +3194,54 @@ void urldb_load_cookies(const char *filename) } /** + * Delete a cookie + * + * \param domain The cookie's domain + * \param path The cookie's path + * \param name The cookie's name + */ +void urldb_delete_cookie(const char *domain, const char *path, const char *name) +{ + urldb_delete_cookie_hosts(domain, path, name, &db_root); +} + +void urldb_delete_cookie_hosts(const char *domain, const char *path, const char *name, struct host_part *parent) +{ + assert(parent); + + urldb_delete_cookie_paths(domain, path, name, &parent->paths); + + for (struct host_part *h = parent->children; h; h = h->next) + urldb_delete_cookie_hosts(domain, path, name, h); +} + +void urldb_delete_cookie_paths(const char *domain, const char *path, const char *name, struct path_data *parent) +{ + struct cookie_internal_data *c; + + 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; + if (!parent->cookies) + cookies_update(domain, NULL); + urldb_free_cookie(c); + return; + } + } + + for (struct path_data *p = parent->children; p; p = p->next) + urldb_delete_cookie_paths(domain, path, name, p); +} + +/** * Save persistent cookies to file * * \param filename Path to save to diff --git a/content/urldb.h b/content/urldb.h index 699c89674..20d97ebca 100644 --- a/content/urldb.h +++ b/content/urldb.h @@ -96,6 +96,7 @@ void urldb_dump(void); /* Cookies */ bool urldb_set_cookie(const char *header, const char *url); char *urldb_get_cookie(const char *url, const char *referer); +void urldb_delete_cookie(const char *domain, const char *path, const char *name); void urldb_load_cookies(const char *filename); void urldb_save_cookies(const char *filename); |