/* * (C) Copyright 2016 Leo C. * * SPDX-License-Identifier: GPL-2.0 */ #include "common.h" #include #include #include "ff.h" #include "config.h" #include "command.h" #include "cli_readline.h" /* console_buffer[] */ #include "cli.h" /* run_command() */ #include "env.h" command_ret_t do_run(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int i; (void) cmdtp; if (argc < 2) return CMD_RET_USAGE; for (i = 1; i < argc; ++i) { char *arg; arg = getenv_str(argv[i]); if (arg == NULL) { printf_P(PSTR("## Error: \"%s\" is not set\n"), argv[i]); return CMD_RET_FAILURE; } if (run_command(arg, flag) != 0) return CMD_RET_FAILURE; } return CMD_RET_SUCCESS; } static int source(FIL *fp, int flag, int argc, char * const argv[]) { int lineno = 0; int res = 0; (void)argc; (void)argv; while (!f_eof(fp) && !f_error(fp) && !res) { lineno++; if (f_gets(console_buffer, CONFIG_SYS_CBSIZE, fp)) { int i = strlen(console_buffer) - 1; if (i != 0) { if (i > 0) { if (console_buffer[i] != '\n') { printf_P(PSTR("Error: line %d to long\n"), lineno); res = -1; break; } } console_buffer[i] = 0; res = run_command(console_buffer, flag); } } } return !f_eof(fp) || res; } command_ret_t do_source(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { FIL File; int res; (void) cmdtp; if (argc < 2) return CMD_RET_USAGE; res = f_open(&File, argv[1], FA_READ ); if (res) { printf_P(PSTR("Error: failed to open script '%s'\n"), argv[1]); return CMD_RET_FAILURE; } printf_P(PSTR("Executing script: '%s'...\n"), argv[1]); res = source(&File, flag, --argc, ++argv); f_close(&File); if (res != 0) { return CMD_RET_FAILURE; } return CMD_RET_SUCCESS; }