diff options
Diffstat (limited to 'commands')
-rw-r--r-- | commands/Kconfig | 14 | ||||
-rw-r--r-- | commands/Makefile | 1 | ||||
-rw-r--r-- | commands/loadenv.c | 11 | ||||
-rw-r--r-- | commands/nv.c | 84 |
4 files changed, 107 insertions, 3 deletions
diff --git a/commands/Kconfig b/commands/Kconfig index bef58473a5..cf32548725 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -674,6 +674,20 @@ endmenu menu "Environment" +config CMD_NV + select GLOBALVAR + tristate + prompt "nv" + help + create, set or remove non volatile variables. + + Usage: nv [-r] VAR[=VALUE] + + Add a new config non volatile named VAR, optionally set to VALUE. + + Options: + -r remove a non volatile variable + config CMD_EXPORT depends on ENVIRONMENT_VARIABLES tristate diff --git a/commands/Makefile b/commands/Makefile index be174969b0..b4fc3d363e 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -107,3 +107,4 @@ obj-$(CONFIG_CMD_HWCLOCK) += hwclock.o obj-$(CONFIG_CMD_USBGADGET) += usbgadget.o obj-$(CONFIG_CMD_FIRMWARELOAD) += firmwareload.o obj-$(CONFIG_CMD_CMP) += cmp.o +obj-$(CONFIG_CMD_NV) += nv.o diff --git a/commands/loadenv.c b/commands/loadenv.c index 8b15af49df..91ce5e707c 100644 --- a/commands/loadenv.c +++ b/commands/loadenv.c @@ -27,12 +27,13 @@ #include <errno.h> #include <fs.h> #include <malloc.h> +#include <globalvar.h> static int do_loadenv(int argc, char *argv[]) { char *filename = NULL, *dirname; unsigned flags = 0; - int opt; + int opt, ret; int scrub = 0; int defaultenv = 0; @@ -97,9 +98,13 @@ static int do_loadenv(int argc, char *argv[]) printf("loading environment from %s\n", defaultenv ? "defaultenv" : filename); if (defaultenv) - return defaultenv_load(dirname, flags); + ret = defaultenv_load(dirname, flags); else - return envfs_load(filename, dirname, flags); + ret = envfs_load(filename, dirname, flags); + + nvvar_load(); + + return ret; } BAREBOX_CMD_HELP_START(loadenv) diff --git a/commands/nv.c b/commands/nv.c new file mode 100644 index 0000000000..8cebb856f4 --- /dev/null +++ b/commands/nv.c @@ -0,0 +1,84 @@ +/* + * nv.c - non volatile shell variables + * + * Copyright (c) 2014 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ +#include <common.h> +#include <malloc.h> +#include <command.h> +#include <globalvar.h> +#include <environment.h> +#include <getopt.h> + +static int do_nv(int argc, char *argv[]) +{ + int opt; + int do_remove = 0; + int ret; + char *value; + + while ((opt = getopt(argc, argv, "r")) > 0) { + switch (opt) { + case 'r': + do_remove = 1; + break; + default: + return COMMAND_ERROR_USAGE; + } + } + + if (argc == optind) { + nvvar_print(); + return 0; + } + + argc -= optind; + argv += optind; + + if (argc != 1) + return COMMAND_ERROR_USAGE; + + value = strchr(argv[0], '='); + if (value) { + *value = 0; + value++; + } + + if (do_remove) + ret = nvvar_remove(argv[0]); + else + ret = nvvar_add(argv[0], value); + + return ret; +} + +BAREBOX_CMD_HELP_START(nv) +BAREBOX_CMD_HELP_TEXT("Add a new non volatile variable named VAR, optionally set to VALUE.") +BAREBOX_CMD_HELP_TEXT("non volatile variables are persistent variables that overwrite the") +BAREBOX_CMD_HELP_TEXT("global variables of the same name. Their value is saved with") +BAREBOX_CMD_HELP_TEXT("'saveenv'.") +BAREBOX_CMD_HELP_TEXT("") +BAREBOX_CMD_HELP_TEXT("Options:") +BAREBOX_CMD_HELP_OPT("-r", "remove a non volatile variable") +BAREBOX_CMD_HELP_END + +BAREBOX_CMD_START(nv) + .cmd = do_nv, + BAREBOX_CMD_DESC("create or set non volatile variables") + BAREBOX_CMD_OPTS("[-r] VAR[=VALUE]") + BAREBOX_CMD_GROUP(CMD_GRP_ENV) + BAREBOX_CMD_HELP(cmd_nv_help) +BAREBOX_CMD_END |