/*
- * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
+ * (C) Copyright 2014-2016 Leo C. <erbl259-lmu@yahoo.de>
*
* (C) Copyright 2000
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
* (C) Copyright 2005
* JinHua Luo, GuangDong Linux Center, <luo.jinhua@gd-linux.com>
*
- * SPDX-License-Identifier: GPL-2.0+
+ * SPDX-License-Identifier: GPL-2.0
*/
+#include "cli.h"
#include "common.h"
#include <string.h>
#include "env.h"
#include "cli_readline.h"
#include "con-utils.h"
-#include "cli.h"
/* FIXME: Quoting problems */
if (c == '}') {
/* Terminate variable name */
*(inp-1) = '\0';
- const char *envval = getenv(varname);
+ const char *envval = getenv_char(varname);
*(inp-1) = '}';
/* Copy into the line if it exists */
if (envval != NULL)
* WARNING:
*
* We must create a temporary copy of the command since the command we get
- * may be the result from getenv(), which returns a pointer directly to
+ * may be the result from getenv_char(), which returns a pointer directly to
* the environment data, which may change magicly when the command we run
* creates or modifies environment variables (like "bootp" does).
*
*/
for (inquotes = 0, sep = str; *sep; sep++) {
if ((*sep == '\'') &&
- (sep != str) && /* past string start */
- (*(sep - 1) != '\\')) /* and NOT escaped */
+ (sep != str) && /* past string start */
+ (*(sep - 1) != '\\')) /* and NOT escaped */
inquotes = !inquotes;
if (!inquotes &&
- (*sep == ';' || *sep == '\n') && /* separator */
- (sep != str) && /* past string start */
- (*(sep - 1) != '\\')) /* and NOT escaped */
+ (*sep == ';' || *sep == '\n' /* separator */
+ || *sep == '#') && /* or start of comment */
+ ((sep == str) || /* string start */
+ (*(sep - 1) != '\\'))) /* or NOT escaped */
break;
}
- /*
- * Limit the token to data between separators
- */
+ /* no more commands after unescaped '#' token */
+ if (*sep == '#')
+ *sep = '\0';
+
+ /* Limit the token to data between separators */
token = str;
if (*sep) {
- str = sep + 1; /* start of command for next pass */
+ str = sep + 1; /* start of command for next pass */
*sep = '\0';
} else {
- str = sep; /* no more commands for next pass */
+ str = sep; /* no more commands for next pass */
}
debug_parser("token: \"%s\"\n", token);
int rc = 1;
for (;;) {
- len = cli_readline(PSTR(CONFIG_SYS_PROMPT));
+ len = cli_readline(PSTR(CONFIG_SYS_PROMPT), 1);
flag = 0; /* assume no special flags for now */
if (len > 0) {
}
}
}
-
-
-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(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;
-}