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>
master
Gerald Van Baren 17 years ago
parent 9675ee7208
commit 06e19a0770
  1. 35
      common/cmd_fdt.c
  2. 4
      libfdt/fdt_ro.c

@ -52,25 +52,6 @@ static int fdt_parse_prop(char *pathp, char *prop, char *newval,
char *data, int *len); char *data, int *len);
static int fdt_print(char *pathp, char *prop, int depth); 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. * 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]; pathp = argv[2];
nodep = argv[3]; nodep = argv[3];
nodeoffset = findnodeoffset(pathp); nodeoffset = fdt_find_node_by_path (fdt, pathp);
if (nodeoffset < 0) { if (nodeoffset < 0) {
/* /*
* Not found or something else bad happened. * Not found or something else bad happened.
*/ */
printf ("libfdt fdt_find_node_by_path() returned %s\n",
fdt_strerror(nodeoffset));
return 1; return 1;
} }
err = fdt_add_subnode(fdt, nodeoffset, nodep); 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]; prop = argv[3];
newval = argv[4]; newval = argv[4];
nodeoffset = findnodeoffset(pathp); nodeoffset = fdt_find_node_by_path (fdt, pathp);
if (nodeoffset < 0) { if (nodeoffset < 0) {
/* /*
* Not found or something else bad happened. * Not found or something else bad happened.
*/ */
printf ("libfdt fdt_find_node_by_path() returned %s\n",
fdt_strerror(nodeoffset));
return 1; return 1;
} }
ret = fdt_parse_prop(pathp, prop, newval, data, &len); 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 * Get the path. The root node is an oddball, the offset
* is zero and has no name. * is zero and has no name.
*/ */
nodeoffset = findnodeoffset(argv[2]); nodeoffset = fdt_find_node_by_path (fdt, argv[2]);
if (nodeoffset < 0) { if (nodeoffset < 0) {
/* /*
* Not found or something else bad happened. * Not found or something else bad happened.
*/ */
printf ("libfdt fdt_find_node_by_path() returned %s\n",
fdt_strerror(nodeoffset));
return 1; return 1;
} }
/* /*
@ -584,11 +571,13 @@ static int fdt_print(char *pathp, char *prop, int depth)
int len; /* length of the property */ int len; /* length of the property */
int level = 0; /* keep track of nesting level */ int level = 0; /* keep track of nesting level */
nodeoffset = findnodeoffset(pathp); nodeoffset = fdt_find_node_by_path (fdt, pathp);
if (nodeoffset < 0) { if (nodeoffset < 0) {
/* /*
* Not found or something else bad happened. * Not found or something else bad happened.
*/ */
printf ("libfdt fdt_find_node_by_path() returned %s\n",
fdt_strerror(nodeoffset));
return 1; return 1;
} }
/* /*

@ -283,6 +283,10 @@ int fdt_find_node_by_path(const void *fdt, const char *path)
if (*path != '/') if (*path != '/')
return -FDT_ERR_BADPATH; return -FDT_ERR_BADPATH;
/* Handle the root path: root offset is 0 */
if (strcmp(path, "/") == 0)
return 0;
while (*p) { while (*p) {
const char *q; const char *q;

Loading…
Cancel
Save