From: Timo Sirainen Date: Fri, 11 Aug 2023 14:20:23 +0000 (+0300) Subject: lib-settings: Add settings_root_find() and settings_instance_find() X-Git-Tag: 2.4.1~1370 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b3f1be7c253ec8d7aace8ef7a2fe8f59005e856;p=thirdparty%2Fdovecot%2Fcore.git lib-settings: Add settings_root_find() and settings_instance_find() --- diff --git a/src/lib-settings/settings.c b/src/lib-settings/settings.c index 5a16fe5705..228a48c0a5 100644 --- a/src/lib-settings/settings.c +++ b/src/lib-settings/settings.c @@ -1665,6 +1665,32 @@ void settings_root_deinit(struct settings_root **_root) pool_unref(&root->pool); } +struct settings_root *settings_root_find(const struct event *event) +{ + struct settings_root *root; + + do { + root = event_get_ptr(event, SETTINGS_EVENT_ROOT); + if (root != NULL) + return root; + event = event_get_parent(event); + } while (event != NULL); + return NULL; +} + +struct settings_instance *settings_instance_find(const struct event *event) +{ + struct settings_instance *instance; + + do { + instance = event_get_ptr(event, SETTINGS_EVENT_INSTANCE); + if (instance != NULL) + return instance; + event = event_get_parent(event); + } while (event != NULL); + return NULL; +} + void settings_simple_init(struct settings_simple *set_r, const char *const settings[]) { diff --git a/src/lib-settings/settings.h b/src/lib-settings/settings.h index cd0a66e538..19d110d7c2 100644 --- a/src/lib-settings/settings.h +++ b/src/lib-settings/settings.h @@ -263,6 +263,11 @@ bool settings_has_mmap(struct settings_root *root); struct settings_root *settings_root_init(void); void settings_root_deinit(struct settings_root **root); +/* Return SETTINGS_EVENT_ROOT from the event or its parents. */ +struct settings_root *settings_root_find(const struct event *event); +/* Return SETTINGS_EVENT_INSTANCE from the event or its parents. */ +struct settings_instance *settings_instance_find(const struct event *event); + struct settings_simple { struct settings_root *root; struct settings_instance *instance;