summaryrefslogtreecommitdiffstats
path: root/commands
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-10-03 21:10:30 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2012-10-03 21:10:30 +0200
commited4645cf13f35bd5bb77b4d1c3f80d020dd0fbaa (patch)
tree5f31f441c5777b0bb6e994bd32b09fdd6c87d99f /commands
parent4a543aa67765f049764f5796d4e80b8fd838bebe (diff)
parenta004cbb5af3cb0014308433f977943f8c97baad3 (diff)
downloadbarebox-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.c12
-rw-r--r--commands/global.c51
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