summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerald Van Baren <vanbaren@cideas.com>2007-05-21 23:27:16 -0400
committerGerald Van Baren <vanbaren@cideas.com>2007-08-10 19:21:36 -0400
commit06e19a07701c968f15d72c083b5872a1a11c7b01 (patch)
treee2a263a8a1e2002fc0353fa446f4aee746e43cf0
parent9675ee7208ab965d13ea8d8262d77ac4160ef549 (diff)
For fdt_find_node_by_path(), handle the root path properly.
Also removes the special case root path detection in cmd_fdt.c since it is no longer necessary. Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
-rw-r--r--common/cmd_fdt.c35
-rw-r--r--libfdt/fdt_ro.c4
2 files changed, 16 insertions, 23 deletions
diff --git a/common/cmd_fdt.c b/common/cmd_fdt.c
index 65960c66469..7669676f2d4 100644
--- a/common/cmd_fdt.c
+++ b/common/cmd_fdt.c
@@ -52,25 +52,6 @@ static int fdt_parse_prop(char *pathp, char *prop, char *newval,
char *data, int *len);
static int fdt_print(char *pathp, char *prop, int depth);
-static int findnodeoffset(const char *pathp)
-{
- int nodeoffset;
-
- if (strcmp(pathp, "/") == 0) {
- nodeoffset = 0;
- } else {
- nodeoffset = fdt_find_node_by_path (fdt, pathp);
- if (nodeoffset < 0) {
- /*
- * Not found or something else bad happened.
- */
- printf ("findnodeoffset() libfdt: %s\n",
- fdt_strerror(nodeoffset));
- }
- }
- return nodeoffset;
-}
-
/*
* Flattened Device Tree command, see the help for parameter definitions.
*/
@@ -187,11 +168,13 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
pathp = argv[2];
nodep = argv[3];
- nodeoffset = findnodeoffset(pathp);
+ nodeoffset = fdt_find_node_by_path (fdt, pathp);
if (nodeoffset < 0) {
/*
* Not found or something else bad happened.
*/
+ printf ("libfdt fdt_find_node_by_path() returned %s\n",
+ fdt_strerror(nodeoffset));
return 1;
}
err = fdt_add_subnode(fdt, nodeoffset, nodep);
@@ -225,11 +208,13 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
prop = argv[3];
newval = argv[4];
- nodeoffset = findnodeoffset(pathp);
+ nodeoffset = fdt_find_node_by_path (fdt, pathp);
if (nodeoffset < 0) {
/*
* Not found or something else bad happened.
*/
+ printf ("libfdt fdt_find_node_by_path() returned %s\n",
+ fdt_strerror(nodeoffset));
return 1;
}
ret = fdt_parse_prop(pathp, prop, newval, data, &len);
@@ -283,11 +268,13 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
* Get the path. The root node is an oddball, the offset
* is zero and has no name.
*/
- nodeoffset = findnodeoffset(argv[2]);
+ nodeoffset = fdt_find_node_by_path (fdt, argv[2]);
if (nodeoffset < 0) {
/*
* Not found or something else bad happened.
*/
+ printf ("libfdt fdt_find_node_by_path() returned %s\n",
+ fdt_strerror(nodeoffset));
return 1;
}
/*
@@ -584,11 +571,13 @@ static int fdt_print(char *pathp, char *prop, int depth)
int len; /* length of the property */
int level = 0; /* keep track of nesting level */
- nodeoffset = findnodeoffset(pathp);
+ nodeoffset = fdt_find_node_by_path (fdt, pathp);
if (nodeoffset < 0) {
/*
* Not found or something else bad happened.
*/
+ printf ("libfdt fdt_find_node_by_path() returned %s\n",
+ fdt_strerror(nodeoffset));
return 1;
}
/*
diff --git a/libfdt/fdt_ro.c b/libfdt/fdt_ro.c
index 923c389ece9..ffd9209b193 100644
--- a/libfdt/fdt_ro.c
+++ b/libfdt/fdt_ro.c
@@ -283,6 +283,10 @@ int fdt_find_node_by_path(const void *fdt, const char *path)
if (*path != '/')
return -FDT_ERR_BADPATH;
+ /* Handle the root path: root offset is 0 */
+ if (strcmp(path, "/") == 0)
+ return 0;
+
while (*p) {
const char *q;