summaryrefslogtreecommitdiff
path: root/desktop/tree_url_node.c
diff options
context:
space:
mode:
authorVincent Sanders <vince@netsurf-browser.org>2013-05-04 09:49:11 +0100
committerVincent Sanders <vince@netsurf-browser.org>2013-05-04 09:49:11 +0100
commit52c5cccdeb15db5f996a661657d5eb195f930b00 (patch)
tree2fbb0cb03376e91fd6f050666dade50f81d40c70 /desktop/tree_url_node.c
parent926be456b4316012e12c05a82f56637ce920397b (diff)
downloadnetsurf-52c5cccdeb15db5f996a661657d5eb195f930b00.tar.gz
netsurf-52c5cccdeb15db5f996a661657d5eb195f930b00.tar.bz2
cleanup tree_create_leaf_node text ownership
Diffstat (limited to 'desktop/tree_url_node.c')
-rw-r--r--desktop/tree_url_node.c46
1 files changed, 24 insertions, 22 deletions
diff --git a/desktop/tree_url_node.c b/desktop/tree_url_node.c
index 7646048bb..938cd1d69 100644
--- a/desktop/tree_url_node.c
+++ b/desktop/tree_url_node.c
@@ -126,35 +126,41 @@ void tree_url_node_cleanup()
* \param parent the node to link to
* \param url the URL (copied)
* \param data the URL data to use
- * \param title the custom title to use
+ * \param title custom title to use or NULL to use url
* \return the node created, or NULL for failure
*/
struct node *tree_create_URL_node(struct tree *tree, struct node *parent,
nsurl *url, const char *title,
tree_node_user_callback user_callback, void *callback_data)
{
- struct node *node;
+ struct node *node = NULL;
struct node_element *element;
- char *text_cp, *squashed;
- squashed = squash_whitespace(title ? title : nsurl_access(url));
- text_cp = strdup(squashed);
- if (text_cp == NULL) {
- LOG(("malloc failed"));
- warn_user("NoMemory", 0);
- return NULL;
+ if (title == NULL) {
+ node = tree_create_leaf_node(tree,
+ parent,
+ nsurl_access(url),
+ true, false, false);
+ } else {
+ char *squashed;
+
+ squashed = squash_whitespace(title);
+ if (squashed != NULL) {
+ node = tree_create_leaf_node(tree,
+ parent,
+ squashed,
+ true, false, false);
+ free(squashed);
+ }
}
- free(squashed);
- node = tree_create_leaf_node(tree, parent, text_cp, true, false,
- false);
if (node == NULL) {
- free(text_cp);
return NULL;
}
- if (user_callback != NULL)
+ if (user_callback != NULL) {
tree_set_node_user_callback(node, user_callback,
callback_data);
+ }
tree_create_node_element(node, NODE_ELEMENT_BITMAP,
TREE_ELEMENT_THUMBNAIL, false);
@@ -165,7 +171,7 @@ struct node *tree_create_URL_node(struct tree *tree, struct node *parent,
element = tree_create_node_element(node, NODE_ELEMENT_TEXT,
TREE_ELEMENT_URL, true);
if (element != NULL) {
- text_cp = strdup(nsurl_access(url));
+ char *text_cp = strdup(nsurl_access(url));
if (text_cp == NULL) {
tree_delete_node(tree, node, false);
LOG(("malloc failed"));
@@ -194,22 +200,18 @@ struct node *tree_create_URL_node_readonly(struct tree *tree,
{
struct node *node;
struct node_element *element;
- char *title;
+ const char *title;
assert(url && data);
if (data->title != NULL) {
- title = strdup(data->title);
+ title = data->title;
} else {
- title = strdup(nsurl_access(url));
+ title = nsurl_access(url);
}
- if (title == NULL)
- return NULL;
-
node = tree_create_leaf_node(tree, parent, title, false, false, false);
if (node == NULL) {
- free(title);
return NULL;
}