From 52c5cccdeb15db5f996a661657d5eb195f930b00 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sat, 4 May 2013 09:49:11 +0100 Subject: cleanup tree_create_leaf_node text ownership --- desktop/tree_url_node.c | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) (limited to 'desktop/tree_url_node.c') 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; } -- cgit v1.2.3