summaryrefslogtreecommitdiff
path: root/libmu_sieve/sieve.l
diff options
context:
space:
mode:
Diffstat (limited to 'libmu_sieve/sieve.l')
-rw-r--r--libmu_sieve/sieve.l48
1 files changed, 17 insertions, 31 deletions
diff --git a/libmu_sieve/sieve.l b/libmu_sieve/sieve.l
index f04d219c9..43edd6a79 100644
--- a/libmu_sieve/sieve.l
+++ b/libmu_sieve/sieve.l
@@ -642,46 +642,32 @@ str_unescape (char *text, size_t len)
return str;
}
-enum
- {
- interp_encoded_character,
- interp_variable
- };
-
-#define MAXINTERP (interp_variable+1)
-mu_i_sv_interp_t interpreter[MAXINTERP];
+static mu_i_sv_interp_t string_interpreter;
static void
line_finish (void)
{
- int i;
char *str;
mu_opool_append_char (mu_sieve_machine->string_pool, 0);
str = mu_opool_finish (mu_sieve_machine->string_pool, NULL);
- for (i = 0; i < MAXINTERP; i++)
+ if (string_interpreter)
{
- if (interpreter[i])
+ char *exp;
+ int rc = mu_i_sv_string_expand (str, string_interpreter, NULL, &exp);
+ if (rc == 0)
+ {
+ mu_opool_free (mu_sieve_machine->string_pool, str);
+ mu_opool_appendz (mu_sieve_machine->string_pool, exp);
+ mu_opool_append_char (mu_sieve_machine->string_pool, 0);
+ free (exp);
+ str = mu_opool_finish (mu_sieve_machine->string_pool, NULL);
+ }
+ else if (rc != MU_ERR_CANCELED)
{
- char *exp;
- int rc = mu_i_sv_string_expand (str, interpreter[i], NULL, &exp);
- if (rc == 0)
- {
- mu_opool_free (mu_sieve_machine->string_pool, str);
- mu_opool_appendz (mu_sieve_machine->string_pool, exp);
- mu_opool_append_char (mu_sieve_machine->string_pool, 0);
- free (exp);
- str = mu_opool_finish (mu_sieve_machine->string_pool, NULL);
- }
- else if (rc == MU_ERR_CANCELED)
- continue;
- else
- {
- mu_diag_at_locus (MU_LOG_ERROR, &mu_sieve_locus,
- _("error expandind string: %s"),
- mu_strerror (rc));
- break;
- }
+ mu_diag_at_locus (MU_LOG_ERROR, &mu_sieve_locus,
+ _("error expandind string: %s"),
+ mu_strerror (rc));
}
}
yylval.string = str;
@@ -691,6 +677,6 @@ int
mu_sieve_require_encoded_character (mu_sieve_machine_t mach,
const char *name)
{
- interpreter[interp_encoded_character] = mu_i_sv_expand_encoded_char;
+ string_interpreter = mu_i_sv_expand_encoded_char;
return 0;
}

Return to:

Send suggestions and report system problems to the System administrator.