aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2008-02-28 20:53:00 +1100
committerJon Loeliger <jdl@loeliger.com>2008-03-23 08:00:33 -0500
commitd028e84140317682140602dcc87dc3aa439e35cb (patch)
tree318a60e15bf4ef9af8c8321765b7d498dd7c9a3d
parent2b3a96761afa402ed6df4bab243a54e47ffff935 (diff)
downloaddtc-d028e84140317682140602dcc87dc3aa439e35cb.zip
dtc-d028e84140317682140602dcc87dc3aa439e35cb.tar.gz
dtc-d028e84140317682140602dcc87dc3aa439e35cb.tar.bz2
dtc: Strip redundant "name" properties
If an input device tree has "name" properties which are correct, then they are redundant (because they can be derived from the unit name). Therefore, extend the checking code for correctness of "name" properties to remove them if they are correct. dtc will still insert name properties in the output if that's of a sufficiently old version to require them. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--checks.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/checks.c b/checks.c
index 051368b..34941de 100644
--- a/checks.c
+++ b/checks.c
@@ -316,9 +316,14 @@ NODE_CHECK(explicit_phandles, NULL, ERROR);
static void check_name_properties(struct check *c, struct node *root,
struct node *node)
{
- struct property *prop;
+ struct property **pp, *prop = NULL;
+
+ for (pp = &node->proplist; *pp; pp = &((*pp)->next))
+ if (streq((*pp)->name, "name")) {
+ prop = *pp;
+ break;
+ }
- prop = get_property(node, "name");
if (!prop)
return; /* No name property, that's fine */
@@ -326,6 +331,12 @@ static void check_name_properties(struct check *c, struct node *root,
|| (memcmp(prop->val.val, node->name, node->basenamelen) != 0))
FAIL(c, "\"name\" property in %s is incorrect (\"%s\" instead"
" of base node name)", node->fullpath, prop->val.val);
+
+ /* The name property is correct, and therefore redundant. Delete it */
+ *pp = prop->next;
+ free(prop->name);
+ data_free(prop->val);
+ free(prop);
}
CHECK_IS_STRING(name_is_string, "name", ERROR);
NODE_CHECK(name_properties, NULL, ERROR, &name_is_string);