diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h index eb52e8bafe8ee064a0f84d300c2f8fde598bd044..03183bdc60ec4ec4961807f5dc362139a540a5a9 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 069fb6602b80cae6c7b1d538ab37a555a9b19945..6fa2154cc9254c8307c4c0dde73dbd4326ec11d7 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 3296bdeb7262dcd4e2367ab76efcddfd19c029e0..67478b09af03240aca4e5f2ba1adc03c66b90b84 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,