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 a4652c6e787..6025fa1fe8f 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)  	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)  | 
