static void filter_call_init(FilterExprNode *s, GlobalConfig *cfg) { FilterCall *self = (FilterCall *) s; LogExprNode *rule; rule = cfg_tree_get_object(&cfg->tree, ENC_FILTER, self->rule); if (rule) { /* this is quite fragile and would break whenever the parsing code in * cfg-grammar.y changes to parse a filter rule. We assume that a * filter rule has a single child, which contains a LogFilterPipe * instance as its object. */ LogFilterPipe *filter_pipe = (LogFilterPipe *) rule->children->object; self->filter_expr = filter_expr_ref(filter_pipe->expr); filter_expr_init(self->filter_expr, cfg); } else { msg_error("Referenced filter rule not found in filter() expression", evt_tag_str("rule", self->rule), NULL); } }
static FilterExprNode * _init_filter_from_log_node(GlobalConfig *cfg, LogExprNode *node) { LogFilterPipe *filter_pipe = (LogFilterPipe *) node->children->object; FilterExprNode *selected_filter = filter_expr_ref(filter_pipe->expr); filter_expr_init(selected_filter, cfg); return selected_filter; }