From: Timo Sirainen Date: Fri, 28 Jul 2023 12:42:20 +0000 (+0300) Subject: fs-sis-queue: Implement new init() API X-Git-Tag: 2.4.1~1401 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb5901a38fa6fd551debd7b91c131eb117d4850c;p=thirdparty%2Fdovecot%2Fcore.git fs-sis-queue: Implement new init() API --- diff --git a/src/lib-fs/fs-sis-queue.c b/src/lib-fs/fs-sis-queue.c index c763c76a50..4f1dd303c0 100644 --- a/src/lib-fs/fs-sis-queue.c +++ b/src/lib-fs/fs-sis-queue.c @@ -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,