From dc61b36706d535e1c9f69b0e14856bd569266e4d Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sun, 31 Aug 2008 16:08:02 +0200
Subject: [PATCH] Added support for runtime detection of variable strings.

---
 src/lib-sieve/sieve-code.c | 24 ++++++++++++++++++++++++
 src/lib-sieve/sieve-code.h |  5 +++++
 2 files changed, 29 insertions(+)

diff --git a/src/lib-sieve/sieve-code.c b/src/lib-sieve/sieve-code.c
index 5aaf4d07d..164bb20fc 100644
--- a/src/lib-sieve/sieve-code.c
+++ b/src/lib-sieve/sieve-code.c
@@ -470,6 +470,19 @@ bool sieve_opr_string_dump
 	return sieve_opr_string_dump_data(denv, operand, address);
 }
 
+bool sieve_opr_string_dump_ex
+(const struct sieve_dumptime_env *denv, sieve_size_t *address, bool *literal)
+{
+	const struct sieve_operand *operand;
+	
+	sieve_code_mark(denv);
+	operand = sieve_operand_read(denv->sbin, address);
+
+	*literal = ( operand == &string_operand );	
+
+	return sieve_opr_string_dump_data(denv, operand, address);
+} 
+
 bool sieve_opr_string_read_data
 (const struct sieve_runtime_env *renv, const struct sieve_operand *operand,
 	sieve_size_t *address, string_t **str)
@@ -495,6 +508,17 @@ bool sieve_opr_string_read
 	return sieve_opr_string_read_data(renv, operand, address, str);
 }
 
+bool sieve_opr_string_read_ex
+(const struct sieve_runtime_env *renv, sieve_size_t *address, string_t **str,
+	bool *literal)
+{
+	const struct sieve_operand *operand = sieve_operand_read(renv->sbin, address);
+
+	*literal = ( operand == &string_operand );
+
+	return sieve_opr_string_read_data(renv, operand, address, str);
+}
+
 static void _dump_string
 (const struct sieve_dumptime_env *denv, string_t *str) 
 {
diff --git a/src/lib-sieve/sieve-code.h b/src/lib-sieve/sieve-code.h
index bf021dba4..8f59a49fe 100644
--- a/src/lib-sieve/sieve-code.h
+++ b/src/lib-sieve/sieve-code.h
@@ -163,11 +163,16 @@ bool sieve_opr_string_dump_data
 		sieve_size_t *address); 
 bool sieve_opr_string_dump
 	(const struct sieve_dumptime_env *denv, sieve_size_t *address); 
+bool sieve_opr_string_dump_ex
+	(const struct sieve_dumptime_env *denv, sieve_size_t *address, bool *literal); 
 bool sieve_opr_string_read_data
 	(const struct sieve_runtime_env *renv, const struct sieve_operand *operand,
 		sieve_size_t *address, string_t **str);
 bool sieve_opr_string_read
 	(const struct sieve_runtime_env *renv, sieve_size_t *address, string_t **str);
+bool sieve_opr_string_read_ex
+	(const struct sieve_runtime_env *renv, sieve_size_t *address, string_t **str,
+		bool *literal);
 
 static inline bool sieve_operand_is_string
 (const struct sieve_operand *operand)
-- 
GitLab