From 5307153236caaf2304e578c148e00a4b65cb8604 Mon Sep 17 00:00:00 2001
From: Simon Glass <sjg@chromium.org>
Date: Tue, 14 Feb 2012 19:59:21 +0000
Subject: [PATCH] Stop using builtin_run_command()

Boards can select either the 'built-in' parser or the hush parser. We
should not call builtin_run_command() if we are using the hush parser.
We use run_command() instead, since it knows how to call the correct
parser.

Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Mike Frysinger <vapier@gentoo.org>
---
 arch/arm/cpu/arm926ejs/kirkwood/cpu.c |  7 +---
 board/esd/common/auto_update.c        |  2 +-
 board/esd/common/cmd_loadpci.c        |  2 +-
 board/esd/du440/du440.c               |  2 +-
 common/cmd_bedbug.c                   |  2 +-
 common/cmd_bootm.c                    |  8 +----
 common/cmd_source.c                   |  4 +--
 common/main.c                         | 49 ++++++++++++++-------------
 include/common.h                      |  1 -
 9 files changed, 34 insertions(+), 43 deletions(-)

diff --git a/arch/arm/cpu/arm926ejs/kirkwood/cpu.c b/arch/arm/cpu/arm926ejs/kirkwood/cpu.c
index 54d15ea347..fba5e01454 100644
--- a/arch/arm/cpu/arm926ejs/kirkwood/cpu.c
+++ b/arch/arm/cpu/arm926ejs/kirkwood/cpu.c
@@ -226,12 +226,7 @@ static void kw_sysrst_action(void)
 	}
 
 	debug("Starting %s process...\n", __FUNCTION__);
-#if !defined(CONFIG_SYS_HUSH_PARSER)
-	ret = builtin_run_command(s, 0);
-#else
-	ret = parse_string_outer(s, FLAG_PARSE_SEMICOLON
-				  | FLAG_EXIT_FROM_LOOP);
-#endif
+	ret = run_command(s, 0);
 	if (ret < 0)
 		debug("Error.. %s failed\n", __FUNCTION__);
 	else
diff --git a/board/esd/common/auto_update.c b/board/esd/common/auto_update.c
index 4cc15fa2b8..fc60545d04 100644
--- a/board/esd/common/auto_update.c
+++ b/board/esd/common/auto_update.c
@@ -169,7 +169,7 @@ int au_do_update(int i, long sz)
 				k++;
 			}
 
-			builtin_run_command(addr, 0);
+			run_command(addr, 0);
 			return 0;
 		}
 
diff --git a/board/esd/common/cmd_loadpci.c b/board/esd/common/cmd_loadpci.c
index c2bf2792e9..8fcae63f23 100644
--- a/board/esd/common/cmd_loadpci.c
+++ b/board/esd/common/cmd_loadpci.c
@@ -110,7 +110,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 			 * Call run_cmd
 			 */
 			printf("running command at addr 0x%s ...\n", addr);
-			builtin_run_command((char *)la, 0);
+			run_command((char *)la, 0);
 			break;
 
 		default:
