9
0
Fork 0

Add defaultenv command

This adds a command to explicitly restore the environment (or
parts thereof) from the default environment.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2014-10-23 22:52:14 +02:00
parent 837e517669
commit b25d333493
3 changed files with 103 additions and 0 deletions

View File

@ -699,6 +699,13 @@ config CMD_EXPORT
Export an environment variable to subsequently executed scripts.
config CMD_DEFAULTENV
tristate
select ENV_HANDLING
prompt "defaultenv"
help
restore environment from default environment
config CMD_GLOBAL
select GLOBALVAR
tristate

View File

@ -108,3 +108,4 @@ obj-$(CONFIG_CMD_USBGADGET) += usbgadget.o
obj-$(CONFIG_CMD_FIRMWARELOAD) += firmwareload.o
obj-$(CONFIG_CMD_CMP) += cmp.o
obj-$(CONFIG_CMD_NV) += nv.o
obj-$(CONFIG_CMD_DEFAULTENV) += defaultenv.o

95
commands/defaultenv.c Normal file
View File

@ -0,0 +1,95 @@
/*
* 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 <getopt.h>
#include <command.h>
#include <envfs.h>
#include <errno.h>
#include <fs.h>
#include <libfile.h>
#include <malloc.h>
#include <globalvar.h>
static int do_defaultenv(int argc, char *argv[])
{
char *dirname;
int opt, ret;
char *restorepath = "/";
char *from, *to;
int restore = 0, scrub = 0;
while ((opt = getopt(argc, argv, "p:rs")) > 0) {
switch (opt) {
case 'r':
restore = 1;
break;
case 'p':
restorepath = optarg;
break;
case 's':
scrub = 1;
break;
default:
return COMMAND_ERROR_USAGE;
}
}
if (!restore || argc != optind)
return COMMAND_ERROR_USAGE;
dirname = "/env";
make_directory(dirname);
ret = defaultenv_load("/.defaultenv", 0);
if (ret)
return ret;
from = asprintf("/.defaultenv/%s", restorepath);
to = asprintf("%s/%s", dirname, restorepath);
printf("Restoring %s from default environment\n", restorepath);
if (scrub)
unlink_recursive(to, NULL);
ret = copy_recursive(from, to);
free(from);
free(to);
nvvar_load();
unlink_recursive("/.defaultenv", NULL);
return ret;
}
BAREBOX_CMD_HELP_START(defaultenv)
BAREBOX_CMD_HELP_TEXT("Options:")
BAREBOX_CMD_HELP_OPT("-r", "restore default environment")
BAREBOX_CMD_HELP_OPT("-s", "scrub, remove files not in default environment")
BAREBOX_CMD_HELP_OPT("-p <PATH>", "limit to <PATH>")
BAREBOX_CMD_HELP_END
BAREBOX_CMD_START(defaultenv)
.cmd = do_defaultenv,
BAREBOX_CMD_DESC("Restore environment from default environment")
BAREBOX_CMD_OPTS("[-rs] [-p <PATH>]")
BAREBOX_CMD_GROUP(CMD_GRP_ENV)
BAREBOX_CMD_HELP(cmd_defaultenv_help)
BAREBOX_CMD_END