static void fop_init_instance(FilterOp *self) { filter_expr_node_init(&self->super); self->super.init = fop_init; self->super.free_fn = fop_free; }
FilterExprNode * fop_cmp_new(LogTemplate *left, LogTemplate *right, gint op) { FilterCmp *self = g_new0(FilterCmp, 1); filter_expr_node_init(&self->super); self->super.eval = fop_cmp_eval; self->super.free_fn = fop_cmp_free; self->left = left; self->right = right; self->left_buf = g_string_sized_new(32); self->right_buf = g_string_sized_new(32); self->super.type = "CMP"; switch (op) { case KW_NUM_LT: self->cmp_op = FCMP_NUM; case KW_LT: self->cmp_op = FCMP_LT; break; case KW_NUM_LE: self->cmp_op = FCMP_NUM; case KW_LE: self->cmp_op = FCMP_LT | FCMP_EQ; break; case KW_NUM_EQ: self->cmp_op = FCMP_NUM; case KW_EQ: self->cmp_op = FCMP_EQ; break; case KW_NUM_NE: self->cmp_op = FCMP_NUM; case KW_NE: self->cmp_op = 0; break; case KW_NUM_GE: self->cmp_op = FCMP_NUM; case KW_GE: self->cmp_op = FCMP_GT | FCMP_EQ; break; case KW_NUM_GT: self->cmp_op = FCMP_NUM; case KW_GT: self->cmp_op = FCMP_GT; break; } return &self->super; }
FilterExprNode * filter_in_list_new(const gchar *list_file, const gchar *property) { FilterInList *self; FILE *stream; size_t n; gchar *line = NULL; stream = fopen(list_file, "r"); if (!stream) { msg_error("Error opening in-list filter list file", evt_tag_str("file", list_file), evt_tag_errno("errno", errno), NULL); return NULL; } self = g_new0(FilterInList, 1); filter_expr_node_init(&self->super); self->value_handle = log_msg_get_value_handle(property); self->tree = g_tree_new((GCompareFunc) strcmp); while (getline(&line, &n, stream) != -1) { line[strlen(line) - 1] = '\0'; if (line[0]) g_tree_insert(self->tree, line, GINT_TO_POINTER(1)); line = NULL; } fclose(stream); self->super.eval = filter_in_list_eval; self->super.free_fn = filter_in_list_free; return &self->super; }