diff --git a/board/esd/du440/du440.c b/board/esd/du440/du440.c
index 75fb20079e..1ada1bc984 100644
--- a/board/esd/du440/du440.c
+++ b/board/esd/du440/du440.c
@@ -831,7 +831,7 @@ int do_time(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	*d = '\0';
 
 	start = get_ticks();
-	ret = builtin_run_command(cmd, 0);
+	ret = run_command(cmd, 0);
 	end = get_ticks();
 
 	printf("ticks=%ld\n", (ulong)(end - start));
diff --git a/common/cmd_bedbug.c b/common/cmd_bedbug.c
index 0228ee875c..5b08123822 100644
--- a/common/cmd_bedbug.c
+++ b/common/cmd_bedbug.c
@@ -237,7 +237,7 @@ void bedbug_main_loop (unsigned long addr, struct pt_regs *regs)
 		if (len == -1)
 			printf ("<INTERRUPT>\n");
 		else
-			rc = builtin_run_command(lastcommand, flag);
+			rc = run_command(lastcommand, flag);
 
 		if (rc <= 0) {
 			/* invalid command or not repeatable, forget it */
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 2e3e1593ce..6bfef6292f 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -1045,14 +1045,8 @@ int do_bootd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	int rcode = 0;
 
-#ifndef CONFIG_SYS_HUSH_PARSER
-	if (builtin_run_command(getenv("bootcmd"), flag) < 0)
+	if (run_command(getenv("bootcmd"), flag) < 0)
 		rcode = 1;
-#else
-	if (parse_string_outer(getenv("bootcmd"),
-			FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP) != 0)
-		rcode = 1;
-#endif
 	return rcode;
 }
 
diff --git a/common/cmd_source.c b/common/cmd_source.c
index 481241cfdf..32fff5cec8 100644
--- a/common/cmd_source.c
+++ b/common/cmd_source.c
@@ -179,7 +179,7 @@ source (ulong addr, const char *fit_uname)
 				if (*line) {
 					debug ("** exec: \"%s\"\n",
 						line);
-					if (builtin_run_command(line, 0) < 0) {
+					if (run_command(line, 0) < 0) {
 						rcode = 1;
 						break;
 					}
@@ -189,7 +189,7 @@ source (ulong addr, const char *fit_uname)
 			++next;
 		}
 		if (rcode == 0 && *line)
-			rcode = (builtin_run_command(line, 0) >= 0);
+			rcode = (run_command(line, 0) >= 0);
 	}
 #endif
 	free (cmd);
diff --git a/common/main.c b/common/main.c
index 797b245c39..10ee12c278 100644
--- a/common/main.c
+++ b/common/main.c
@@ -267,26 +267,6 @@ int abortboot(int bootdelay)
 # endif	/* CONFIG_AUTOBOOT_KEYED */
 #endif	/* CONFIG_BOOTDELAY >= 0  */
 
-/*
- * Return 0 on success, or != 0 on error.
- */
-int run_command(const char *cmd, int flag)
-{
-#ifndef CONFIG_SYS_HUSH_PARSER
-	/*
-	 * builtin_run_command can return 0 or 1 for success, so clean up
-	 * its result.
-	 */
-	if (builtin_run_command(cmd, flag) == -1)
-		return 1;
-
-	return 0;
-#else
-	return parse_string_outer(cmd,
-			FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP);
-#endif
-}
-
 /****************************************************************************/
 
 void main_loop (void)
@@ -458,7 +438,7 @@ void main_loop (void)
 		if (len == -1)
 			puts ("<INTERRUPT>\n");
 		else
-			rc = builtin_run_command(lastcommand, flag);
+			rc = run_command(lastcommand, flag);
 
 		if (rc <= 0) {
 			/* invalid command or not repeatable, forget it */
@@ -1278,8 +1258,7 @@ static void process_macros (const char *input, char *output)
  * the environment data, which may change magicly when the command we run
  * creates or modifies environment variables (like "bootp" does).
  */
-
-int builtin_run_command(const char *cmd, int flag)
+static int builtin_run_command(const char *cmd, int flag)
 {
 	cmd_tbl_t *cmdtp;
 	char cmdbuf[CONFIG_SYS_CBSIZE];	/* working copy of cmd		*/
@@ -1404,6 +1383,30 @@ int builtin_run_command(const char *cmd, int flag)
 	return rc ? rc : repeatable;
 }
 
+/*
+ * Run a command using the selected parser.
+ *
+ * @param cmd	Command to run
+ * @param flag	Execution flags (CMD_FLAG_...)
+ * @return 0 on success, or != 0 on error.
+ */
+int run_command(const char *cmd, int flag)
+{
+#ifndef CONFIG_SYS_HUSH_PARSER
+	/*
+	 * builtin_run_command can return 0 or 1 for success, so clean up
+	 * its result.
+	 */
+	if (builtin_run_command(cmd, flag) == -1)
+		return 1;
+
+	return 0;
+#else
+	return parse_string_outer(cmd,
+			FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP);
+#endif
+}
+
 /****************************************************************************/
 
 #if defined(CONFIG_CMD_RUN)
diff --git a/include/common.h b/include/common.h
index e8b62a96c5..0bda049819 100644
--- a/include/common.h
+++ b/include/common.h
@@ -260,7 +260,6 @@ int	print_buffer (ulong addr, void* data, uint width, uint count, uint linelen);
 
 /* common/main.c */
 void	main_loop	(void);
-int builtin_run_command(const char *cmd, int flag);
 int run_command(const char *cmd, int flag);
 int	readline	(const char *const prompt);
 int	readline_into_buffer(const char *const prompt, char *buffer,
-- 
2.39.5