From 0f8acff8d61accde3b3cd69327a10a94bac92088 Mon Sep 17 00:00:00 2001 From: Wei Yang Date: Tue, 2 Dec 2014 14:24:15 +0800 Subject: core/device: wrap a function to destroy a dt_node When destroying a dt_node, it needs to release both the name and itself. And there are several places to do the release. This patch wrap a function dt_destroy() to make sure both of the elements of a dt_node are released when it is not used any more. Signed-off-by: Wei Yang Signed-off-by: Stewart Smith --- core/device.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'core/device.c') diff --git a/core/device.c b/core/device.c index ffc38f8..51ddbdb 100644 --- a/core/device.c +++ b/core/device.c @@ -84,6 +84,15 @@ bool dt_attach_root(struct dt_node *parent, struct dt_node *root) return true; } + +static inline void dt_destroy(struct dt_node *dn) +{ + if (!dn) + return; + + free_name(dn->name); + free(dn); +} struct dt_node *dt_new(struct dt_node *parent, const char *name) { @@ -92,8 +101,7 @@ struct dt_node *dt_new(struct dt_node *parent, const char *name) new = new_node(name); if (!dt_attach_root(parent, new)) { - free_name(new->name); - free(new); + dt_destroy(new); return NULL; } return new; @@ -115,8 +123,7 @@ struct dt_node *dt_new_addr(struct dt_node *parent, const char *name, new = new_node(lname); free(lname); if (!dt_attach_root(parent, new)) { - free_name(new->name); - free(new); + dt_destroy(new); return NULL; } return new; @@ -139,8 +146,7 @@ struct dt_node *dt_new_2addr(struct dt_node *parent, const char *name, new = new_node(lname); free(lname); if (!dt_attach_root(parent, new)) { - free_name(new->name); - free(new); + dt_destroy(new); return NULL; } return new; @@ -634,8 +640,7 @@ void dt_free(struct dt_node *node) if (node->parent) list_del_from(&node->parent->children, &node->list); - free_name(node->name); - free(node); + dt_destroy(node); } int dt_expand_node(struct dt_node *node, const void *fdt, int fdt_node) -- cgit v1.1