From acc9246f82b01c8d25bfd257ea48e7c2ac22d223 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sun, 11 Nov 2007 18:01:57 +0100
Subject: [PATCH] Enabled comparator execution support.

---
 src/lib-sieve/sieve-commands.c    | 1 +
 src/lib-sieve/sieve-common.h      | 4 ++++
 src/lib-sieve/sieve-interpreter.c | 4 ++--
 src/lib-sieve/sieve-interpreter.h | 5 ++---
 src/lib-sieve/tst-address.c       | 2 +-
 src/lib-sieve/tst-header.c        | 2 +-
 6 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/lib-sieve/sieve-commands.c b/src/lib-sieve/sieve-commands.c
index 1c9429e87..73c055b41 100644
--- a/src/lib-sieve/sieve-commands.c
+++ b/src/lib-sieve/sieve-commands.c
@@ -3,6 +3,7 @@
 #include "sieve-ast.h"
 #include "sieve-validator.h"
 #include "sieve-generator.h"
+#include "sieve-binary.h"
 
 #include "sieve-commands.h"
 #include "sieve-commands-private.h"
diff --git a/src/lib-sieve/sieve-common.h b/src/lib-sieve/sieve-common.h
index ef6412c24..2937a1b74 100644
--- a/src/lib-sieve/sieve-common.h
+++ b/src/lib-sieve/sieve-common.h
@@ -41,11 +41,15 @@ struct sieve_extension;
 /* sieve-code.h */
 struct sieve_operand;
 struct sieve_opcode;
+struct sieve_coded_stringlist;
 
 /* sieve-binary.h */
 typedef size_t sieve_size_t;
 struct sieve_binary;
 
+/* sieve-comparator.h */
+struct sieve_comparator;
+
 /*
  *
  */
diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c
index 1ba3a74f7..21596e8f4 100644
--- a/src/lib-sieve/sieve-interpreter.c
+++ b/src/lib-sieve/sieve-interpreter.c
@@ -177,7 +177,7 @@ bool sieve_interpreter_read_offset_operand
 /* Stringlist Utility */
 
 bool sieve_stringlist_match
-	(struct sieve_coded_stringlist *key_list, const char *value)
+	(struct sieve_coded_stringlist *key_list, const char *value, const struct sieve_comparator *cmp)
 {
 	string_t *key_item;
 	sieve_coded_stringlist_reset(key_list);
@@ -185,7 +185,7 @@ bool sieve_stringlist_match
 	/* Match to all key values */
 	key_item = NULL;
 	while ( sieve_coded_stringlist_next_item(key_list, &key_item) && key_item != NULL ) {
-		if ( strncmp(value, str_c(key_item), str_len(key_item)) == 0 )
+		if ( cmp->compare(value, strlen(value), str_c(key_item), str_len(key_item)) == 0 )
 			return TRUE;  
   }
   
diff --git a/src/lib-sieve/sieve-interpreter.h b/src/lib-sieve/sieve-interpreter.h
index 031583349..d89e85f5e 100644
--- a/src/lib-sieve/sieve-interpreter.h
+++ b/src/lib-sieve/sieve-interpreter.h
@@ -6,8 +6,7 @@
 #include "buffer.h"
 #include "mail-storage.h"
 
-#include "sieve-binary.h"
-#include "sieve-code.h"
+#include "sieve-common.h"
 
 struct sieve_interpreter;
 
@@ -48,7 +47,7 @@ bool sieve_interpreter_read_offset_operand
 /* Stringlist Utility */
 
 bool sieve_stringlist_match
-	(struct sieve_coded_stringlist *key_list, const char *value);
+	(struct sieve_coded_stringlist *key_list, const char *value, const struct sieve_comparator *cmp);
 
 /* Accessing runtime information */
 
diff --git a/src/lib-sieve/tst-address.c b/src/lib-sieve/tst-address.c
index 6432abfb0..c13ca9c66 100644
--- a/src/lib-sieve/tst-address.c
+++ b/src/lib-sieve/tst-address.c
@@ -179,7 +179,7 @@ static bool tst_address_opcode_execute
 			
 			int i;
 			for ( i = 0; !matched && headers[i] != NULL; i++ ) {
-				if ( sieve_stringlist_match(key_list, headers[i]) )
+				if ( sieve_stringlist_match(key_list, headers[i], cmp) )
 					matched = TRUE;				
 			} 
 		}
diff --git a/src/lib-sieve/tst-header.c b/src/lib-sieve/tst-header.c
index 91444b351..78718568a 100644
--- a/src/lib-sieve/tst-header.c
+++ b/src/lib-sieve/tst-header.c
@@ -169,7 +169,7 @@ static bool tst_header_opcode_execute
 			
 			int i;
 			for ( i = 0; !matched && headers[i] != NULL; i++ ) {
-				if ( sieve_stringlist_match(key_list, headers[i]) )
+				if ( sieve_stringlist_match(key_list, headers[i], cmp) )
 					matched = TRUE;				
 			} 
 		}
-- 
GitLab