Previously, the command
bg_setenv -f files/BGENV.DAT --args "root=/dev/sdb"
would correctly update the kernelargs, but all other key/value pairs are
lost (actually, memset to zero). In particular, BGENV.DAT no longer
stores a reference to the kernel file and thus, the device is unable to
boot from the updated BGENV.
The new behavior is as follows:
* if BGENV.DAT already exists, load it before applying the k/v updates
* otherwise fall back to the previous behavior, i.e. create a new
BGENV.DAT and apply the k/v updates to it
Signed-off-by: Michael Adler <
michae...@siemens.com>
---
tools/bg_setenv.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/tools/bg_setenv.c b/tools/bg_setenv.c
index d26eeed..522fd83 100644
--- a/tools/bg_setenv.c
+++ b/tools/bg_setenv.c
@@ -601,13 +601,18 @@ static int printenv_from_file(char *envfilepath) {
static int dumpenv_to_file(char *envfilepath) {
/* execute journal and write to file */
int result = 0;
+ int success = 0;
BGENV env;
BG_ENVDATA data;
memset(&env, 0, sizeof(BGENV));
- memset(&data, 0, sizeof(BG_ENVDATA));
env.data = &data;
+ success = get_env(envfilepath, &data);
+ if (!success) {
+ memset(&data, 0, sizeof(BG_ENVDATA));
+ }
+
update_environment(&env);
if (verbosity) {
dump_env(env.data);
--
2.33.0