summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorVincent Sanders <vince@netsurf-browser.org>2013-05-03 21:17:11 +0100
committerVincent Sanders <vince@netsurf-browser.org>2013-05-03 21:17:11 +0100
commit5c57a30047b4c9330110e5de9f5f406571f9baf1 (patch)
tree019aa80504701b34e2cca51913c5625c0999b6fc /desktop
parent6c7ca26bdc88ac95feb53b647c1c3b33f602f04c (diff)
downloadnetsurf-5c57a30047b4c9330110e5de9f5f406571f9baf1.tar.gz
netsurf-5c57a30047b4c9330110e5de9f5f406571f9baf1.tar.bz2
cleanup title string ownership madness in the tree_create_folder_node() API
Diffstat (limited to 'desktop')
-rw-r--r--desktop/cookies.c35
-rw-r--r--desktop/history_global_core.c23
-rw-r--r--desktop/hotlist.c40
-rw-r--r--desktop/tree.c38
-rw-r--r--desktop/tree.h13
-rw-r--r--desktop/tree_url_node.c1
6 files changed, 62 insertions, 88 deletions
diff --git a/desktop/cookies.c b/desktop/cookies.c
index 581e1cc5b..539be3e2f 100644
--- a/desktop/cookies.c
+++ b/desktop/cookies.c
@@ -329,44 +329,33 @@ static void cookies_schedule_callback(const void *scheduled_data)
const struct cookie_data *data = scheduled_data;
struct node *node = NULL;
struct node *cookie_node = NULL;
- char *domain_cp;
assert(data != NULL);
node = cookies_find(cookies_tree_root, data->domain);
if (node == NULL) {
- domain_cp = strdup(data->domain);
- if (domain_cp == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return;
- }
- /* ownership of domain_cp passed to tree, if node creation
- * does not fail */
node = tree_create_folder_node(cookies_tree,
- cookies_tree_root, domain_cp,
+ cookies_tree_root,
+ data->domain,
false, false, false);
if (node != NULL) {
- tree_set_node_user_callback(node, cookies_node_callback,
+ tree_set_node_user_callback(node,
+ cookies_node_callback,
NULL);
tree_set_node_icon(cookies_tree, node, folder_icon);
-
- } else {
- free(domain_cp);
}
}
- if (node == NULL)
- return;
-
- cookie_node = cookies_find(node, data->name);
- if (cookie_node == NULL)
- cookies_create_cookie_node(node, data);
- else
- cookies_update_cookie_node(cookie_node, data);
+ if (node != NULL) {
+ cookie_node = cookies_find(node, data->name);
+ if (cookie_node == NULL) {
+ cookies_create_cookie_node(node, data);
+ } else {
+ cookies_update_cookie_node(cookie_node, data);
+ }
- return;
+ }
}
/**
diff --git a/desktop/history_global_core.c b/desktop/history_global_core.c
index 3222dc7b8..2a941e05d 100644
--- a/desktop/history_global_core.c
+++ b/desktop/history_global_core.c
@@ -175,33 +175,24 @@ static bool history_global_initialise_node(const char *title,
time_t base, int days_back)
{
struct tm *full_time;
- char *buffer;
struct node *node;
base += days_back * 60 * 60 * 24;
if (title == NULL) {
full_time = localtime(&base);
- buffer = strdup(messages_get(weekday_msg_name[full_time->tm_wday]));
- } else {
- buffer = strdup(title);
+ title = messages_get(weekday_msg_name[full_time->tm_wday]);
}
- if (buffer == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return false;
- }
-
- node = tree_create_folder_node(NULL, NULL, buffer,
- false, true, true);
+ node = tree_create_folder_node(NULL, NULL, title, false, true, true);
if (node == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- free(buffer);
+ warn_user(messages_get_errorcode(NSERROR_NOMEM), 0);
return false;
}
- if (folder_icon != NULL)
+
+ if (folder_icon != NULL) {
tree_set_node_icon(global_history_tree, node, folder_icon);
+ }
+
tree_set_node_user_callback(node, history_global_node_callback, NULL);
global_history_base_node[global_history_base_node_count] = node;
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index e2386fc8e..20cc8ea26 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -121,7 +121,6 @@ bool hotlist_initialise(struct tree *tree, const char *hotlist_path,
{
struct node *node;
const struct url_data *url_data;
- char *name;
int hlst_loop;
/* Either load or create a hotlist */
@@ -143,18 +142,15 @@ bool hotlist_initialise(struct tree *tree, const char *hotlist_path,
return true;
}
-
/* failed to load hotlist file, use default list */
- name = strdup("NetSurf");
- if (name == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return false;
- }
- node = tree_create_folder_node(hotlist_tree, hotlist_tree_root,
- name, true, false, false);
+ node = tree_create_folder_node(hotlist_tree,
+ hotlist_tree_root,
+ messages_get("NetSurf"),
+ true,
+ false,
+ false);
if (node == NULL) {
- free(name);
+ warn_user(messages_get_errorcode(NSERROR_NOMEM), 0);
return false;
}
@@ -373,14 +369,7 @@ void hotlist_collapse_addresses(void)
void hotlist_add_folder(bool selected)
{
struct node *node, *parent = NULL;
- struct node_element *element;
- char *title = strdup("Untitled");
- if (title == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return;
- }
creating_node = true;
if (selected == true) {
@@ -394,16 +383,21 @@ void hotlist_add_folder(bool selected)
parent = tree_get_default_folder_node(hotlist_tree);
}
- node = tree_create_folder_node(hotlist_tree, parent, title,
- true, false, false);
+ node = tree_create_folder_node(hotlist_tree,
+ parent,
+ messages_get("Untitled"),
+ true,
+ false,
+ false);
if (node == NULL) {
- free(title);
+ warn_user(messages_get_errorcode(NSERROR_NOMEM), 0);
return;
}
+
tree_set_node_user_callback(node, hotlist_node_callback, NULL);
tree_set_node_icon(hotlist_tree, node, folder_icon);
- element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
- tree_start_edit(hotlist_tree, element);
+ tree_start_edit(hotlist_tree,
+ tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL));
}
/**
diff --git a/desktop/tree.c b/desktop/tree.c
index af64be83b..e72ef6001 100644
--- a/desktop/tree.c
+++ b/desktop/tree.c
@@ -233,26 +233,19 @@ struct tree *tree_create(unsigned int flags,
const struct treeview_table *callbacks, void *client_data)
{
struct tree *tree;
- char *title;
tree = calloc(sizeof(struct tree), 1);
if (tree == NULL) {
LOG(("calloc failed"));
- warn_user("NoMemory", 0);
+ warn_user(messages_get_errorcode(NSERROR_NOMEM), 0);
return NULL;
}
- title = strdup("Root");
- if (title == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- free(tree);
- return NULL;
- }
- tree->root = tree_create_folder_node(NULL, NULL, title,
+ tree->root = tree_create_folder_node(NULL,
+ NULL,
+ messages_get("Root"),
false, false, false);
if (tree->root == NULL) {
- free(title);
free(tree);
return NULL;
}
@@ -553,18 +546,7 @@ static void tree_recalculate_node_sizes(struct tree *tree, struct node *node,
}
-/**
- * Creates a folder node with the specified title, and optionally links it into
- * the tree.
- *
- * \param tree the owner tree of 'parent', may be NULL
- * \param parent the parent node, or NULL not to link
- * \param title the node title (not copied, used directly)
- * \param editable if true, the node title will be editable
- * \param retain_in_memory if true, the node will stay in memory after deletion
- * \param deleted if true, the node is created with the deleted flag
- * \return the newly created node.
- */
+/* exported interface documented in desktop/tree.h */
struct node *tree_create_folder_node(struct tree *tree, struct node *parent,
const char *title, bool editable, bool retain_in_memory,
bool deleted)
@@ -575,16 +557,20 @@ struct node *tree_create_folder_node(struct tree *tree, struct node *parent,
node = calloc(sizeof(struct node), 1);
if (node == NULL) {
- LOG(("calloc failed"));
- warn_user("NoMemory", 0);
return NULL;
}
+
+ node->data.text = strdup(title);
+ if (node->data.text == NULL) {
+ free(node);
+ return NULL;
+ }
+
node->folder = true;
node->retain_in_memory = retain_in_memory;
node->deleted = deleted;
node->data.parent = node;
node->data.type = NODE_ELEMENT_TEXT;
- node->data.text = title;
node->data.flag = TREE_ELEMENT_TITLE;
node->data.editable = editable;
node->sort = NULL;
diff --git a/desktop/tree.h b/desktop/tree.h
index 8ac505783..b88108776 100644
--- a/desktop/tree.h
+++ b/desktop/tree.h
@@ -137,6 +137,19 @@ void tree_setup_colours(void);
struct tree *tree_create(unsigned int flags,
const struct treeview_table *callbacks,
void *client_data);
+
+/**
+ * Creates a folder node with the specified title, and optionally links it into
+ * the tree.
+ *
+ * \param tree the owner tree of 'parent', may be NULL
+ * \param parent the parent node, or NULL not to link
+ * \param title the node title
+ * \param editable if true, the node title will be editable
+ * \param retain_in_memory if true, the node will stay in memory after deletion
+ * \param deleted if true, the node is created with the deleted flag
+ * \return the newly created node or NULL on error.
+ */
struct node *tree_create_folder_node(struct tree *tree, struct node *parent,
const char *title, bool editable, bool retain_in_memory,
bool deleted);
diff --git a/desktop/tree_url_node.c b/desktop/tree_url_node.c
index 76bc8a47c..7646048bb 100644
--- a/desktop/tree_url_node.c
+++ b/desktop/tree_url_node.c
@@ -683,6 +683,7 @@ static bool tree_url_load_directory_cb(dom_node *node, void *ctx)
dir = tree_create_folder_node(tctx->tree, tctx->directory,
title, true, false, false);
+ free(title);
if (dir == NULL) {
dom_string_unref(name);
return false;