summaryrefslogtreecommitdiff
path: root/include/mailutils
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2016-11-26 10:54:48 +0200
committerSergey Poznyakoff <gray@gnu.org>2016-11-26 10:54:48 +0200
commit1528dfded819e3c8ccba459425b0dc18b1f3a722 (patch)
treee4d0940e0ddbc48703548154c0b7395b83203bf2 /include/mailutils
parent56217f1e53ebd0527b0fa1457c0b214d0ea76fd6 (diff)
downloadmailutils-1528dfded819e3c8ccba459425b0dc18b1f3a722.tar.gz
mailutils-1528dfded819e3c8ccba459425b0dc18b1f3a722.tar.bz2
sieve: improve argument/tag runtime access API
* include/mailutils/sieve.h (mu_sieve_data_type): Remove SVT_VALUE_LIST. (mu_sieve_value_storage): Named union for use in mu_sieve_value_t; remove the tag field. (mu_sieve_tag_lookup): Change prototype. (mu_sieve_value_get): Change prototype. (mu_sieve_value_get_optional) (mu_sieve_value_get_untyped): New functions. (mu_sieve_arg_error): Removed proto. * libmu_sieve/sieve.y: Remove SVT_VALUE_LIST support. * libmu_sieve/util.c (mu_sieve_value_create) (mu_sieve_type_str,mu_sieve_vlist_do): Remove SVT_VALUE_LIST support. (mu_sieve_value_get): Rewrite. (mu_sieve_value_get_untyped) (mu_sieve_value_get_optional): New functions. (mu_sieve_arg_error): Remove. (mu_sieve_tag_lookup): Rewrite. (mu_sieve_tag_lookup_untyped): New function. * doc/texinfo/libmu_sieve.texi: Update. libmu_sieve/tests.c libmu_sieve/actions.c libmu_sieve/extensions/editheader.c libmu_sieve/extensions/list.c libmu_sieve/extensions/moderator.c libmu_sieve/extensions/pipe.c libmu_sieve/extensions/spamd.c libmu_sieve/extensions/timestamp.c libmu_sieve/extensions/vacation.c libmu_sieve/relational.c examples/numaddr.c
Diffstat (limited to 'include/mailutils')
-rw-r--r--include/mailutils/sieve.h39
1 files changed, 25 insertions, 14 deletions
diff --git a/include/mailutils/sieve.h b/include/mailutils/sieve.h
index 019ee617b..4fc91c230 100644
--- a/include/mailutils/sieve.h
+++ b/include/mailutils/sieve.h
@@ -57,24 +57,24 @@ typedef enum
SVT_STRING_LIST,
SVT_TAG,
SVT_IDENT,
- SVT_VALUE_LIST,
SVT_POINTER
}
mu_sieve_data_type;
typedef struct mu_sieve_runtime_tag mu_sieve_runtime_tag_t;
+union mu_sieve_value_storage
+{
+ char *string;
+ size_t number;
+ mu_list_t list;
+ void *ptr;
+};
+
typedef struct
{
mu_sieve_data_type type;
- union
- {
- char *string;
- size_t number;
- mu_list_t list;
- mu_sieve_runtime_tag_t *tag;
- void *ptr;
- } v;
+ union mu_sieve_value_storage v;
} mu_sieve_value_t;
typedef struct
@@ -184,8 +184,12 @@ mu_sieve_relcmp_t mu_sieve_get_relcmp (mu_sieve_machine_t mach,
void mu_sieve_require (mu_sieve_machine_t mach, mu_list_t slist);
-int mu_sieve_tag_lookup (mu_list_t taglist, char *name,
- mu_sieve_value_t ** arg);
+int mu_sieve_tag_lookup (mu_sieve_machine_t mach,
+ mu_list_t taglist, char *name,
+ mu_sieve_data_type type, void *ret);
+int mu_sieve_tag_lookup_untyped (mu_sieve_machine_t mach, mu_list_t taglist,
+ char *name, mu_sieve_value_t **ret);
+
int mu_sieve_load_ext (mu_sieve_machine_t mach, const char *name);
int mu_sieve_match_part_checker (mu_sieve_machine_t mach,
const char *name, mu_list_t tags,
@@ -193,8 +197,16 @@ int mu_sieve_match_part_checker (mu_sieve_machine_t mach,
int mu_sieve_match_part_checker (mu_sieve_machine_t mach,
const char *name, mu_list_t tags,
mu_list_t args);
-/* Operations in value lists */
-mu_sieve_value_t *mu_sieve_value_get (mu_list_t vlist, size_t index);
+/* Operations on value lists */
+mu_sieve_value_t *mu_sieve_value_get_optional (mu_sieve_machine_t mach,
+ mu_list_t vlist,
+ size_t index);
+mu_sieve_value_t *mu_sieve_value_get_untyped (mu_sieve_machine_t mach,
+ mu_list_t vlist,
+ size_t index);
+int mu_sieve_value_get (mu_sieve_machine_t mach, mu_list_t vlist,
+ size_t index,
+ mu_sieve_data_type type, void *ret);
int mu_sieve_vlist_do (mu_sieve_value_t *val, mu_list_action_t ac,
void *data);
int mu_sieve_vlist_compare (mu_sieve_value_t *a, mu_sieve_value_t *b,
@@ -251,7 +263,6 @@ void mu_sieve_log_action (mu_sieve_machine_t mach, const char *action,
const char *fmt, ...)
MU_PRINTFLIKE(3,4);
void mu_sieve_abort (mu_sieve_machine_t mach);
-void mu_sieve_arg_error (mu_sieve_machine_t mach, int n);
int mu_sieve_is_dry_run (mu_sieve_machine_t mach);
const char *mu_sieve_type_str (mu_sieve_data_type type);

Return to:

Send suggestions and report system problems to the System administrator.