mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-22 04:02:34 +03:00
Add URLdb destruction functionality
svn path=/trunk/netsurf/; revision=3115
This commit is contained in:
parent
e2d7630ae8
commit
5b3f0755f6
140
content/urldb.c
140
content/urldb.c
@ -178,6 +178,13 @@ struct search_node {
|
||||
struct search_node *right; /**< Right subtree */
|
||||
};
|
||||
|
||||
/* Destruction */
|
||||
static void urldb_destroy_host_tree(struct host_part *root);
|
||||
static void urldb_destroy_path_tree(struct path_data *root);
|
||||
static void urldb_destroy_path_node_content(struct path_data *node);
|
||||
static void urldb_destroy_cookie(struct cookie_internal_data *c);
|
||||
static void urldb_destroy_search_tree(struct search_node *root);
|
||||
|
||||
/* Saving */
|
||||
static void urldb_save_search_tree(struct search_node *root, FILE *fp);
|
||||
static void urldb_count_urls(const struct path_data *root, time_t expiry,
|
||||
@ -3445,6 +3452,139 @@ char *urldb_get_cache_data(const char *url) {
|
||||
return filename_as_url(p->cache.filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy urldb
|
||||
*/
|
||||
void urldb_destroy(void)
|
||||
{
|
||||
struct host_part *a, *b;
|
||||
|
||||
/* Clean up search trees */
|
||||
for (int i = 0; i < NUM_SEARCH_TREES; i++) {
|
||||
if (search_trees[i] != &empty)
|
||||
urldb_destroy_search_tree(search_trees[i]);
|
||||
}
|
||||
|
||||
/* And database */
|
||||
for (a = db_root.children; a; a = b) {
|
||||
b = a->next;
|
||||
urldb_destroy_host_tree(a);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a host tree
|
||||
*
|
||||
* \param root Root node of tree to destroy
|
||||
*/
|
||||
void urldb_destroy_host_tree(struct host_part *root)
|
||||
{
|
||||
struct host_part *a, *b;
|
||||
struct path_data *p, *q;
|
||||
|
||||
/* Destroy children */
|
||||
for (a = root->children; a; a = b) {
|
||||
b = a->next;
|
||||
urldb_destroy_host_tree(a);
|
||||
}
|
||||
|
||||
/* Now clean up paths */
|
||||
for (p = root->paths.children; p; p = q) {
|
||||
q = p->next;
|
||||
urldb_destroy_path_tree(p);
|
||||
}
|
||||
|
||||
/* Root path */
|
||||
urldb_destroy_path_node_content(&root->paths);
|
||||
|
||||
/* An ourselves */
|
||||
free(root->part);
|
||||
free(root);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a path tree
|
||||
*
|
||||
* \param root Root node of tree to destroy
|
||||
*/
|
||||
void urldb_destroy_path_tree(struct path_data *root)
|
||||
{
|
||||
struct path_data *p, *q;
|
||||
|
||||
/* Destroy children */
|
||||
for (p = root->children; p; p = q) {
|
||||
q = p->next;
|
||||
urldb_destroy_path_tree(p);
|
||||
}
|
||||
|
||||
/* And ourselves */
|
||||
urldb_destroy_path_node_content(root);
|
||||
free(root);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy the contents of a path node
|
||||
*
|
||||
* \param node Node to destroy contents of (does not destroy node)
|
||||
*/
|
||||
void urldb_destroy_path_node_content(struct path_data *node)
|
||||
{
|
||||
struct cookie_internal_data *a, *b;
|
||||
|
||||
free(node->url);
|
||||
free(node->scheme);
|
||||
free(node->segment);
|
||||
for (unsigned int i = 0; i < node->frag_cnt; i++)
|
||||
free(node->fragment[i]);
|
||||
free(node->fragment);
|
||||
|
||||
if (node->thumb)
|
||||
bitmap_destroy(node->thumb);
|
||||
|
||||
free(node->urld.title);
|
||||
free(node->auth.realm);
|
||||
free(node->auth.auth);
|
||||
|
||||
for (a = node->cookies; a; a = b) {
|
||||
b = a->next;
|
||||
urldb_destroy_cookie(a);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a cookie node
|
||||
*
|
||||
* \param c Cookie to destroy
|
||||
*/
|
||||
void urldb_destroy_cookie(struct cookie_internal_data *c)
|
||||
{
|
||||
free(c->name);
|
||||
free(c->value);
|
||||
free(c->comment);
|
||||
free(c->domain);
|
||||
free(c->path);
|
||||
|
||||
free(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a search tree
|
||||
*
|
||||
* \param root Root node of tree to destroy
|
||||
*/
|
||||
void urldb_destroy_search_tree(struct search_node *root)
|
||||
{
|
||||
/* Destroy children */
|
||||
if (root->left != &empty)
|
||||
urldb_destroy_search_tree(root->left);
|
||||
if (root->right != &empty)
|
||||
urldb_destroy_search_tree(root->right);
|
||||
|
||||
/* And destroy ourselves */
|
||||
free(root);
|
||||
}
|
||||
|
||||
|
||||
#ifdef TEST_URLDB
|
||||
int option_expire_url = 0;
|
||||
|
||||
|
@ -51,6 +51,9 @@ struct cookie_data {
|
||||
|
||||
struct bitmap;
|
||||
|
||||
/* Destruction */
|
||||
void urldb_destroy(void);
|
||||
|
||||
/* Persistence support */
|
||||
void urldb_load(const char *filename);
|
||||
void urldb_save(const char *filename);
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "netsurf/utils/config.h"
|
||||
#include "netsurf/content/fetch.h"
|
||||
#include "netsurf/content/fetchcache.h"
|
||||
#include "netsurf/content/urldb.h"
|
||||
#include "netsurf/desktop/netsurf.h"
|
||||
#include "netsurf/desktop/browser.h"
|
||||
#include "netsurf/desktop/gui.h"
|
||||
@ -110,6 +111,8 @@ void netsurf_exit(void)
|
||||
fetch_quit();
|
||||
LOG(("Closing utf8"));
|
||||
utf8_finalise();
|
||||
LOG(("Destroying URLdb"));
|
||||
urldb_destroy();
|
||||
LOG(("Exited successfully"));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user