From c4c7722fa69c8a96eddbb33501a7ad0323e7b7d2 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Sat, 16 Aug 2008 18:41:02 +0200 Subject: [PATCH] Forgot to add new file for stop command. --- src/lib-sieve/cmd-stop.c | 90 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/lib-sieve/cmd-stop.c diff --git a/src/lib-sieve/cmd-stop.c b/src/lib-sieve/cmd-stop.c new file mode 100644 index 000000000..0629f6dec --- /dev/null +++ b/src/lib-sieve/cmd-stop.c @@ -0,0 +1,90 @@ +/* Copyright (c) 2002-2008 Dovecot Sieve authors, see the included COPYING file + */ + +#include "sieve-common.h" +#include "sieve-commands.h" +#include "sieve-code.h" +#include "sieve-generator.h" +#include "sieve-interpreter.h" + +/* + * Stop command + * + * Syntax + * stop + */ + +static bool cmd_stop_generate + (const struct sieve_codegen_env *cgenv, + struct sieve_command_context *ctx ATTR_UNUSED); +static bool cmd_stop_validate + (struct sieve_validator *validator, struct sieve_command_context *ctx); + +const struct sieve_command cmd_stop = { + "stop", + SCT_COMMAND, + 0, 0, FALSE, FALSE, + NULL, NULL, + cmd_stop_validate, + cmd_stop_generate, + NULL +}; + +/* + * Stop operation + */ + +static int opc_stop_execute + (const struct sieve_operation *op, + const struct sieve_runtime_env *renv, sieve_size_t *address); + +const struct sieve_operation cmd_stop_operation = { + "STOP", + NULL, + SIEVE_OPERATION_STOP, + NULL, + opc_stop_execute +}; + +/* + * Command validation + */ + +static bool cmd_stop_validate +(struct sieve_validator *validator ATTR_UNUSED, + struct sieve_command_context *ctx) +{ + sieve_command_exit_block_unconditionally(ctx); + + return TRUE; +} + +/* + * Code generation + */ + +static bool cmd_stop_generate +(const struct sieve_codegen_env *cgenv, + struct sieve_command_context *ctx ATTR_UNUSED) +{ + sieve_operation_emit_code(cgenv->sbin, &cmd_stop_operation); + + return TRUE; +} + +/* + * Code execution + */ + +static int opc_stop_execute +(const struct sieve_operation *op ATTR_UNUSED, + const struct sieve_runtime_env *renv, + sieve_size_t *address ATTR_UNUSED) +{ + sieve_runtime_trace(renv, "STOP"); + + sieve_interpreter_interrupt(renv->interp); + + return SIEVE_EXEC_OK; +} + -- GitLab