diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h index 7ed7f31dc301cd85a3919482ca6ab1c61711f3c4..64bb8f138386938547c1af6c45ad5c591dc746db 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 c6e4de21a1c0b3d6a8c6dc622c40352bf471b04a..5a8155a69bf35342c15f86b3e3860d73ce79d048 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 */