diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-10-18 08:13:53 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2013-11-13 17:25:21 +0800 |
commit | 4a2dbb71fdcf234302760d20333420a6e6566d56 (patch) | |
tree | 5ae643249c755797ece2704438d9e43763df3d3e /lib | |
parent | 63e13fa011e6a365979aa777752c00b7f2e49127 (diff) | |
download | talos-petitboot-4a2dbb71fdcf234302760d20333420a6e6566d56.tar.gz talos-petitboot-4a2dbb71fdcf234302760d20333420a6e6566d56.zip |
lib/pb-config: Implement config_set
This change adds config_set, to allow the configuration to be updated,
but calling the storage backend's save() method.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pb-config/pb-config.c | 35 | ||||
-rw-r--r-- | lib/pb-config/pb-config.h | 4 | ||||
-rw-r--r-- | lib/pb-config/storage.h | 1 |
3 files changed, 36 insertions, 4 deletions
diff --git a/lib/pb-config/pb-config.c b/lib/pb-config/pb-config.c index b6f26c7..1e53256 100644 --- a/lib/pb-config/pb-config.c +++ b/lib/pb-config/pb-config.c @@ -7,11 +7,12 @@ #include "storage.h" +void *config_ctx; static struct config *config; static struct config_storage *storage; -static void config_set_defaults(struct config *config) +void config_set_defaults(struct config *config) { config->autoboot_enabled = true; config->autoboot_timeout_sec = 10; @@ -28,7 +29,8 @@ static void config_set_defaults(struct config *config) } -static void dump_config(struct config *config) +void dump_config(struct config *config); +void dump_config(struct config *config) { int i; @@ -73,7 +75,9 @@ static void dump_config(struct config *config) int config_init(void *ctx) { - config = talloc(ctx, struct config); + config_ctx = talloc_new(ctx); + + config = talloc(config_ctx, struct config); config_set_defaults(config); storage = create_powerpc_nvram_storage(config); @@ -85,6 +89,29 @@ int config_init(void *ctx) return 0; } +int config_set(struct config *newconfig) +{ + int rc; + + if (!storage || !storage->save) + return -1; + + if (newconfig == config) + return 0; + + pb_log("new configuration data received\n"); + dump_config(config); + + rc = storage->save(storage, config); + + if (!rc) + config = talloc_steal(config_ctx, newconfig); + else + pb_log("error saving new configuration; changes lost\n"); + + return rc; +} + /* A non-exported function to allow the test infrastructure to initialise * (and change) the configuration variables */ struct parser_test; @@ -112,6 +139,6 @@ void config_set_autoboot(bool autoboot_enabled) int config_fini(void) { - talloc_free(config); + talloc_free(config_ctx); return 0; } diff --git a/lib/pb-config/pb-config.h b/lib/pb-config/pb-config.h index 523cada..90babaa 100644 --- a/lib/pb-config/pb-config.h +++ b/lib/pb-config/pb-config.h @@ -47,8 +47,12 @@ struct config { int config_init(void *ctx); const struct config *config_get(void); +int config_set(struct config *config); void config_set_autoboot(bool autoboot_enabled); int config_fini(void); +/* for use by the storage backends */ +void config_set_defaults(struct config *config); + #endif /* CONFIGURATION_H */ diff --git a/lib/pb-config/storage.h b/lib/pb-config/storage.h index a1d5269..5b4af56 100644 --- a/lib/pb-config/storage.h +++ b/lib/pb-config/storage.h @@ -7,6 +7,7 @@ struct config; struct config_storage { int (*load)(struct config_storage *st, struct config *config); + int (*save)(struct config_storage *st, struct config *config); }; struct config_storage *create_powerpc_nvram_storage(void *ctx); |