diff options
Diffstat (limited to 'include/mailutils/libsieve.h')
-rw-r--r-- | include/mailutils/libsieve.h | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/include/mailutils/libsieve.h b/include/mailutils/libsieve.h index bb99c3581..064e7176c 100644 --- a/include/mailutils/libsieve.h +++ b/include/mailutils/libsieve.h @@ -16,11 +16,15 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <sys/types.h> +#include <stdarg.h> #include <mailutils/mailutils.h> typedef struct sieve_machine sieve_machine_t; -typedef int (*sieve_instr_t) __P((sieve_machine_t *mach, list_t *args)); +typedef int (*sieve_handler_t) __P((sieve_machine_t *mach, + list_t args, list_t tags)); +typedef int (*sieve_printf_t) __P((void *data, const char *fmt, va_list ap)); +typedef int (*sieve_vprintf_t) __P((void *data, const char *fmt, va_list ap)); typedef enum { SVT_VOID, @@ -32,12 +36,15 @@ typedef enum { SVT_VALUE_LIST } sieve_data_type; +typedef struct sieve_runtime_tag sieve_runtime_tag_t; + typedef struct { sieve_data_type type; union { char *string; long number; list_t list; + sieve_runtime_tag_t *tag; } v; } sieve_value_t; @@ -47,10 +54,15 @@ typedef struct { sieve_data_type argtype; } sieve_tag_def_t; +struct sieve_runtime_tag { + int tag; + sieve_value_t *arg; +}; + typedef struct { char *name; int required; - sieve_instr_t instr; + sieve_handler_t handler; int num_req_args; sieve_data_type *req_args; int num_tags; @@ -59,18 +71,28 @@ typedef struct { void *sieve_alloc __P((size_t size)); -int sieve_open_source __P((const char *name)); -int sieve_parse __P((const char *name)); +void *sieve_palloc __P((list_t *pool, size_t size)); +void *sieve_prealloc __P((list_t *pool, void *ptr, size_t size)); +void sieve_pfree __P((list_t *pool, void *ptr)); +char *sieve_pstrdup __P((list_t *pool, const char *str)); + +int sieve_compile __P((sieve_machine_t *mach, const char *name, void *data, + sieve_printf_t errfn)); +void sieve_set_debug __P((sieve_machine_t *mach, sieve_printf_t debug, + int level)); + sieve_value_t * sieve_value_create __P((sieve_data_type type, void *data)); sieve_register_t *sieve_test_lookup __P((const char *name)); sieve_register_t *sieve_action_lookup __P((const char *name)); -int sieve_register_test __P((const char *name, sieve_instr_t instr, +int sieve_register_test __P((const char *name, sieve_handler_t handler, sieve_data_type *arg_types, sieve_tag_def_t *tags, int required)); -int sieve_register_action __P((const char *name, sieve_instr_t instr, +int sieve_register_action __P((const char *name, sieve_handler_t handler, sieve_data_type *arg_types, sieve_tag_def_t *tags, int required)); void sieve_slist_destroy __P((list_t *plist)); void sieve_require __P((list_t slist)); + +void sieve_abort __P((sieve_machine_t *mach)); |