Browse Source

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>
Gerald Van Baren 18 years ago
parent
commit
06e19a0770
2 changed files with 16 additions and 23 deletions
  1. 12 23
      common/cmd_fdt.c
  2. 4 0
      libfdt/fdt_ro.c

+ 12 - 23
common/cmd_fdt.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;
 	}
 	}
 	/*
 	/*

+ 4 - 0
libfdt/fdt_ro.c

@@ -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;