int cli_simple_run_command_list(char *cmd, int flag) { char *line, *next; int rcode = 0; /* * Break into individual lines, and execute each line; terminate on * error. */ next = cmd; line = cmd; while (*next) { if (*next == '\n') { *next = '\0'; /* run only non-empty commands */ if (*line) { debug("** exec: \"%s\"\n", line); if (cli_simple_run_command(line, 0) < 0) { rcode = 1; break; } } line = next + 1; } ++next; } if (rcode == 0 && *line) rcode = (cli_simple_run_command(line, 0) < 0); return rcode; }
/* * Run a command using the selected parser. * * @param cmd Command to run * @param flag Execution flags (CMD_FLAG_...) * @return 0 on success, or != 0 on error. */ int run_command(const char *cmd, int flag) { /* * cli_run_command can return 0 or 1 for success, so clean up * its result. */ if (cli_simple_run_command(cmd, flag) == -1) return 1; return 0; }
/* * 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 }
/* * Run a command using the selected parser. * * @param cmd Command to run * @param flag Execution flags (CMD_FLAG_...) * @return 0 on success, or != 0 on error. */ int run_command(const char *cmd, int flag) { #ifndef CONFIG_SYS_HUSH_PARSER /* * cli_run_command can return 0 or 1 for success, so clean up * its result. */ if (cli_simple_run_command(cmd, flag) == -1) return 1; return 0; #else 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 }
int sandbox_main_loop_init(void) { struct sandbox_state *state = state_get_current(); /* Execute command if required */ if (state->cmd || state->run_distro_boot) { int retval = 0; cli_init(); #ifdef CONFIG_CMDLINE if (state->cmd) retval = run_command_list(state->cmd, -1, 0); if (state->run_distro_boot) retval = cli_simple_run_command("run distro_bootcmd", 0); #endif if (!state->interactive) os_exit(retval); } return 0; }
/* * 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) { return cli_simple_run_command(cmd, flag); }