mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-22 12:12:35 +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 */
|
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 */
|
/* Saving */
|
||||||
static void urldb_save_search_tree(struct search_node *root, FILE *fp);
|
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,
|
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);
|
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
|
#ifdef TEST_URLDB
|
||||||
int option_expire_url = 0;
|
int option_expire_url = 0;
|
||||||
|
|
||||||
|
@ -51,6 +51,9 @@ struct cookie_data {
|
|||||||
|
|
||||||
struct bitmap;
|
struct bitmap;
|
||||||
|
|
||||||
|
/* Destruction */
|
||||||
|
void urldb_destroy(void);
|
||||||
|
|
||||||
/* Persistence support */
|
/* Persistence support */
|
||||||
void urldb_load(const char *filename);
|
void urldb_load(const char *filename);
|
||||||
void urldb_save(const char *filename);
|
void urldb_save(const char *filename);
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "netsurf/utils/config.h"
|
#include "netsurf/utils/config.h"
|
||||||
#include "netsurf/content/fetch.h"
|
#include "netsurf/content/fetch.h"
|
||||||
#include "netsurf/content/fetchcache.h"
|
#include "netsurf/content/fetchcache.h"
|
||||||
|
#include "netsurf/content/urldb.h"
|
||||||
#include "netsurf/desktop/netsurf.h"
|
#include "netsurf/desktop/netsurf.h"
|
||||||
#include "netsurf/desktop/browser.h"
|
#include "netsurf/desktop/browser.h"
|
||||||
#include "netsurf/desktop/gui.h"
|
#include "netsurf/desktop/gui.h"
|
||||||
@ -110,6 +111,8 @@ void netsurf_exit(void)
|
|||||||
fetch_quit();
|
fetch_quit();
|
||||||
LOG(("Closing utf8"));
|
LOG(("Closing utf8"));
|
||||||
utf8_finalise();
|
utf8_finalise();
|
||||||
|
LOG(("Destroying URLdb"));
|
||||||
|
urldb_destroy();
|
||||||
LOG(("Exited successfully"));
|
LOG(("Exited successfully"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user