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>
This commit is contained in:
parent
e23b943a42
commit
4732c27030
|
@ -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;
|
||||
char *value;
|
||||
|
||||
if (argc != 2)
|
||||
return COMMAND_ERROR_USAGE;
|
||||
|
||||
value = strchr(argv[1], '=');
|
||||
if (value) {
|
||||
*value = 0;
|
||||
value++;
|
||||
}
|
||||
|
||||
ret = globalvar_add_simple(argv[1]);
|
||||
ret = globalvar_add_simple(name);
|
||||
|
||||
if (value) {
|
||||
char *name = asprintf("global.%s", argv[1]);
|
||||
ret = setenv(name, value);
|
||||
free(name);
|
||||
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;
|
||||
|
||||
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[0], '=');
|
||||
if (value) {
|
||||
*value = 0;
|
||||
value++;
|
||||
}
|
||||
|
||||
if (do_set_match) {
|
||||
if (!value)
|
||||
value = "";
|
||||
|
||||
globalvar_set_match(argv[0], value);
|
||||
return 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
|
||||
|
|
|
@ -46,6 +46,16 @@ char *globalvar_get_match(const char *match, const char *seperator)
|
|||
return val;
|
||||
}
|
||||
|
||||
void globalvar_set_match(const char *match, const char *val)
|
||||
{
|
||||
struct param_d *param;
|
||||
|
||||
list_for_each_entry(param, &global_device.parameters, list) {
|
||||
if (!strncmp(match, param->name, strlen(match)))
|
||||
dev_set_param(&global_device, param->name, val);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* globalvar_add_simple
|
||||
*
|
||||
|
|
|
@ -9,6 +9,7 @@ int globalvar_add(const char *name,
|
|||
const char *(*get)(struct device_d *, struct param_d *p),
|
||||
unsigned long flags);
|
||||
char *globalvar_get_match(const char *match, const char *seperator);
|
||||
void globalvar_set_match(const char *match, const char *val);
|
||||
#else
|
||||
static inline int globalvar_add_simple(const char *name)
|
||||
{
|
||||
|
@ -27,6 +28,8 @@ static inline char *globalvar_get_match(const char *match, const char *seperator
|
|||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void globalvar_set_match(const char *match, const char *val) {}
|
||||
#endif
|
||||
|
||||
#endif /* __GLOBALVAR_H */
|
||||
|
|
Loading…
Reference in New Issue