aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Hobbs <jason.hobbs@calxeda.com>2011-06-29 11:25:17 -0500
committerJohn Rigby <john.rigby@linaro.org>2011-06-30 12:23:34 +0100
commit6e9b76f9d0dcdca63d8a2c4d91015ef09b0ce166 (patch)
tree6e0b3d91f181caa61d978afb483b73a071fc19b7
parent9cfbc22c26ca6fae4c36e51299d7ca04fca68568 (diff)
downloadu-boot-linaro-stable-6e9b76f9d0dcdca63d8a2c4d91015ef09b0ce166.tar.gz
common: add run_command2 for running simple or hush commands
Signed-off-by: Jason Hobbs <jason.hobbs@calxeda.com>
-rw-r--r--common/hush.c2
-rw-r--r--common/main.c46
-rw-r--r--include/common.h1
-rw-r--r--include/hush.h2
4 files changed, 22 insertions, 29 deletions
diff --git a/common/hush.c b/common/hush.c
index 85a603071..940889b89 100644
--- a/common/hush.c
+++ b/common/hush.c
@@ -3217,7 +3217,7 @@ int parse_stream_outer(struct in_str *inp, int flag)
#ifndef __U_BOOT__
static int parse_string_outer(const char *s, int flag)
#else
-int parse_string_outer(char *s, int flag)
+int parse_string_outer(const char *s, int flag)
#endif /* __U_BOOT__ */
{
struct in_str input;
diff --git a/common/main.c b/common/main.c
index 489c9e98d..3f19b1d94 100644
--- a/common/main.c
+++ b/common/main.c
@@ -333,12 +333,7 @@ void main_loop (void)
int prev = disable_ctrlc(1); /* disable Control C checking */
# endif
-# ifndef CONFIG_SYS_HUSH_PARSER
- run_command (p, 0);
-# else
- parse_string_outer(p, FLAG_PARSE_SEMICOLON |
- FLAG_EXIT_FROM_LOOP);
-# endif
+ run_command2(p, 0);
# ifdef CONFIG_AUTOBOOT_KEYED
disable_ctrlc(prev); /* restore Control C checking */
@@ -383,12 +378,7 @@ void main_loop (void)
int prev = disable_ctrlc(1); /* disable Control C checking */
# endif
-# ifndef CONFIG_SYS_HUSH_PARSER
- run_command (s, 0);
-# else
- parse_string_outer(s, FLAG_PARSE_SEMICOLON |
- FLAG_EXIT_FROM_LOOP);
-# endif
+ run_command2(s, 0);
# ifdef CONFIG_AUTOBOOT_KEYED
disable_ctrlc(prev); /* restore Control C checking */
@@ -398,14 +388,8 @@ void main_loop (void)
# ifdef CONFIG_MENUKEY
if (menukey == CONFIG_MENUKEY) {
s = getenv("menucmd");
- if (s) {
-# ifndef CONFIG_SYS_HUSH_PARSER
- run_command(s, 0);
-# else
- parse_string_outer(s, FLAG_PARSE_SEMICOLON |
- FLAG_EXIT_FROM_LOOP);
-# endif
- }
+ if (s)
+ run_command2(s, 0);
}
#endif /* CONFIG_MENUKEY */
#endif /* CONFIG_BOOTDELAY */
@@ -1387,6 +1371,19 @@ int run_command (const char *cmd, int flag)
return rc ? rc : repeatable;
}
+int run_command2(const char *cmd, int flag)
+{
+#ifndef CONFIG_SYS_HUSH_PARSER
+ if (run_command(cmd, flag) == -1)
+ return 1;
+#else
+ if (parse_string_outer(cmd,
+ FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP) != 0)
+ return 1;
+#endif
+ return 0;
+}
+
/****************************************************************************/
#if defined(CONFIG_CMD_RUN)
@@ -1404,14 +1401,9 @@ int do_run (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
printf ("## Error: \"%s\" not defined\n", argv[i]);
return 1;
}
-#ifndef CONFIG_SYS_HUSH_PARSER
- if (run_command (arg, flag) == -1)
- return 1;
-#else
- if (parse_string_outer(arg,
- FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP) != 0)
+
+ if (run_command2(arg, flag) != 0)
return 1;
-#endif
}
return 0;
}
diff --git a/include/common.h b/include/common.h
index 394a005b0..bd2c1a080 100644
--- a/include/common.h
+++ b/include/common.h
@@ -228,6 +228,7 @@ int print_buffer (ulong addr, void* data, uint width, uint count, uint linelen);
/* common/main.c */
void main_loop (void);
int run_command (const char *cmd, int flag);
+int run_command2 (const char *cmd, int flag);
int readline (const char *const prompt);
int readline_into_buffer (const char *const prompt, char * buffer);
int parse_line (char *, char *[]);
diff --git a/include/hush.h b/include/hush.h
index 5c566cc8d..ecf9222d2 100644
--- a/include/hush.h
+++ b/include/hush.h
@@ -29,7 +29,7 @@
#define FLAG_REPARSING (1 << 2) /* >=2nd pass */
extern int u_boot_hush_start(void);
-extern int parse_string_outer(char *, int);
+extern int parse_string_outer(const char *, int);
extern int parse_file_outer(void);
int set_local_var(const char *s, int flg_export);