summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2016-12-07 09:46:57 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2016-12-07 13:03:42 +0200
commit799519539556b38fc9f84d44927861cb9239d14c (patch)
tree304982f21416f837c8b5a678b85ba99edce62d40 /include
parentcab2fd5c0479d16a3dcd746c98de8be771a8963d (diff)
downloadmailutils-799519539556b38fc9f84d44927861cb9239d14c.tar.gz
mailutils-799519539556b38fc9f84d44927861cb9239d14c.tar.bz2
Implement the "variables" Sieve extension (RFC 5229)
* include/mailutils/sieve.h (mu_sieve_string): New fields "constant" and "changed". (mu_sieve_match_part_tags): New extern. (mu_sieve_relational_count) (mu_sieve_require_variables) (mu_sieve_has_variables) (mu_sieve_string_get): New functions. * libmu_sieve/variables.c: New file. * libmu_sieve/Makefile.am: Add variables.c * libmu_sieve/comparator.c: Use mu_sieve_string_get to obtain the actual value of the string. * libmu_sieve/require.c: Support the "variables" extension. * libmu_sieve/sieve-priv.h (mu_sieve_machine): New fields vartab, match_string, match_buf, match_count, match_max. (mu_i_sv_copy_variables) (mu_i_sv_expand_variables): New protos. * libmu_sieve/sieve.l (line_add): zero length means add entire asciiz string. * libmu_sieve/sieve.y (mu_sieve_machine_reset): Reset the new fields. (mu_sieve_machine_clone): Copy variables and initialize new fields. (string_rescan): New function. (sieve_parse): Rescan string to determine their properties. * libmu_sieve/strexp.c (update_len): Allow for NULL replacement values. * libmu_sieve/string.c (mu_sieve_string_get): New function. (mu_sieve_string): Use it. * libmu_sieve/tests.c (do_count): Rename to mu_sieve_relational_count, make global. All uses changed. (match_part_tags): Rename to mu_sieve_match_part_tags, make global. All uses changed. * sieve/tests/variables.at: New file. * sieve/tests/Makefile.am: Add new testcases. * sieve/tests/testsuite.at: Likewise.
Diffstat (limited to 'include')
-rw-r--r--include/mailutils/sieve.h24
1 files changed, 17 insertions, 7 deletions
diff --git a/include/mailutils/sieve.h b/include/mailutils/sieve.h
index 6316332b8..8dfa3814f 100644
--- a/include/mailutils/sieve.h
+++ b/include/mailutils/sieve.h
@@ -35,9 +35,11 @@ typedef struct mu_sieve_machine *mu_sieve_machine_t;
typedef struct mu_sieve_string
{
- char *orig;
- char *exp;
- void *rx;
+ unsigned constant:1; /* String is constant */
+ unsigned changed:1; /* String value has changed */
+ char *orig; /* String original value */
+ char *exp; /* Actual string value after expansion */
+ void *rx; /* Pointer to the corresponding regular expr */
} mu_sieve_string_t;
typedef int (*mu_sieve_handler_t) (mu_sieve_machine_t mach);
@@ -141,7 +143,9 @@ extern mu_debug_handle_t mu_sieve_debug_handle;
extern mu_list_t mu_sieve_include_path;
extern mu_list_t mu_sieve_library_path;
extern mu_list_t mu_sieve_library_path_prefix;
-
+
+extern mu_sieve_tag_def_t mu_sieve_match_part_tags[];
+
/* Memory allocation functions */
typedef void (*mu_sieve_reclaim_t) (void *);
void mu_sieve_register_memory (mu_sieve_machine_t mach, void *ptr,
@@ -197,6 +201,11 @@ void mu_sieve_register_comparator (mu_sieve_machine_t mach, const char *name,
mu_sieve_comparator_t eq);
int mu_sieve_require_relational (mu_sieve_machine_t mach, const char *name);
+int mu_sieve_relational_count (mu_sieve_machine_t mach, size_t count,
+ int retval);
+
+int mu_sieve_require_variables (mu_sieve_machine_t mach);
+int mu_sieve_has_variables (mu_sieve_machine_t mach);
void *mu_sieve_load_ext (mu_sieve_machine_t mach, const char *name);
void mu_sieve_unload_ext (void *handle);
@@ -234,9 +243,10 @@ void mu_sieve_get_arg (mu_sieve_machine_t mach, size_t index,
char *mu_sieve_string (mu_sieve_machine_t mach,
mu_sieve_slice_t slice,
size_t i);
-struct mu_sieve_string *mu_sieve_string_raw (mu_sieve_machine_t mach,
- mu_sieve_slice_t slice,
- size_t i);
+mu_sieve_string_t *mu_sieve_string_raw (mu_sieve_machine_t mach,
+ mu_sieve_slice_t slice,
+ size_t i);
+char *mu_sieve_string_get (mu_sieve_machine_t mach, mu_sieve_string_t *string);
/* Operations on value lists */
int mu_sieve_vlist_do (mu_sieve_machine_t mach,

Return to:

Send suggestions and report system problems to the System administrator.