]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-settings: Add settings_key_exists()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 10 Apr 2025 14:54:12 +0000 (17:54 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Mon, 12 May 2025 15:51:47 +0000 (15:51 +0000)
src/lib-settings/settings.c
src/lib-settings/settings.h

index 4bd815a0e32f6b905e2faf9fcbac79e3bbaf5155..31e8862779dffa93de9642f7b638f32a72dfcc3d 100644 (file)
@@ -2710,6 +2710,30 @@ settings_get_real(struct event *event,
        return ret;
 }
 
+bool settings_key_exists(struct event *event, const char *key)
+{
+       struct settings_root *root = NULL;
+       do {
+               root = event_get_ptr(event, SETTINGS_EVENT_ROOT);
+               event = event_get_parent(event);
+       } while (root == NULL && event != NULL);
+       if (root == NULL)
+               i_panic("settings_key_exists() - event has no SETTINGS_EVENT_ROOT");
+
+       bool ret;
+       T_BEGIN {
+               size_t len = strlen(key);
+               if (len > 0 && key[len-1] == SETTINGS_APPEND_KEY_SUFFIX[0])
+                       key = t_strndup(key, len - 1);
+
+               enum setting_type set_type ATTR_UNUSED;
+               const void *blocks ATTR_UNUSED;
+               ret = settings_mmap_lookup_key(root->mmap, key,
+                                              &set_type, &blocks);
+       } T_END;
+       return ret;
+}
+
 struct settings_filter_array_item {
        union {
                unsigned int uint;
index 5a7ee6723050e9c3ac6df830b2d8c85ab7aea31a..59ae1584ba2830acd8cf18f7434cef5cb98d2a2a 100644 (file)
@@ -257,6 +257,10 @@ settings_get_or_fatal(struct event *event,
                } \
        } STMT_END
 
+/* Returns TRUE if a setting key is valid. The settings must have been read
+   before calling this. SETTINGS_APPEND_KEY_SUFFIX is ignored in the key. */
+bool settings_key_exists(struct event *event, const char *key);
+
 /* Override a setting. */
 void settings_override(struct settings_instance *instance,
                       const char *key, const char *value,