]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-settings: Add settings_simple_*() API
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 10 Aug 2023 22:14:16 +0000 (01:14 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:10 +0000 (12:34 +0200)
This is mainly intended to easily provide settings for unit tests.

src/lib-settings/settings.c
src/lib-settings/settings.h

index 9bbd86b472f7a5a66386f4bd97170f9740986b4e..5a16fe5705d0b34e5bfc43dc06930f737c2aa134 100644 (file)
@@ -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);
+}
index 8dd4ee9f25e7941c4fb1315bf2123217fdca91ea..cd0a66e5388b26acc815b8501846feebc3509668 100644 (file)
@@ -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