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