]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fs-sis-queue: Implement new init() API
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 28 Jul 2023 12:42:20 +0000 (15:42 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:10 +0000 (12:34 +0200)
src/lib-fs/fs-sis-queue.c

index c763c76a50a4a0b260afb208277196c4b383ac81..4f1dd303c081a4683240ba30b4e07ec36fc36302 100644 (file)
@@ -4,8 +4,14 @@
 #include "str.h"
 #include "istream.h"
 #include "ostream.h"
+#include "settings.h"
 #include "fs-sis-common.h"
 
+struct fs_sis_queue_settings {
+       pool_t pool;
+       const char *fs_sis_queue_path;
+};
+
 struct sis_queue_fs {
        struct fs fs;
        char *queue_dir;
@@ -19,6 +25,28 @@ struct sis_queue_fs_file {
 #define SISQUEUE_FS(ptr)       container_of((ptr), struct sis_queue_fs, fs)
 #define SISQUEUE_FILE(ptr)     container_of((ptr), struct sis_queue_fs_file, file)
 
+#undef DEF
+#define DEF(type, name) \
+       SETTING_DEFINE_STRUCT_##type(#name, name, struct fs_sis_queue_settings)
+static const struct setting_define fs_sis_queue_setting_defines[] = {
+       DEF(STR, fs_sis_queue_path),
+
+       SETTING_DEFINE_LIST_END
+};
+static const struct fs_sis_queue_settings fs_sis_queue_default_settings = {
+       .fs_sis_queue_path = "",
+};
+
+const struct setting_parser_info fs_sis_queue_setting_parser_info = {
+       .name = "fs_sis_queue",
+
+       .defines = fs_sis_queue_setting_defines,
+       .defaults = &fs_sis_queue_default_settings,
+
+       .struct_size = sizeof(struct fs_sis_queue_settings),
+       .pool_offset1 = 1 + offsetof(struct fs_sis_queue_settings, pool),
+};
+
 static struct fs *fs_sis_queue_alloc(void)
 {
        struct sis_queue_fs *fs;
@@ -29,8 +57,24 @@ static struct fs *fs_sis_queue_alloc(void)
 }
 
 static int
-fs_sis_queue_init(struct fs *_fs, const char *args,
-                 const struct fs_parameters *params, const char **error_r)
+fs_sis_queue_init(struct fs *_fs, const struct fs_parameters *params,
+                 const char **error_r)
+{
+       struct sis_queue_fs *fs = SISQUEUE_FS(_fs);
+       const struct fs_sis_queue_settings *set;
+
+       if (settings_get(_fs->event, &fs_sis_queue_setting_parser_info, 0,
+                        &set, error_r) < 0)
+               return -1;
+       fs->queue_dir = i_strdup(set->fs_sis_queue_path);
+       settings_free(set);
+
+       return fs_init_parent(_fs, params, error_r);
+}
+
+static int
+fs_sis_queue_legacy_init(struct fs *_fs, const char *args,
+                        const struct fs_parameters *params, const char **error_r)
 {
        struct sis_queue_fs *fs = SISQUEUE_FS(_fs);
        const char *p, *parent_name, *parent_args;
@@ -173,7 +217,8 @@ const struct fs fs_class_sis_queue = {
        .name = "sis-queue",
        .v = {
                .alloc = fs_sis_queue_alloc,
-               .legacy_init = fs_sis_queue_init,
+               .init = fs_sis_queue_init,
+               .legacy_init = fs_sis_queue_legacy_init,
                .deinit = NULL,
                .free = fs_sis_queue_free,
                .get_properties = fs_wrapper_get_properties,