diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2012-10-03 21:10:30 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-10-03 21:10:30 +0200 |
commit | ed4645cf13f35bd5bb77b4d1c3f80d020dd0fbaa (patch) | |
tree | 5f31f441c5777b0bb6e994bd32b09fdd6c87d99f /commands | |
parent | 4a543aa67765f049764f5796d4e80b8fd838bebe (diff) | |
parent | a004cbb5af3cb0014308433f977943f8c97baad3 (diff) | |
download | barebox-ed4645cf13f35bd5bb77b4d1c3f80d020dd0fbaa.tar.gz barebox-ed4645cf13f35bd5bb77b4d1c3f80d020dd0fbaa.tar.xz |
Merge branch 'for-next/boot-sequence-dhcp'
Conflicts:
drivers/net/miidev.c
Diffstat (limited to 'commands')
-rw-r--r-- | commands/echo.c | 12 | ||||
-rw-r--r-- | commands/global.c | 51 |
2 files changed, 44 insertions, 19 deletions
diff --git a/commands/echo.c b/commands/echo.c index a19d99292f..4a5c981408 100644 --- a/commands/echo.c +++ b/commands/echo.c @@ -33,10 +33,9 @@ static int do_echo(int argc, char *argv[]) int fd = stdout, opt, newline = 1; char *file = NULL; int oflags = O_WRONLY | O_CREAT; -#ifdef CONFIG_CMD_ECHO_E char str[CONFIG_CBSIZE]; int process_escape = 0; -#endif + /* We can't use getopt() here because we want to * echo all things we don't understand. */ @@ -66,11 +65,9 @@ static int do_echo(int argc, char *argv[]) goto no_optarg_out; optind++; break; -#ifdef CONFIG_CMD_ECHO_E case 'e': - process_escape = 1; + process_escape = IS_ENABLED(CONFIG_CMD_ECHO_E); break; -#endif default: goto exit_parse; } @@ -89,13 +86,12 @@ exit_parse: for (i = optind; i < argc; i++) { if (i > optind) fputc(fd, ' '); -#ifdef CONFIG_CMD_ECHO_E if (process_escape) { process_escape_sequence(argv[i], str, CONFIG_CBSIZE); fputs(fd, str); - } else -#endif + } else { fputs(fd, argv[i]); + } } if (newline) diff --git a/commands/global.c b/commands/global.c index de6b13e7bd..b7c37433c4 100644 --- a/commands/global.c +++ b/commands/global.c @@ -24,39 +24,68 @@ #include <command.h> #include <globalvar.h> #include <environment.h> +#include <getopt.h> -static int do_global(int argc, char *argv[]) +static int globalvar_set(char* name, char* value) { int ret; + + ret = globalvar_add_simple(name); + + if (value) { + char *tmp = asprintf("global.%s", name); + ret = setenv(tmp, value); + free(tmp); + } + + return ret ? 1 : 0; +} + +static int do_global(int argc, char *argv[]) +{ + int opt; + int do_set_match = 0; char *value; - if (argc != 2) + while ((opt = getopt(argc, argv, "r")) > 0) { + switch (opt) { + case 'r': + do_set_match = 1; + break; + } + } + + argc -= optind; + argv += optind; + + if (argc != 1) return COMMAND_ERROR_USAGE; - value = strchr(argv[1], '='); + value = strchr(argv[0], '='); if (value) { *value = 0; value++; } - ret = globalvar_add_simple(argv[1]); + if (do_set_match) { + if (!value) + value = ""; - if (value) { - char *name = asprintf("global.%s", argv[1]); - ret = setenv(name, value); - free(name); + globalvar_set_match(argv[0], value); + return 0; } - return ret ? 1 : 0; + return globalvar_set(argv[0], value); } BAREBOX_CMD_HELP_START(global) -BAREBOX_CMD_HELP_USAGE("global <var>[=<value]\n") +BAREBOX_CMD_HELP_USAGE("global [-r] <var>[=<value]\n") BAREBOX_CMD_HELP_SHORT("add a new global variable named <var>, optionally set to <value>\n") +BAREBOX_CMD_HELP_SHORT("-r to set a value to of all globalvars beginning with 'match'") BAREBOX_CMD_HELP_END BAREBOX_CMD_START(global) .cmd = do_global, - .usage = "create global variables", + .usage = "create or set global variables", BAREBOX_CMD_HELP(cmd_global_help) BAREBOX_CMD_END |