From 58653596778109452e82b22ce1059d04fa65fbba Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Sun, 29 Sep 2024 01:04:36 +0200
Subject: [PATCH] lib-sieve: sieve-storage: sieve-file-storage - Use int for
 sieve_file_storage_init_from_path() status result

---
 .../storage/file/sieve-file-script.c          |  5 ++-
 .../storage/file/sieve-file-storage.c         | 32 ++++++++++++-------
 .../storage/file/sieve-file-storage.h         | 10 +++---
 3 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/src/lib-sieve/storage/file/sieve-file-script.c b/src/lib-sieve/storage/file/sieve-file-script.c
index 3fadcc599..f9868f34e 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 35bdaa63b..cb4347f10 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 6a9a7e929..2f1a995fe 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);
 
-- 
GitLab