From: Timo Sirainen Date: Thu, 10 Aug 2023 22:14:16 +0000 (+0300) Subject: lib-settings: Add settings_simple_*() API X-Git-Tag: 2.4.1~1374 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bc683e4cebb5dbd5c592c33e567070af23e2be71;p=thirdparty%2Fdovecot%2Fcore.git lib-settings: Add settings_simple_*() API This is mainly intended to easily provide settings for unit tests. --- diff --git a/src/lib-settings/settings.c b/src/lib-settings/settings.c index 9bbd86b472..5a16fe5705 100644 --- a/src/lib-settings/settings.c +++ b/src/lib-settings/settings.c @@ -1664,3 +1664,33 @@ void settings_root_deinit(struct settings_root **_root) } pool_unref(&root->pool); } + +void settings_simple_init(struct settings_simple *set_r, + const char *const settings[]) +{ + i_zero(set_r); + set_r->root = settings_root_init(); + set_r->event = event_create(NULL); + event_set_ptr(set_r->event, SETTINGS_EVENT_ROOT, set_r->root); + if (settings != NULL) + settings_simple_update(set_r, settings); +} + +void settings_simple_deinit(struct settings_simple *set) +{ + settings_instance_free(&set->instance); + settings_root_deinit(&set->root); + event_unref(&set->event); +} + +void settings_simple_update(struct settings_simple *set, + const char *const settings[]) +{ + settings_instance_free(&set->instance); + set->instance = settings_instance_new(set->root); + for (unsigned int i = 0; settings[i] != NULL; i += 2) { + settings_override(set->instance, settings[i], settings[i + 1], + SETTINGS_OVERRIDE_TYPE_CODE); + } + event_set_ptr(set->event, SETTINGS_EVENT_INSTANCE, set->instance); +} diff --git a/src/lib-settings/settings.h b/src/lib-settings/settings.h index 8dd4ee9f25..cd0a66e538 100644 --- a/src/lib-settings/settings.h +++ b/src/lib-settings/settings.h @@ -263,4 +263,16 @@ bool settings_has_mmap(struct settings_root *root); struct settings_root *settings_root_init(void); void settings_root_deinit(struct settings_root **root); +struct settings_simple { + struct settings_root *root; + struct settings_instance *instance; + struct event *event; +}; + +void settings_simple_init(struct settings_simple *set_r, + const char *const settings[]); +void settings_simple_deinit(struct settings_simple *set); +void settings_simple_update(struct settings_simple *set, + const char *const settings[]); + #endif