diff options
Diffstat (limited to 'commands/saveenv.c')
-rw-r--r-- | commands/saveenv.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/commands/saveenv.c b/commands/saveenv.c index 178b783a0c..31d6951e62 100644 --- a/commands/saveenv.c +++ b/commands/saveenv.c @@ -18,26 +18,39 @@ #include <common.h> #include <command.h> #include <errno.h> +#include <getopt.h> #include <fs.h> #include <fcntl.h> #include <envfs.h> static int do_saveenv(int argc, char *argv[]) { - int ret; + int ret, opt; + unsigned envfs_flags = 0; char *filename, *dirname; printf("saving environment\n"); - if (argc < 3) + while ((opt = getopt(argc, argv, "z")) > 0) { + switch (opt) { + case 'z': + envfs_flags |= ENVFS_FLAGS_FORCE_BUILT_IN; + break; + } + } + + /* destination and source are given? */ + if (argc == optind + 2) + dirname = argv[optind + 1]; + else dirname = "/env"; + + /* destination only given? */ + if (argc == optind + 1) + filename = argv[optind]; else - dirname = argv[2]; - if (argc < 2) filename = default_environment_path_get(); - else - filename = argv[1]; - ret = envfs_save(filename, dirname, 0); + ret = envfs_save(filename, dirname, envfs_flags); return ret; } @@ -49,13 +62,14 @@ BAREBOX_CMD_HELP_TEXT("ENVFS is usually a block in flash but can be any other fi BAREBOX_CMD_HELP_TEXT("omitted, DIRECTORY defaults to /env and ENVFS defaults to") BAREBOX_CMD_HELP_TEXT("/dev/env0. Note that envfs can only handle files, directories are being") BAREBOX_CMD_HELP_TEXT("skipped silently.") +BAREBOX_CMD_HELP_OPT ("-z", "force the built-in default environment at startup") BAREBOX_CMD_HELP_END BAREBOX_CMD_START(saveenv) .cmd = do_saveenv, BAREBOX_CMD_DESC("save environment to persistent storage") - BAREBOX_CMD_OPTS("[ENVFS [DIRECTORY]]") + BAREBOX_CMD_OPTS("[-z] [ENVFS [DIRECTORY]]") BAREBOX_CMD_GROUP(CMD_GRP_ENV) BAREBOX_CMD_HELP(cmd_saveenv_help) BAREBOX_CMD_END |