barebox/commands/nv.c
Sascha Hauer 3249006a2f Add support for non volatile variables
This adds (back) support for non volatile variables. Non volatile
variables are variables which are stored in the environment over
reboot. They are used in the same way as the global variables, but
with a 'nv' command and device. The variables are stored under
/env/nv/, one variable per file. Adding a nv variable automatically
adds a global variable with the same name. Changing a nv variable
also changes the same global variable, but not the other way round.
This allows for example to configure the username as:

nv user=sha; saveenv

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
2014-11-06 10:58:54 +01:00

85 lines
2 KiB
C

/*
* 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