Skip to contentSkip to conversation

The fdt boardsetup command criteria was not unique

PATCH New Jerry Van Baren 3 participants 4 messages Jun 7, 2008 – Jun 10, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 The fdt boardsetup command criteria was not unique

It was checking just for "b", which is not unique with respect to the "boot" command. Change to check for "boa"[rdsetup].

---
 common/cmd_fdt.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
common/cmd_fdt.c +2 -1
index ede65ae..8592128 100644
@@ -403,7 +403,8 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 	}
 #ifdef CONFIG_OF_BOARD_SETUP
 	/* Call the board-specific fixup routine */
-	else if (argv[1][0] == 'b')
+	else if ((argv[1][0] == 'b') && (argv[1][1] == 'o') &&
+		   (argv[1][2] == 'a'))
 		ft_board_setup(fdt, gd->bd);
 #endif
 	/* Create a chosen node */
Signature · 1 line
1.5.5.1
#1 lore raw

PATCH 1/1 The fdt boardsetup command criteria was not unique

common/cmd_fdt.c int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) · line 409

Quoted 13 lines · Jerry Van Baren
common/cmd_fdt.c +2 -1
index ede65ae..8592128 100644
@@ -403,7 +403,8 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 	}
 #ifdef CONFIG_OF_BOARD_SETUP
 	/* Call the board-specific fixup routine */
-	else if (argv[1][0] == 'b')
+	else if ((argv[1][0] == 'b') && (argv[1][1] == 'o') &&
+		   (argv[1][2] == 'a'))
 		ft_board_setup(fdt, gd->bd);
 #endif

strncmp() would be clearer...

-Scott

#2 lore raw

PATCH 1/1 The fdt boardsetup command criteria was not unique

Quoted 17 lines · Scott Wood

common/cmd_fdt.c int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) · line 409

Quoted 13 lines · Jerry Van Baren
common/cmd_fdt.c +2 -1
index ede65ae..8592128 100644
@@ -403,7 +403,8 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 	}
 #ifdef CONFIG_OF_BOARD_SETUP
 	/* Call the board-specific fixup routine */
-	else if (argv[1][0] == 'b')
+	else if ((argv[1][0] == 'b') && (argv[1][1] == 'o') &&
+		   (argv[1][2] == 'a'))
 		ft_board_setup(fdt, gd->bd);
 #endif

strncmp() would be clearer...

Quoted 1 line

-Scott

Yeah, but that is the way the rest of them are. :-/ Hmmm, looking at the other command/cmd_*.c files, it looks like my parsing character-by-character is in the minority vs. strncmp().

Best regards,
gvb

#3 lore raw

PATCH 1/1 Use strncmp() for the fdt command

In reply to Scott Wood

Cleaner than doing multiple conditionals on characters.

---

Per Scott Wood's suggestion.

gvb

 common/cmd_fdt.c |   16 +++++++---------
 1 files changed, 7 insertions(+), 9 deletions(-)
common/cmd_fdt.c +7 -9
index 8592128..4285a96 100644
@@ -94,7 +94,7 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 	/********************************************************************
 	 * Move the fdt
 	 ********************************************************************/
-	} else if ((argv[1][0] == 'm') && (argv[1][1] == 'o')) {
+	} else if (strncmp(argv[1], "mo", 2) == 0) {
 		struct fdt_header *newaddr;
 		int  len;
 		int  err;
@@ -144,7 +144,7 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 	/********************************************************************
 	 * Make a new node
 	 ********************************************************************/
-	} else if ((argv[1][0] == 'm') && (argv[1][1] == 'k')) {
+	} else if (strncmp(argv[1], "mk", 2) == 0) {
 		char *pathp;		/* path */
 		char *nodep;		/* new node to add */
 		int  nodeoffset;	/* node offset from libfdt */
@@ -259,7 +259,7 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 	/********************************************************************
 	 * Remove a property/node
 	 ********************************************************************/
-	} else if ((argv[1][0] == 'r') && (argv[1][1] == 'm')) {
+	} else if (strncmp(argv[1], "rm", 2) == 0) {
 		int  nodeoffset;	/* node offset from libfdt */
 		int  err;
 
@@ -323,15 +323,14 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 	/********************************************************************
 	 * Set boot cpu id
 	 ********************************************************************/
-	} else if ((argv[1][0] == 'b') && (argv[1][1] == 'o') &&
-		   (argv[1][2] == 'o')) {
+	} else if (strncmp(argv[1], "boo", 3) == 0) {
 		unsigned long tmp = simple_strtoul(argv[2], NULL, 16);
 		fdt_set_boot_cpuid_phys(fdt, tmp);
 
 	/********************************************************************
 	 * memory command
 	 ********************************************************************/
-	} else if ((argv[1][0] == 'm') && (argv[1][1] == 'e')) {
+	} else if (strncmp(argv[1], "me", 2) == 0) {
 		uint64_t addr, size;
 		int err;
 #ifdef CFG_64BIT_STRTOUL
@@ -348,7 +347,7 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 	/********************************************************************
 	 * mem reserve commands
 	 ********************************************************************/
-	} else if ((argv[1][0] == 'r') && (argv[1][1] == 's')) {
+	} else if (strncmp(argv[1], "rs", 2) == 0) {
 		if (argv[2][0] == 'p') {
 			uint64_t addr, size;
 			int total = fdt_num_mem_rsv(fdt);
@@ -403,8 +402,7 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 	}
 #ifdef CONFIG_OF_BOARD_SETUP
 	/* Call the board-specific fixup routine */
-	else if ((argv[1][0] == 'b') && (argv[1][1] == 'o') &&
-		   (argv[1][2] == 'a'))
+	else if (strncmp(argv[1], "boa", 3) == 0)
 		ft_board_setup(fdt, gd->bd);
 #endif
 	/* Create a chosen node */
Signature · 1 line
1.5.5.1