]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - libfdt/fdt_ro.c
libfdt: Fix bug in fdt_subnode_offset_namelen()
[karo-tx-uboot.git] / libfdt / fdt_ro.c
index b705f91ecb760cd8120589f23865d58363ff56f0..fdc9c29d2f1be93bda4de8679ab04f73d9ac4074 100644 (file)
@@ -112,12 +112,12 @@ int fdt_num_mem_rsv(const void *fdt)
 int fdt_subnode_offset_namelen(const void *fdt, int offset,
                               const char *name, int namelen)
 {
-       int depth;
+       int depth = 0;
 
        FDT_CHECK_HEADER(fdt);
 
-       for (depth = 0;
-            offset >= 0;
+       for (depth = 0, offset = fdt_next_node(fdt, offset, &depth);
+            (offset >= 0) && (depth > 0);
             offset = fdt_next_node(fdt, offset, &depth)) {
                if (depth < 0)
                        return -FDT_ERR_NOTFOUND;
@@ -126,7 +126,10 @@ int fdt_subnode_offset_namelen(const void *fdt, int offset,
                        return offset;
        }
 
-       return offset; /* error */
+       if (offset < 0)
+               return offset; /* error */
+       else
+               return -FDT_ERR_NOTFOUND;
 }
 
 int fdt_subnode_offset(const void *fdt, int parentoffset,