From ca61ed301de00dd778e52392ec621e260f23c337 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Wed, 16 Oct 2024 17:33:54 +0200 Subject: [PATCH] lib-sieve: sieve-storage - Add autodetect storage vfunc --- src/lib-sieve/sieve-storage-private.h | 14 +++++------ src/lib-sieve/sieve-storage.c | 4 +++- .../storage/file/sieve-file-storage.c | 24 ++++++++++--------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h index eb52e8baf..03183bdc6 100644 --- a/src/lib-sieve/sieve-storage-private.h +++ b/src/lib-sieve/sieve-storage-private.h @@ -25,6 +25,13 @@ struct sieve_storage_vfuncs { void (*destroy)(struct sieve_storage *storage); int (*init)(struct sieve_storage *storage, const char *const *options); + int (*autodetect)(struct sieve_instance *svinst, + const char *active_path, + enum sieve_storage_flags flags, + struct sieve_storage **storage_r, + enum sieve_error *error_code_r, + const char **error_r); + int (*get_last_change)(struct sieve_storage *storage, time_t *last_change_r); void (*set_modified)(struct sieve_storage *storage, time_t mtime); @@ -216,13 +223,6 @@ extern const struct sieve_storage sieve_data_storage; extern const struct sieve_storage sieve_file_storage; -int sieve_file_storage_init_default(struct sieve_instance *svinst, - const char *active_path, - enum sieve_storage_flags flags, - struct sieve_storage **storage_r, - enum sieve_error *error_code_r, - const char **error_r); - /* dict */ #define SIEVE_DICT_STORAGE_DRIVER_NAME "dict" diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c index 069fb6602..6fa2154cc 100644 --- a/src/lib-sieve/sieve-storage.c +++ b/src/lib-sieve/sieve-storage.c @@ -615,7 +615,9 @@ sieve_storage_do_create_personal(struct sieve_instance *svinst, if (storage == NULL) { const char *error; - if (sieve_file_storage_init_default(svinst, set_sieve, flags, + + i_assert(sieve_file_storage.v.autodetect != NULL); + if (sieve_file_storage.v.autodetect(svinst, set_sieve, flags, &storage, error_code_r, &error) < 0) return -1; diff --git a/src/lib-sieve/storage/file/sieve-file-storage.c b/src/lib-sieve/storage/file/sieve-file-storage.c index 3296bdeb7..67478b09a 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage.c +++ b/src/lib-sieve/storage/file/sieve-file-storage.c @@ -590,10 +590,9 @@ sieve_file_storage_init(struct sieve_storage *storage, } static int -sieve_file_storage_do_init_default(struct sieve_file_storage *fstorage, - const char *active_path, - enum sieve_error *error_code_r, - const char **error_r) +sieve_file_storage_do_autodetect( + struct sieve_file_storage *fstorage, const char *active_path, + enum sieve_error *error_code_r, const char **error_r) { struct sieve_storage *storage = &fstorage->storage; struct sieve_instance *svinst = storage->svinst; @@ -679,12 +678,13 @@ sieve_file_storage_do_init_default(struct sieve_file_storage *fstorage, return 0; } -int sieve_file_storage_init_default(struct sieve_instance *svinst, - const char *active_path, - enum sieve_storage_flags flags, - struct sieve_storage **storage_r, - enum sieve_error *error_code_r, - const char **error_r) +static int +sieve_file_storage_autodetect(struct sieve_instance *svinst, + const char *active_path, + enum sieve_storage_flags flags, + struct sieve_storage **storage_r, + enum sieve_error *error_code_r, + const char **error_r) { struct sieve_storage *storage; struct sieve_file_storage *fstorage; @@ -698,7 +698,7 @@ int sieve_file_storage_init_default(struct sieve_instance *svinst, fstorage = container_of(storage, struct sieve_file_storage, storage); T_BEGIN { - ret = sieve_file_storage_do_init_default( + ret = sieve_file_storage_do_autodetect( fstorage, active_path, error_code_r, error_r); } T_END_PASS_STR_IF(ret < 0, error_r); if (ret < 0) { @@ -888,6 +888,8 @@ const struct sieve_storage sieve_file_storage = { .alloc = sieve_file_storage_alloc, .init = sieve_file_storage_init, + .autodetect = sieve_file_storage_autodetect, + .get_last_change = sieve_file_storage_get_last_change, .set_modified = sieve_file_storage_set_modified, -- GitLab