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

Reply via email to