diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-02-18 10:25:13 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-02-28 08:14:14 +0100 |
commit | 7fa10256c3f4b38f9ca899c5367584380c017bea (patch) | |
tree | d1c5654947c4d8305d66646aa35656c8611bd16d /commands | |
parent | b850dbad6557c4cd0e03c9b83be88579412cdd3f (diff) | |
download | barebox-7fa10256c3f4b38f9ca899c5367584380c017bea.tar.gz barebox-7fa10256c3f4b38f9ca899c5367584380c017bea.tar.xz |
defaultenv: Allow multiple defaultenvironment overlays
We can compile barebox for multiple boards at once, but currently
they all share a single default environment. This patch adds a
defaultenv_append() which boards can call to customize the default
environment during runtime. Each board now generate default environment
snippets using bbenv-y and add them during runtime with defaultenv_append()
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'commands')
-rw-r--r-- | commands/loadenv.c | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/commands/loadenv.c b/commands/loadenv.c index bad88948a2..7b93e86892 100644 --- a/commands/loadenv.c +++ b/commands/loadenv.c @@ -26,15 +26,17 @@ #include <envfs.h> #include <errno.h> #include <fs.h> +#include <malloc.h> static int do_loadenv(int argc, char *argv[]) { - char *filename, *dirname; + char *filename = NULL, *dirname; unsigned flags = 0; int opt; int scrub = 0; + int defaultenv = 0; - while ((opt = getopt(argc, argv, "ns")) > 0) { + while ((opt = getopt(argc, argv, "nsd")) > 0) { switch (opt) { case 'n': flags |= ENV_FLAG_NO_OVERWRITE; @@ -42,6 +44,9 @@ static int do_loadenv(int argc, char *argv[]) case 's': scrub = 1; break; + case 'd': + defaultenv = 1; + break; default: return COMMAND_ERROR_USAGE; } @@ -52,10 +57,24 @@ static int do_loadenv(int argc, char *argv[]) else dirname = argv[optind + 1]; - if (argc - optind < 1) + if (argc - optind < 1) { filename = default_environment_path_get(); - else - filename = argv[optind]; + } else { + char *str = normalise_path(argv[optind]); + + /* + * /dev/defaultenv use to contain the defaultenvironment. + * we do not have this file anymore, but maintain compatibility + * to the 'loadenv -s /dev/defaultenv' command to restore the + * default environment for some time. + */ + if (!strcmp(str, "/dev/defaultenv")) + defaultenv = 1; + else + filename = argv[optind]; + + free(str); + } if (scrub) { int ret; @@ -75,15 +94,19 @@ static int do_loadenv(int argc, char *argv[]) } } - printf("loading environment from %s\n", filename); + printf("loading environment from %s\n", defaultenv ? "defaultenv" : filename); - return envfs_load(filename, dirname, flags); + if (defaultenv) + return defaultenv_load(dirname, flags); + else + return envfs_load(filename, dirname, flags); } BAREBOX_CMD_HELP_START(loadenv) BAREBOX_CMD_HELP_USAGE("loadenv OPTIONS [ENVFS] [DIRECTORY]\n") BAREBOX_CMD_HELP_OPT("-n", "do not overwrite existing files\n") BAREBOX_CMD_HELP_OPT("-s", "scrub old environment\n") +BAREBOX_CMD_HELP_OPT("-d", "load default environment\n") BAREBOX_CMD_HELP_SHORT("Load environment from ENVFS into DIRECTORY (default: /dev/env0 -> /env).\n") BAREBOX_CMD_HELP_END |