From 08088d90d5ed502ab1ae67b3e6d76cc57e5abe14 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Tue, 1 Oct 2024 20:08:38 +0200
Subject: [PATCH] lib-sieve: sieve-script - Move generic script comparison to
 the common function

---
 src/lib-sieve/sieve-script.c                  |  8 ++++++-
 .../storage/dict/sieve-dict-script.c          | 22 -------------------
 .../storage/file/sieve-file-script.c          |  3 +--
 .../storage/ldap/sieve-ldap-script.c          | 16 --------------
 4 files changed, 8 insertions(+), 41 deletions(-)

diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c
index 11e7b6635..11f934d9a 100644
--- a/src/lib-sieve/sieve-script.c
+++ b/src/lib-sieve/sieve-script.c
@@ -400,6 +400,8 @@ int sieve_script_get_stream(struct sieve_script *script,
 int sieve_script_cmp(const struct sieve_script *script1,
 		     const struct sieve_script *script2)
 {
+	int ret;
+
 	if (script1 == script2)
 		return 0;
 	if (script1 == NULL || script2 == NULL)
@@ -410,7 +412,11 @@ int sieve_script_cmp(const struct sieve_script *script1,
 	if (script1->v.cmp == NULL) {
 		i_assert (script1->location != NULL && script2->location != NULL);
 
-		return strcmp(script1->location, script2->location);
+		ret = strcmp(script1->location, script2->location);
+		if (ret != 0)
+			return (ret < 0 ? -1 : 1);
+
+		return null_strcmp(script1->name, script2->name);
 	}
 
 	return script1->v.cmp(script1, script2);
diff --git a/src/lib-sieve/storage/dict/sieve-dict-script.c b/src/lib-sieve/storage/dict/sieve-dict-script.c
index 4448c003f..6ccac8ebb 100644
--- a/src/lib-sieve/storage/dict/sieve-dict-script.c
+++ b/src/lib-sieve/storage/dict/sieve-dict-script.c
@@ -238,26 +238,6 @@ sieve_dict_script_binary_save(struct sieve_script *script,
 		update, 0600);
 }
 
-static int
-sieve_dict_script_cmp(const struct sieve_script *script,
-		      const struct sieve_script *other)
-{
-	struct sieve_storage *storage = script->storage;
-	struct sieve_storage *sother = other->storage;
-	int ret;
-
-	ret = strcmp(storage->location, sother->location);
-	if (ret != 0)
-		return (ret < 0 ? -1 : 1);
-
-	i_assert(script->name != NULL && other->name != NULL);
-
-	ret = strcmp(script->name, other->name);
-	if (ret != 0)
-		return (ret < 0 ? -1 : 1);
-	return 0;
-}
-
 const struct sieve_script sieve_dict_script = {
 	.driver_name = SIEVE_DICT_STORAGE_DRIVER_NAME,
 	.v = {
@@ -272,8 +252,6 @@ const struct sieve_script sieve_dict_script = {
 		.binary_dump_metadata = sieve_dict_script_binary_dump_metadata,
 		.binary_load = sieve_dict_script_binary_load,
 		.binary_save = sieve_dict_script_binary_save,
-
-		.cmp = sieve_dict_script_cmp,
 	},
 };
 
diff --git a/src/lib-sieve/storage/file/sieve-file-script.c b/src/lib-sieve/storage/file/sieve-file-script.c
index ac2b0eb46..cb53e3bf0 100644
--- a/src/lib-sieve/storage/file/sieve-file-script.c
+++ b/src/lib-sieve/storage/file/sieve-file-script.c
@@ -824,8 +824,7 @@ sieve_file_script_cmp(const struct sieve_script *script1,
 		if (ret != 0)
 			return ret;
 
-		i_assert(script1->name != NULL && script2->name != NULL);
-		return strcmp(script1->name, script2->name);
+		return null_strcmp(script1->name, script2->name);
 	}
 
 	if (major(fscript1->st.st_dev) != major(fscript2->st.st_dev)) {
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-script.c b/src/lib-sieve/storage/ldap/sieve-ldap-script.c
index 1ee543a5d..f1d7b177a 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-script.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-script.c
@@ -262,20 +262,6 @@ sieve_ldap_script_binary_save(struct sieve_script *script,
 		update, 0600);
 }
 
-static int
-sieve_ldap_script_cmp(const struct sieve_script *script1,
-		      const struct sieve_script *script2)
-{
-	int ret;
-
-	i_assert(script1->name != NULL && script2->name != NULL);
-
-	ret = strcmp(script1->name, script2->name);
-	if (ret != 0)
-		return (ret > 0 ? 1 : -1);
-	return 0;
-}
-
 const struct sieve_script sieve_ldap_script = {
 	.driver_name = SIEVE_LDAP_STORAGE_DRIVER_NAME,
 	.v = {
@@ -289,8 +275,6 @@ const struct sieve_script sieve_ldap_script = {
 		.binary_dump_metadata = sieve_ldap_script_binary_dump_metadata,
 		.binary_load = sieve_ldap_script_binary_load,
 		.binary_save = sieve_ldap_script_binary_save,
-
-		.cmp = sieve_ldap_script_cmp,
 	},
 };
 
-- 
GitLab