diff --git a/src/lib-sieve/storage/file/sieve-file-script.c b/src/lib-sieve/storage/file/sieve-file-script.c index 3fadcc599f289d10ecd74c766369aaee60989621..f9868f34ed5842e8330eb1e0394b00025030541b 100644 --- a/src/lib-sieve/storage/file/sieve-file-script.c +++ b/src/lib-sieve/storage/file/sieve-file-script.c @@ -221,9 +221,8 @@ int sieve_file_script_init_from_path(struct sieve_file_storage *fstorage, *fscript_r = NULL; - fsubstorage = sieve_file_storage_init_from_path(svinst, path, 0, - &error_code); - if (fsubstorage == NULL) { + if (sieve_file_storage_init_from_path(svinst, path, 0, &fsubstorage, + &error_code) < 0) { sieve_storage_set_error(storage, error_code, "Failed to open script"); 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 35bdaa63b753f9bcd9f98317b5493abfac41e9a6..cb4347f1005d88e0cade354348541c093de39888 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage.c +++ b/src/lib-sieve/storage/file/sieve-file-storage.c @@ -721,32 +721,40 @@ sieve_file_storage_init_default(struct sieve_instance *svinst, return storage; } -struct sieve_file_storage * -sieve_file_storage_init_from_path(struct sieve_instance *svinst, - const char *path, - enum sieve_storage_flags flags, - enum sieve_error *error_code_r) +int sieve_file_storage_init_from_path(struct sieve_instance *svinst, + const char *path, + enum sieve_storage_flags flags, + struct sieve_file_storage **fstorage_r, + enum sieve_error *error_code_r) { struct sieve_storage *storage; struct sieve_file_storage *fstorage; + enum sieve_error error_code; int ret; i_assert(path != NULL); + *fstorage_r = NULL; + if (error_code_r != NULL) + *error_code_r = SIEVE_ERROR_NONE; + else + error_code_r = &error_code; + ret = sieve_storage_alloc(svinst, NULL, &sieve_file_storage, "", flags, FALSE, &storage); i_assert(ret == 0); fstorage = container_of(storage, struct sieve_file_storage, storage); T_BEGIN { - if (sieve_file_storage_init_common(fstorage, path, NULL, FALSE, - error_code_r) < 0) { - sieve_storage_unref(&storage); - fstorage = NULL; - } + ret = sieve_file_storage_init_common(fstorage, path, NULL, + FALSE, error_code_r); } T_END; - - return fstorage; + if (ret < 0) { + sieve_storage_unref(&storage); + return -1; + } + *fstorage_r = fstorage; + return 0; } static int sieve_file_storage_is_singular(struct sieve_storage *storage) diff --git a/src/lib-sieve/storage/file/sieve-file-storage.h b/src/lib-sieve/storage/file/sieve-file-storage.h index 6a9a7e929529fa465e1e5cfc79cb27240a921155..2f1a995fe4ad1ed5574ae5bcb1a8c0ba0c01c6ba 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage.h +++ b/src/lib-sieve/storage/file/sieve-file-storage.h @@ -46,11 +46,11 @@ const char * sieve_file_storage_path_extend(struct sieve_file_storage *fstorage, const char *filename); -struct sieve_file_storage * -sieve_file_storage_init_from_path(struct sieve_instance *svinst, - const char *path, - enum sieve_storage_flags flags, - enum sieve_error *error_code_r); +int sieve_file_storage_init_from_path(struct sieve_instance *svinst, + const char *path, + enum sieve_storage_flags flags, + struct sieve_file_storage **fstorage_r, + enum sieve_error *error_code_r); int sieve_file_storage_pre_modify(struct sieve_storage *storage);