diff --git a/commands/saveenv.c b/commands/saveenv.c index 178b783..31d6951 100644 --- a/commands/saveenv.c +++ b/commands/saveenv.c @@ -18,26 +18,39 @@ #include #include #include +#include #include #include #include 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) - dirname = "/env"; - else - dirname = argv[2]; - if (argc < 2) - filename = default_environment_path_get(); - else - filename = argv[1]; + while ((opt = getopt(argc, argv, "z")) > 0) { + switch (opt) { + case 'z': + envfs_flags |= ENVFS_FLAGS_FORCE_BUILT_IN; + break; + } + } - ret = envfs_save(filename, dirname, 0); + /* 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 + filename = default_environment_path_get(); + + ret = envfs_save(filename, dirname, envfs_flags); return ret; } @@ -49,13 +62,14 @@ 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 diff --git a/scripts/bareboxenv.c b/scripts/bareboxenv.c index ec6ccfe..249e65b 100644 --- a/scripts/bareboxenv.c +++ b/scripts/bareboxenv.c @@ -109,6 +109,7 @@ "\n" "options:\n" " -s save (directory -> environment sector)\n" + " -z force the built-in default environment at startup\n" " -l load (environment sector -> directory)\n" " -p pad output file to given size\n" " -v verbose\n", @@ -120,9 +121,10 @@ int opt; int save = 0, load = 0, pad = 0, err = 0, fd; char *filename = NULL, *dirname = NULL; + unsigned envfs_flags = 0; int verbose = 0; - while((opt = getopt(argc, argv, "slp:v")) != -1) { + while((opt = getopt(argc, argv, "slp:vz")) != -1) { switch (opt) { case 's': save = 1; @@ -133,6 +135,10 @@ case 'p': pad = strtoul(optarg, NULL, 0); break; + case 'z': + envfs_flags |= ENVFS_FLAGS_FORCE_BUILT_IN; + save = 1; + break; case 'v': verbose = 1; break; @@ -181,7 +187,7 @@ if (verbose) printf("saving contents of %s to file %s\n", dirname, filename); - err = envfs_save(filename, dirname, 0); + err = envfs_save(filename, dirname, envfs_flags); if (verbose && err) printf("saving env failed: %d\n", err);