From e31b010e2fdcbace381d41abac9072cadc093880 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Mon, 7 Oct 2024 21:22:40 +0200
Subject: [PATCH] lib-sieve: sieve-storage - Add sieve_storage_cmp()

---
 src/lib-sieve/sieve-storage-private.h |  7 +++++++
 src/lib-sieve/sieve-storage.c         | 18 ++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h
index 7ed7f31dc..64bb8f138 100644
--- a/src/lib-sieve/sieve-storage-private.h
+++ b/src/lib-sieve/sieve-storage-private.h
@@ -126,6 +126,13 @@ int sieve_storage_alloc(struct sieve_instance *svinst, struct event *event,
 
 int sieve_storage_setup_bin_path(struct sieve_storage *storage, mode_t mode);
 
+/*
+ * Comparison
+ */
+
+int sieve_storage_cmp(const struct sieve_storage *storage1,
+		      const struct sieve_storage *storage2);
+
 /*
  * Active script
  */
diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c
index c6e4de21a..5a8155a69 100644
--- a/src/lib-sieve/sieve-storage.c
+++ b/src/lib-sieve/sieve-storage.c
@@ -836,6 +836,24 @@ void sieve_storage_set_modified(struct sieve_storage *storage, time_t mtime)
 	storage->v.set_modified(storage, mtime);
 }
 
+/*
+ * Comparison
+ */
+
+int sieve_storage_cmp(const struct sieve_storage *storage1,
+		      const struct sieve_storage *storage2)
+{
+	if (storage1 == storage2)
+		return 0;
+	if (storage1 == NULL || storage2 == NULL)
+		return (storage1 == NULL ? -1 : 1);
+	if (storage1->storage_class != storage2->storage_class) {
+		return (storage1->storage_class > storage2->storage_class ?
+			1 : -1);
+	}
+	return null_strcmp(storage1->location, storage2->location);
+}
+
 /*
  * Script access
  */
-- 
GitLab