diff options
author | Wolfgang Denk <wd@denx.de> | 2009-04-03 22:36:44 +0200 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2009-04-03 22:36:44 +0200 |
commit | 3405f38a15eec5092ac47efe0829f10a24491c6e (patch) | |
tree | 23f646b4a0c35cf0919c80765813e1df3fe98f7f /libfdt/fdt_wip.c | |
parent | 200779e3e2a9aeda7030b171a8c39d7797019917 (diff) | |
parent | 67b89c79e72fe86b0ea0199425d880630beb95d8 (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.c | 41 |
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) |