Add run_command_repeatable()
authorThomas Betker <thomas.betker@freenet.de>
Thu, 5 Jun 2014 18:07:57 +0000 (20:07 +0200)
committerTom Rini <trini@ti.com>
Wed, 11 Jun 2014 20:25:47 +0000 (16:25 -0400)
run_command() returns 0 on success and 1 on error. However, there are some
invocations which expect 0 or 1 for success (not repeatable or repeatable)
and -1 for error; add run_command_repeatable() for this purpose.

Signed-off-by: Thomas Betker <thomas.betker@rohde-schwarz.com>
Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
common/cli.c
include/common.h

index ea6bfb3165678ad16b33dd43577f7e4f7f5c94b0..272b0288d76d56bbcaf5bb16310898d023b9127c 100644 (file)
@@ -41,6 +41,30 @@ int run_command(const char *cmd, int flag)
 #endif
 }
 
+/*
+ * Run a command using the selected parser, and check if it is repeatable.
+ *
+ * @param cmd  Command to run
+ * @param flag Execution flags (CMD_FLAG_...)
+ * @return 0 (not repeatable) or 1 (repeatable) on success, -1 on error.
+ */
+int run_command_repeatable(const char *cmd, int flag)
+{
+#ifndef CONFIG_SYS_HUSH_PARSER
+       return cli_simple_run_command(cmd, flag);
+#else
+       /*
+        * parse_string_outer() returns 1 for failure, so clean up
+        * its result.
+        */
+       if (parse_string_outer(cmd,
+                              FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP))
+               return -1;
+
+       return 0;
+#endif
+}
+
 int run_command_list(const char *cmd, int len, int flag)
 {
        int need_buff = 1;
index 91dc0f3c100bb43db9d7f75a425d426057dae7a9..cc74633df5e5718a922f1c072f977345ce1952b4 100644 (file)
@@ -271,6 +271,7 @@ int print_buffer(ulong addr, const void *data, uint width, uint count,
 /* common/main.c */
 void   main_loop       (void);
 int run_command(const char *cmd, int flag);
+int run_command_repeatable(const char *cmd, int flag);
 
 /**
  * Run a list of commands separated by ; or even \0