diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c index 94a0d089938539c21e247a88393f202c7cce5c93..2669e21bf50d15a7b8d134964bf1b9226a2828e4 100644 --- a/src/lib-sieve/sieve-interpreter.c +++ b/src/lib-sieve/sieve-interpreter.c @@ -815,6 +815,21 @@ sieve_interpreter_do_program_jump(struct sieve_interpreter *interp, return SIEVE_EXEC_OK; } +int sieve_interpreter_program_jump_to(struct sieve_interpreter *interp, + sieve_size_t jmp_target, + bool break_loops) +{ + int ret; + + ret = sieve_interpreter_check_program_jump(interp, jmp_target, + break_loops); + if (ret <= 0) + return ret; + + return sieve_interpreter_do_program_jump( + interp, jmp_target, break_loops); +} + int sieve_interpreter_program_jump(struct sieve_interpreter *interp, bool jump, bool break_loops) { diff --git a/src/lib-sieve/sieve-interpreter.h b/src/lib-sieve/sieve-interpreter.h index 89b98e523c9d7437bee96ed90e6f659ca4b5c252..ec380293c58934bb330f34fae3a22bc6fca07efa 100644 --- a/src/lib-sieve/sieve-interpreter.h +++ b/src/lib-sieve/sieve-interpreter.h @@ -92,6 +92,9 @@ void sieve_interpreter_interrupt(struct sieve_interpreter *interp); sieve_size_t sieve_interpreter_program_counter(struct sieve_interpreter *interp); +int sieve_interpreter_program_jump_to(struct sieve_interpreter *interp, + sieve_size_t jmp_target, + bool break_loops); int sieve_interpreter_program_jump(struct sieve_interpreter *interp, bool jump, bool break_loops);