X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=postlicyd%2Ffilter.h;h=a08ec4523a245882a39497d99b60b812c5f37462;hb=150de5c8a15de6797f2844293891621efefff40b;hp=f532d1a97f7c20d9cf5c31ce5a096bf8175a3f6d;hpb=00bae73b4873e9c1e8d5526feecdb275f7bb756f;p=apps%2Fpfixtools.git diff --git a/postlicyd/filter.h b/postlicyd/filter.h index f532d1a..a08ec45 100644 --- a/postlicyd/filter.h +++ b/postlicyd/filter.h @@ -39,27 +39,33 @@ #include "common.h" #include "filter_tokens.h" #include "query.h" +#include "array.h" typedef filter_token filter_type_t; typedef struct filter_hook_t { - const char *name; - const char *value; + char *name; + char *value; } filter_hook_t; +ARRAY(filter_hook_t) typedef struct filter_params_t { - const char *name; - const char *value; + char *name; + char *value; } filter_params_t; +ARRAY(filter_params_t) typedef struct filter_t { char *name; filter_type_t type; - filter_hook_t *hooks; - filter_params_t *params; + A(filter_hook_t) hooks; + A(filter_params_t) params; void *data; } filter_t; +ARRAY(filter_t) + +#define FILTER_INIT { NULL, FTK_UNKNOWN, ARRAY_INIT, ARRAY_INIT, NULL } typedef const char *filter_result_t; typedef filter_result_t (*filter_runner_t)(const filter_t *filter, @@ -71,8 +77,15 @@ __attribute__((nonnull(1,4))) void filter_register(const char *type, filter_constructor_t constructor, filter_destructor_t destructor, filter_runner_t runner); +__attribute__((nonnull(1))) +static inline void filter_init(filter_t *filter) +{ + const filter_t f = FILTER_INIT; + *filter = f; +} + __attribute__((nonnull(1,2))) -bool filter_set_name(filter_t *filter, const char *name, ssize_t len); +void filter_set_name(filter_t *filter, const char *name, ssize_t len); __attribute__((nonnull(1,2))) bool filter_set_type(filter_t *filter, const char *type, ssize_t len); @@ -88,6 +101,20 @@ bool filter_add_hook(filter_t *filter, const char *name, ssize_t name_len, __attribute__((nonnull(1))) bool filter_build(filter_t *filter); +__attribute__((nonnull(1))) +static inline void filter_hook_wipe(filter_hook_t *hook) +{ + p_delete(&hook->name); + p_delete(&hook->value); +} + +__attribute__((nonnull(1))) +static inline void filter_params_wipe(filter_params_t *param) +{ + p_delete(¶m->name); + p_delete(¶m->value); +} + __attribute__((nonnull(1))) void filter_wipe(filter_t *filter);