X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=common%2Fcli.c;h=075ae9dc4aec5971b327651c7b8117211adb04e1;hb=49891df661acf164460ba3ada60fccfc5a53ea71;hp=ea6bfb3165678ad16b33dd43577f7e4f7f5c94b0;hpb=90b51c33f362926e17d4c07dcef1ce822abaa89f;p=u-boot diff --git a/common/cli.c b/common/cli.c index ea6bfb3165..075ae9dc4a 100644 --- a/common/cli.c +++ b/common/cli.c @@ -36,8 +36,35 @@ int run_command(const char *cmd, int flag) return 0; #else - return parse_string_outer(cmd, - FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP); + int hush_flags = FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP; + + if (flag & CMD_FLAG_ENV) + hush_flags |= FLAG_CONT_ON_NEWLINE; + return parse_string_outer(cmd, hush_flags); +#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 } @@ -101,7 +128,7 @@ int do_run(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return 1; } - if (run_command(arg, flag) != 0) + if (run_command(arg, flag | CMD_FLAG_ENV) != 0) return 1; } return 0;