From b55cf28ac4645783d674d38f478d515969dd59f9 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Wed, 16 Oct 2024 16:33:27 +0200
Subject: [PATCH] lib-sieve: sieve-storage: sieve-file-storage - Use int for
 sieve_file_storage_init_default() status result

---
 src/lib-sieve/sieve-storage-private.h         | 10 ++++----
 src/lib-sieve/sieve-storage.c                 |  6 +++--
 .../storage/file/sieve-file-storage.c         | 23 +++++++++++--------
 3 files changed, 22 insertions(+), 17 deletions(-)

diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h
index c42822315..0baaa78a7 100644
--- a/src/lib-sieve/sieve-storage-private.h
+++ b/src/lib-sieve/sieve-storage-private.h
@@ -208,11 +208,11 @@ extern const struct sieve_storage sieve_data_storage;
 
 extern const struct sieve_storage sieve_file_storage;
 
-struct sieve_storage *
-sieve_file_storage_init_default(struct sieve_instance *svinst,
-				const char *active_path,
-				enum sieve_storage_flags flags,
-				enum sieve_error *error_code_r);
+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);
 
 /* dict */
 
diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c
index 4aee4fc38..9db3a4ade 100644
--- a/src/lib-sieve/sieve-storage.c
+++ b/src/lib-sieve/sieve-storage.c
@@ -443,8 +443,10 @@ sieve_storage_do_create_personal(struct sieve_instance *svinst,
 	}
 
 	if (storage == NULL) {
-		storage = sieve_file_storage_init_default(svinst, set_sieve,
-							  flags, error_code_r);
+		if (sieve_file_storage_init_default(svinst, set_sieve, flags,
+						    &storage, error_code_r) < 0)
+			return NULL;
+		i_assert(storage != NULL);
 	}
 
 	if (storage == NULL)
diff --git a/src/lib-sieve/storage/file/sieve-file-storage.c b/src/lib-sieve/storage/file/sieve-file-storage.c
index cb4347f10..325f1511c 100644
--- a/src/lib-sieve/storage/file/sieve-file-storage.c
+++ b/src/lib-sieve/storage/file/sieve-file-storage.c
@@ -697,11 +697,11 @@ sieve_file_storage_do_init_default(struct sieve_file_storage *fstorage,
 	return 0;
 }
 
-struct sieve_storage *
-sieve_file_storage_init_default(struct sieve_instance *svinst,
-				const char *active_path,
-				enum sieve_storage_flags flags,
-				enum sieve_error *error_code_r)
+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)
 {
 	struct sieve_storage *storage;
 	struct sieve_file_storage *fstorage;
@@ -713,12 +713,15 @@ sieve_file_storage_init_default(struct sieve_instance *svinst,
 	fstorage = container_of(storage, struct sieve_file_storage, storage);
 
 	T_BEGIN {
-		if (sieve_file_storage_do_init_default(fstorage, active_path,
-						       error_code_r) < 0)
-			sieve_storage_unref(&storage);
+		ret = sieve_file_storage_do_init_default(fstorage, active_path,
+							 error_code_r);
 	} T_END;
-
-	return storage;
+	if (ret < 0) {
+		sieve_storage_unref(&storage);
+		return -1;
+	}
+	*storage_r = storage;
+	return 0;
 }
 
 int sieve_file_storage_init_from_path(struct sieve_instance *svinst,
-- 
GitLab