diff --git a/src/lib-sieve/plugins/imap4flags/Makefile.am b/src/lib-sieve/plugins/imap4flags/Makefile.am index a511bacdcf6cad84b722ce380daca13739d0e3ca..e5390d4720cbd4cf7402ae594b7195e027186eca 100644 --- a/src/lib-sieve/plugins/imap4flags/Makefile.am +++ b/src/lib-sieve/plugins/imap4flags/Makefile.am @@ -22,6 +22,12 @@ libsieve_ext_imap4flags_la_SOURCES = \ ext-imap4flags.c \ ext-imapflags.c +public_headers = \ + sieve-ext-imap4flags.h -noinst_HEADERS = \ +headers = \ ext-imap4flags-common.h + +pkginc_libdir=$(dovecot_pkgincludedir)/sieve +pkginc_lib_HEADERS = $(public_headers) +noinst_HEADERS = $(headers) diff --git a/src/lib-sieve/plugins/imap4flags/cmd-flag.c b/src/lib-sieve/plugins/imap4flags/cmd-flag.c index 63dce4015ec715201c489cdf839ec582253b26cd..1db7749651fe51889ef5d6259da65c9af6f0d62b 100644 --- a/src/lib-sieve/plugins/imap4flags/cmd-flag.c +++ b/src/lib-sieve/plugins/imap4flags/cmd-flag.c @@ -230,13 +230,13 @@ static int cmd_flag_operation_execute if ( sieve_operation_is(op, setflag_operation) ) { sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS, "setflag command"); - flag_op = ext_imap4flags_set_flags; + flag_op = sieve_ext_imap4flags_set_flags; } else if ( sieve_operation_is(op, addflag_operation) ) { sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS, "addflag command"); - flag_op = ext_imap4flags_add_flags; + flag_op = sieve_ext_imap4flags_add_flags; } else if ( sieve_operation_is(op, removeflag_operation) ) { sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS, "removeflag command"); - flag_op = ext_imap4flags_remove_flags; + flag_op = sieve_ext_imap4flags_remove_flags; } else { i_unreached(); } diff --git a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c index c7964ff4692a519f5cef0a178cb194f701906b7d..d021f0e2ebd48571abb2a885048bfa5936c0cfe9 100644 --- a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c +++ b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c @@ -404,6 +404,11 @@ static void ext_imap4flags_iter_delete_last /* Flag operations */ +static string_t *ext_imap4flags_get_flag_variable +(const struct sieve_runtime_env *renv, + struct sieve_variable_storage *storage, unsigned int var_index) + ATTR_NULL(2); + static bool flags_list_flag_exists (string_t *flags_list, const char *flag) { @@ -479,8 +484,8 @@ static void flags_list_clear_flags } static string_t *ext_imap4flags_get_flag_variable -(const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage, - unsigned int var_index) +(const struct sieve_runtime_env *renv, + struct sieve_variable_storage *storage, unsigned int var_index) { string_t *flags; @@ -504,9 +509,10 @@ static string_t *ext_imap4flags_get_flag_variable return flags; } -int ext_imap4flags_set_flags -(const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage, - unsigned int var_index, struct sieve_stringlist *flags) +int sieve_ext_imap4flags_set_flags +(const struct sieve_runtime_env *renv, + struct sieve_variable_storage *storage, unsigned int var_index, + struct sieve_stringlist *flags) { string_t *cur_flags = ext_imap4flags_get_flag_variable (renv, storage, var_index); @@ -531,9 +537,10 @@ int ext_imap4flags_set_flags return SIEVE_EXEC_BIN_CORRUPT; } -int ext_imap4flags_add_flags -(const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage, - unsigned int var_index, struct sieve_stringlist *flags) +int sieve_ext_imap4flags_add_flags +(const struct sieve_runtime_env *renv, + struct sieve_variable_storage *storage, unsigned int var_index, + struct sieve_stringlist *flags) { string_t *cur_flags = ext_imap4flags_get_flag_variable (renv, storage, var_index); @@ -557,9 +564,10 @@ int ext_imap4flags_add_flags return SIEVE_EXEC_BIN_CORRUPT; } -int ext_imap4flags_remove_flags -(const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage, - unsigned int var_index, struct sieve_stringlist *flags) +int sieve_ext_imap4flags_remove_flags +(const struct sieve_runtime_env *renv, + struct sieve_variable_storage *storage, unsigned int var_index, + struct sieve_stringlist *flags) { string_t *cur_flags = ext_imap4flags_get_flag_variable (renv, storage, var_index); @@ -690,8 +698,9 @@ static void ext_imap4flags_stringlist_reset /* Flag access */ -struct sieve_stringlist *ext_imap4flags_get_flags -(const struct sieve_runtime_env *renv, struct sieve_stringlist *flags_list) +struct sieve_stringlist *sieve_ext_imap4flags_get_flags +(const struct sieve_runtime_env *renv, + struct sieve_stringlist *flags_list) { if ( flags_list == NULL ) return ext_imap4flags_stringlist_create_single diff --git a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.h b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.h index 7399c5347cde2983f0dce6c68ae0dc75d652b5fb..ac03d2f55b9cd26a5555969b4b494c538363dddf 100644 --- a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.h +++ b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.h @@ -9,6 +9,8 @@ #include "sieve-common.h" #include "sieve-ext-variables.h" +#include "sieve-ext-imap4flags.h" + /* * Extension */ @@ -89,24 +91,13 @@ const char *ext_imap4flags_iter_get_flag /* Flag operations */ typedef int (*ext_imapflag_flag_operation_t) - (const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage, - unsigned int var_index, struct sieve_stringlist *flags); - -int ext_imap4flags_set_flags - (const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage, - unsigned int var_index, struct sieve_stringlist *flags); -int ext_imap4flags_add_flags - (const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage, - unsigned int var_index, struct sieve_stringlist *flags); -int ext_imap4flags_remove_flags - (const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage, - unsigned int var_index, struct sieve_stringlist *flags); + (const struct sieve_runtime_env *renv, + struct sieve_variable_storage *storage, + unsigned int var_index, struct sieve_stringlist *flags) + ATTR_NULL(2); /* Flags access */ -struct sieve_stringlist *ext_imap4flags_get_flags - (const struct sieve_runtime_env *renv, struct sieve_stringlist *flags_list); - void ext_imap4flags_get_implicit_flags_init (struct ext_imap4flags_iter *iter, const struct sieve_extension *this_ext, struct sieve_result *result); diff --git a/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h b/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h new file mode 100644 index 0000000000000000000000000000000000000000..139699494bcc88016d002b1befcf00c94ecda276 --- /dev/null +++ b/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h @@ -0,0 +1,50 @@ +/* Copyright (c) 2002-2015 Pigeonhole authors, see the included COPYING file + */ + +#ifndef __SIEVE_EXT_IMAP4FLAGS_H +#define __SIEVE_EXT_IMAP4FLAGS_H + +struct sieve_variable_storage; + +/* + * Imap4flags extension + */ + +/* FIXME: this is not suitable for future plugin support */ + +extern const struct sieve_extension_def imap4flags_extension; + +static inline const struct sieve_extension * +sieve_ext_imap4flags_require_extension +(struct sieve_instance *svinst) +{ + return sieve_extension_require + (svinst, &imap4flags_extension, TRUE); +} + +/* + * Flag manipulation + */ + +int sieve_ext_imap4flags_set_flags +(const struct sieve_runtime_env *renv, + struct sieve_variable_storage *storage, unsigned int var_index, + struct sieve_stringlist *flags) ATTR_NULL(2); +int sieve_ext_imap4flags_add_flags +(const struct sieve_runtime_env *renv, + struct sieve_variable_storage *storage, unsigned int var_index, + struct sieve_stringlist *flags) ATTR_NULL(2); +int sieve_ext_imap4flags_remove_flags +(const struct sieve_runtime_env *renv, + struct sieve_variable_storage *storage, unsigned int var_index, + struct sieve_stringlist *flags) ATTR_NULL(2); + +/* + * Flag retrieval + */ + +struct sieve_stringlist *sieve_ext_imap4flags_get_flags +(const struct sieve_runtime_env *renv, + struct sieve_stringlist *flags_list); + +#endif diff --git a/src/lib-sieve/plugins/imap4flags/tst-hasflag.c b/src/lib-sieve/plugins/imap4flags/tst-hasflag.c index 2b285886177668ea93cf3c89d937f15fc0b1abf3..a95425110c72feb16586a52e42b33af8c881b537 100644 --- a/src/lib-sieve/plugins/imap4flags/tst-hasflag.c +++ b/src/lib-sieve/plugins/imap4flags/tst-hasflag.c @@ -225,11 +225,11 @@ static int tst_hasflag_operation_execute sieve_runtime_trace(renv, SIEVE_TRLVL_TESTS, "hasflag test"); - value_list = ext_imap4flags_get_flags(renv, variables_list); + value_list = sieve_ext_imap4flags_get_flags(renv, variables_list); if ( sieve_match_type_is(&mcht, is_match_type) || sieve_match_type_is(&mcht, contains_match_type) ) - key_list = ext_imap4flags_get_flags(renv, flag_list); + key_list = sieve_ext_imap4flags_get_flags(renv, flag_list); else key_list = flag_list;