X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=postlicyd%2Ffilter.h;h=986e6cfec12aa93a3a2ffdd89b70ebe3a12a62ea;hb=d8b00b7c6eb72ef123eeb85016649742932c38d9;hp=db8e4573f1755f9d9a64a0ee19037391603872c3;hpb=f7b99947fe80996657a34ca9df1f60cbc6b8b7e7;p=apps%2Fpfixtools.git diff --git a/postlicyd/filter.h b/postlicyd/filter.h index db8e457..986e6cf 100644 --- a/postlicyd/filter.h +++ b/postlicyd/filter.h @@ -38,13 +38,15 @@ #include "common.h" #include "filter_tokens.h" +#include "hook_tokens.h" #include "query.h" #include "array.h" typedef filter_token filter_type_t; +typedef hook_token filter_result_t; typedef struct filter_hook_t { - char *name; + filter_result_t type; char *value; bool postfix; @@ -70,16 +72,24 @@ typedef struct filter_t { ARRAY(filter_t) #define FILTER_INIT { NULL, FTK_UNKNOWN, ARRAY_INIT, NULL, ARRAY_INIT } +#define CHECK_FILTER(Filter) \ + assert(Filter != FTK_UNKNOWN && Filter != FTK_count \ + && "Unknown filter type") +#define CHECK_HOOK(Hook) \ + assert(Hook != HTK_UNKNOWN && Hook != HTK_count \ + && "Unknown hook") -typedef const char *filter_result_t; typedef filter_result_t (*filter_runner_t)(const filter_t *filter, const query_t *query); typedef bool (*filter_constructor_t)(filter_t *filter); typedef void (*filter_destructor_t)(filter_t *filter); __attribute__((nonnull(1,4))) -void filter_register(const char *type, filter_constructor_t constructor, - filter_destructor_t destructor, filter_runner_t runner); +filter_type_t filter_register(const char *type, filter_constructor_t constructor, + filter_destructor_t destructor, filter_runner_t runner); + +__attribute__((nonnull(2))) +filter_result_t filter_hook_register(filter_type_t filter, const char *name); __attribute__((nonnull(1))) static inline void filter_init(filter_t *filter) @@ -132,7 +142,6 @@ bool filter_update_references(filter_t *filter, A(filter_t) *array); __attribute__((nonnull(1))) static inline void filter_hook_wipe(filter_hook_t *hook) { - p_delete(&hook->name); p_delete(&hook->value); }