Since property values can be empty, we need property value pointer to be non-NULL to distinguish those properties from non-existing properties. This adds a static u32 to which empty properties set their value pointer. Also, the value memory is only freed, if property length is not zero. Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@xxxxxxxxx> --- Cc: barebox@xxxxxxxxxxxxxxxxxxx --- drivers/of/base.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/drivers/of/base.c b/drivers/of/base.c index 7926d5d..a100a17 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -1501,6 +1501,8 @@ struct device_node *of_new_node(struct device_node *parent, const char *name) return node; } +static u32 empty_prop_value; + struct property *of_new_property(struct device_node *node, const char *name, const void *data, int len) { @@ -1515,6 +1517,7 @@ struct property *of_new_property(struct device_node *node, const char *name, goto bail_out; prop->length = len; + prop->value = &empty_prop_value; if (len) { prop->value = xzalloc(len); if (!prop->value) @@ -1541,7 +1544,8 @@ void of_delete_property(struct property *pp) list_del(&pp->list); free(pp->name); - free(pp->value); + if (pp->length) + free(pp->value); free(pp); } -- 1.7.2.5 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox