For fdt_find_node_by_path(), handle the root path properly.
authorGerald Van Baren <vanbaren@cideas.com>
Tue, 22 May 2007 03:27:16 +0000 (23:27 -0400)
committerGerald Van Baren <vanbaren@cideas.com>
Fri, 10 Aug 2007 23:21:36 +0000 (19:21 -0400)
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>
common/cmd_fdt.c
libfdt/fdt_ro.c

index 65960c6..7669676 100644 (file)
@@ -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;
        }
        /*
index 923c389..ffd9209 100644 (file)
@@ -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;