[Crosstoolchain-logs] [device-tree-compiler] 137/357: dtc: Assume properties preced subnodes in the flattened tree

Hector Oron zumbi at moszumanska.debian.org
Thu Dec 8 17:06:06 UTC 2016


This is an automated email from the git hooks/post-receive script.

zumbi pushed a commit to branch upstream/1.3.x
in repository device-tree-compiler.

commit 592ea5888c27b154e6dc4b9b3ed98978369271c8
Author: David Gibson <david at gibson.dropbear.id.au>
Date:   Tue Sep 4 10:43:03 2007 +1000

    dtc: Assume properties preced subnodes in the flattened tree
    
    With kernel commit eff2ebd207af9f501af0ef667a7d14befcb36c1b, we
    clarified that in the flattened tree format, a particular nodes
    properties are required to precede its subdnodes.
    
    At present however, both dtc and libfdt will process trees which don't
    meet this condition.  This patch simplifies the code for
    fdt_get_property() based on assuming that constraint.  dtc continues
    to be able to handle such an invalid tree - on the grounds that it's
    useful for dtc to be able to correct such a broken tree - but this
    patch adds a warning when this condition is not met while reading a
    flattened tree.
    
    Signed-off-by: David Gibson <david at gibson.dropbear.id.au>
---
 flattree.c      |  3 +++
 libfdt/fdt_ro.c | 14 ++------------
 2 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/flattree.c b/flattree.c
index e857b08..d7dc6b0 100644
--- a/flattree.c
+++ b/flattree.c
@@ -779,6 +779,9 @@ static struct node *unflatten_tree(struct inbuf *dtbuf,
 		val = flat_read_word(dtbuf);
 		switch (val) {
 		case OF_DT_PROP:
+			if (node->children)
+				fprintf(stderr, "Warning: Flat tree input has "
+					"subnodes preceding a property.\n");
 			prop = flat_read_property(dtbuf, strbuf, flags);
 			add_property(node, prop);
 			break;
diff --git a/libfdt/fdt_ro.c b/libfdt/fdt_ro.c
index 65bd1a2..6e4d3c8 100644
--- a/libfdt/fdt_ro.c
+++ b/libfdt/fdt_ro.c
@@ -197,7 +197,6 @@ const struct fdt_property *fdt_get_property(const void *fdt,
 					    int nodeoffset,
 					    const char *name, int *lenp)
 {
-	int level = 0;
 	uint32_t tag;
 	const struct fdt_property *prop;
 	int namestroff;
@@ -225,17 +224,11 @@ const struct fdt_property *fdt_get_property(const void *fdt,
 			goto fail;
 
 		case FDT_BEGIN_NODE:
-			level++;
-			break;
-
 		case FDT_END_NODE:
-			level--;
+		case FDT_NOP:
 			break;
 
 		case FDT_PROP:
-			if (level != 0)
-				continue;
-
 			err = -FDT_ERR_BADSTRUCTURE;
 			prop = fdt_offset_ptr_typed(fdt, offset, prop);
 			if (! prop)
@@ -256,14 +249,11 @@ const struct fdt_property *fdt_get_property(const void *fdt,
 			}
 			break;
 
-		case FDT_NOP:
-			break;
-
 		default:
 			err = -FDT_ERR_BADSTRUCTURE;
 			goto fail;
 		}
-	} while (level >= 0);
+	} while ((tag != FDT_BEGIN_NODE) && (tag != FDT_END_NODE));
 
 	err = -FDT_ERR_NOTFOUND;
  fail:

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/crosstoolchain/device-tree-compiler.git



More information about the Crosstoolchain-logs mailing list