Move actual script execution into a new function run_script(), which then can be called from other modules.
Signed-off-by: Michael Walle <mich...@walle.cc> Cc: Wolfgang Denk <w...@denx.de> --- common/cmd_source.c | 71 ++++++++++++++++++++++++++++---------------------- include/common.h | 1 + 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/common/cmd_source.c b/common/cmd_source.c index 16a627a..4b2740b 100644 --- a/common/cmd_source.c +++ b/common/cmd_source.c @@ -43,6 +43,45 @@ #include <hush.h> #endif +/* + * Run a series of commands, separated by '\n'. + * Beware, the contents of script may be modified while it is parsed. + */ +int run_script(char *script) +{ +#ifndef CONFIG_SYS_HUSH_PARSER /*?? */ + int rcode; + char *line = script; + char *next = script; + + /* + * break into individual lines and execute each line; + * terminate on error. + */ + while (*next) { + if (*next == '\n') { + *next = '\0'; + /* run only non-empty commands */ + if (*line) { + debug("** exec: \"%s\"\n", line); + if (run_command(line, 0) < 0) { + rcode = 1; + break; + } + } + line = next + 1; + } + ++next; + } + + if (rcode == 0 && *line) + rcode = (run_command(line, 0) >= 0); + return rcode; +#else + return parse_string_outer(script, FLAG_PARSE_SEMICOLON); +#endif +} + int source (ulong addr, const char *fit_uname) { @@ -160,38 +199,8 @@ source (ulong addr, const char *fit_uname) memmove (cmd, (char *)data, len); *(cmd + len) = 0; -#ifdef CONFIG_SYS_HUSH_PARSER /*?? */ - rcode = parse_string_outer (cmd, FLAG_PARSE_SEMICOLON); -#else - { - char *line = cmd; - char *next = cmd; + rcode = run_script(cmd); - /* - * break into individual lines, - * and execute each line; - * terminate on error. - */ - while (*next) { - if (*next == '\n') { - *next = '\0'; - /* run only non-empty commands */ - if (*line) { - debug ("** exec: \"%s\"\n", - line); - if (run_command (line, 0) < 0) { - rcode = 1; - break; - } - } - line = next + 1; - } - ++next; - } - if (rcode == 0 && *line) - rcode = (run_command(line, 0) >= 0); - } -#endif free (cmd); return rcode; } diff --git a/include/common.h b/include/common.h index 3df1def..dcfbed6 100644 --- a/include/common.h +++ b/include/common.h @@ -296,6 +296,7 @@ void board_pre_console_putc(int ch); void flash_perror (int); /* common/cmd_source.c */ +int run_script(char *script); int source (ulong addr, const char *fit_uname); extern ulong load_addr; /* Default Load Address */ -- 1.7.2.5 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot