diff options
Diffstat (limited to 'scripts/dtc/libfdt/fdt_wip.c')
-rw-r--r-- | scripts/dtc/libfdt/fdt_wip.c | 41 |
1 files changed, 7 insertions, 34 deletions
diff --git a/scripts/dtc/libfdt/fdt_wip.c b/scripts/dtc/libfdt/fdt_wip.c index a4652c6e787e..6025fa1fe8fe 100644 --- a/scripts/dtc/libfdt/fdt_wip.c +++ b/scripts/dtc/libfdt/fdt_wip.c | |||
@@ -94,41 +94,14 @@ int fdt_nop_property(void *fdt, int nodeoffset, const char *name) | |||
94 | return 0; | 94 | return 0; |
95 | } | 95 | } |
96 | 96 | ||
97 | int _fdt_node_end_offset(void *fdt, int nodeoffset) | 97 | int _fdt_node_end_offset(void *fdt, int offset) |
98 | { | 98 | { |
99 | int level = 0; | 99 | int depth = 0; |
100 | uint32_t tag; | 100 | |
101 | int offset, nextoffset; | 101 | while ((offset >= 0) && (depth >= 0)) |
102 | 102 | offset = fdt_next_node(fdt, offset, &depth); | |
103 | tag = fdt_next_tag(fdt, nodeoffset, &nextoffset); | 103 | |
104 | if (tag != FDT_BEGIN_NODE) | 104 | return offset; |
105 | return -FDT_ERR_BADOFFSET; | ||
106 | do { | ||
107 | offset = nextoffset; | ||
108 | tag = fdt_next_tag(fdt, offset, &nextoffset); | ||
109 | |||
110 | switch (tag) { | ||
111 | case FDT_END: | ||
112 | return offset; | ||
113 | |||
114 | case FDT_BEGIN_NODE: | ||
115 | level++; | ||
116 | break; | ||
117 | |||
118 | case FDT_END_NODE: | ||
119 | level--; | ||
120 | break; | ||
121 | |||
122 | case FDT_PROP: | ||
123 | case FDT_NOP: | ||
124 | break; | ||
125 | |||
126 | default: | ||
127 | return -FDT_ERR_BADSTRUCTURE; | ||
128 | } | ||
129 | } while (level >= 0); | ||
130 | |||
131 | return nextoffset; | ||
132 | } | 105 | } |
133 | 106 | ||
134 | int fdt_nop_node(void *fdt, int nodeoffset) | 107 | int fdt_nop_node(void *fdt, int nodeoffset) |