diff options
author | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2012-08-24 11:17:43 +0800 |
---|---|---|
committer | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2012-09-14 00:46:00 +0800 |
commit | 4732c2703015e23a01a2bf0bef790c045dbc810a (patch) | |
tree | b58e73befcf5ff66409b17014839fb3c2a3ee9d2 /commands/global.c | |
parent | e23b943a42aedb31e9959dba8696699ee1a4b1d7 (diff) | |
download | barebox-4732c2703015e23a01a2bf0bef790c045dbc810a.tar.gz barebox-4732c2703015e23a01a2bf0bef790c045dbc810a.tar.xz |
globalvar: add support to set a value to of all globalvars beginning with 'match'
via c global_set_match and global -r
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Diffstat (limited to 'commands/global.c')
-rw-r--r-- | commands/global.c | 51 |
1 files changed, 40 insertions, 11 deletions
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 |