summaryrefslogtreecommitdiff
path: root/libfdt/fdt_wip.c
diff options
context:
space:
mode:
authorWolfgang Denk <wd@denx.de>2009-04-03 22:36:44 +0200
committerWolfgang Denk <wd@denx.de>2009-04-03 22:36:44 +0200
commit3405f38a15eec5092ac47efe0829f10a24491c6e (patch)
tree23f646b4a0c35cf0919c80765813e1df3fe98f7f /libfdt/fdt_wip.c
parent200779e3e2a9aeda7030b171a8c39d7797019917 (diff)
parent67b89c79e72fe86b0ea0199425d880630beb95d8 (diff)
Merge branch 'master' of git://git.denx.de/u-boot-fdt
Diffstat (limited to 'libfdt/fdt_wip.c')
-rw-r--r--libfdt/fdt_wip.c41
1 files changed, 7 insertions, 34 deletions
diff --git a/libfdt/fdt_wip.c b/libfdt/fdt_wip.c
index e30c81d91a..e373677c50 100644
--- a/libfdt/fdt_wip.c
+++ b/libfdt/fdt_wip.c
@@ -98,41 +98,14 @@ int fdt_nop_property(void *fdt, int nodeoffset, const char *name)
return 0;
}
-int _fdt_node_end_offset(void *fdt, int nodeoffset)
+int _fdt_node_end_offset(void *fdt, int offset)
{
- int level = 0;
- uint32_t tag;
- int offset, nextoffset;
-
- tag = fdt_next_tag(fdt, nodeoffset, &nextoffset);
- if (tag != FDT_BEGIN_NODE)
- return -FDT_ERR_BADOFFSET;
- do {
- offset = nextoffset;
- tag = fdt_next_tag(fdt, offset, &nextoffset);
-
- switch (tag) {
- case FDT_END:
- return offset;
-
- case FDT_BEGIN_NODE:
- level++;
- break;
-
- case FDT_END_NODE:
- level--;
- break;
-
- case FDT_PROP:
- case FDT_NOP:
- break;
-
- default:
- return -FDT_ERR_BADSTRUCTURE;
- }
- } while (level >= 0);
-
- return nextoffset;
+ int depth = 0;
+
+ while ((offset >= 0) && (depth >= 0))
+ offset = fdt_next_node(fdt, offset, &depth);
+
+ return offset;
}
int fdt_nop_node(void *fdt, int nodeoffset)