]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
config: Add config_parsed_get_setting_change_counter()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 10 Mar 2025 17:04:02 +0000 (19:04 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Tue, 11 Mar 2025 08:45:55 +0000 (08:45 +0000)
src/config/config-parser.c
src/config/config-parser.h

index 4d80460c2bc4a3c2a3389ee3e98820c7631cca03..356de2d5ac62fb902bc6db774e9ac7e107f160a9 100644 (file)
@@ -3081,9 +3081,10 @@ config_parsed_strlist_append(string_t *keyvals,
        }
 }
 
-const char *
-config_parsed_get_setting(struct config_parsed *config,
-                         const char *info_name, const char *key)
+static const char *
+config_parsed_get_setting_full(struct config_parsed *config,
+                              const char *info_name, const char *key,
+                              unsigned int *change_counter_r)
 {
        struct config_filter_parser *filter_parser =
                config_parsed_get_global_filter_parser(config);
@@ -3106,6 +3107,10 @@ config_parsed_get_setting(struct config_parsed *config,
 
        const struct setting_define *def = &l[info_idx].info->defines[key_idx];
 
+       if (change_counter_r != NULL) {
+               *change_counter_r = l[info_idx].change_counters[key_idx];
+               return NULL;
+       }
        /* Custom handler for the import_environment strlist setting. The
           calling function expects a string of key=value pairs. See
           master_service_get_import_environment_keyvals() for the original
@@ -3135,6 +3140,24 @@ config_parsed_get_setting(struct config_parsed *config,
        return str_c(str);
 }
 
+const char *
+config_parsed_get_setting(struct config_parsed *config,
+                         const char *info_name, const char *key)
+{
+       return config_parsed_get_setting_full(config, info_name, key, NULL);
+}
+
+unsigned int
+config_parsed_get_setting_change_counter(struct config_parsed *config,
+                                        const char *info_name, const char *key)
+{
+       unsigned int change_counter;
+
+       (void)config_parsed_get_setting_full(config, info_name, key,
+                                            &change_counter);
+       return change_counter;
+}
+
 const struct setting_define *
 config_parsed_key_lookup(struct config_parsed *config, const char *key)
 {
index 7c1bd128b6b0c36dd8352fcbf1353e2fc6a530f5..949aac100b5b175554f580e6a3b3a00172f689d7 100644 (file)
@@ -102,6 +102,11 @@ void config_fill_set_parser(struct setting_parser_context *parser,
 const char *
 config_parsed_get_setting(struct config_parsed *config,
                          const char *info_name, const char *key);
+/* Return the change_counter for the specified setting. */
+unsigned int
+config_parsed_get_setting_change_counter(struct config_parsed *config,
+                                        const char *info_name,
+                                        const char *key);
 /* Lookup setting with the specified key. */
 const struct setting_define *
 config_parsed_key_lookup(struct config_parsed *config, const char *key);