From 69af6f0c30b8a5049fea47ce44d4cbbca1bfac65 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 14 Apr 2025 11:26:49 +0100 Subject: [PATCH] [fdt] Allow for trailing slashes in path lookups Using fdt_path() to find the root node "/" currently fails, since it will attempt to find a child node with the empty name "" within the root node. Fix by changing fdt_path() to ignore any trailing slashes in a device tree path. Signed-off-by: Michael Brown --- src/core/fdt.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/core/fdt.c b/src/core/fdt.c index 298cc439a..199a53497 100644 --- a/src/core/fdt.c +++ b/src/core/fdt.c @@ -298,12 +298,16 @@ int fdt_path ( struct fdt *fdt, const char *path, unsigned int *offset ) { *offset = 0; /* Traverse tree one path segment at a time */ - while ( *tmp ) { + while ( 1 ) { /* Skip any leading '/' */ while ( *tmp == '/' ) tmp++; + /* Terminate if there are no more path components */ + if ( ! *tmp ) + break; + /* Find next '/' delimiter and convert to NUL */ del = strchr ( tmp, '/' ); if ( del ) @@ -316,9 +320,12 @@ int fdt_path ( struct fdt *fdt, const char *path, unsigned int *offset ) { if ( rc != 0 ) return rc; - /* Move to next path component, if any */ - while ( *tmp && ( *tmp != '/' ) ) - tmp++; + /* Terminate if there are no more delimiters */ + if ( ! del ) + break; + + /* Move to next path component */ + tmp = del; } DBGC2 ( fdt, "FDT found path \"%s\" at +%#04x\n", path, *offset );