static void test_parser_input(TestParser *self, const gchar *buffer) { if (self->lexer) cfg_lexer_free(self->lexer); self->lexer = cfg_lexer_new_buffer(buffer, strlen(buffer)); }
gboolean tf_cond_prepare(LogTemplateFunction *self, LogTemplate *parent, gint argc, gchar *argv[], gpointer *state, GDestroyNotify *state_destroy, GError **error) { TFCondState *args; CfgLexer *lexer; gint i; g_return_val_if_fail(error == NULL || *error == NULL, FALSE); args = g_malloc0(sizeof(TFCondState) + (argc - 1) * sizeof(LogTemplate *)); args->argc = argc - 1; lexer = cfg_lexer_new_buffer(argv[0], strlen(argv[0])); if (!cfg_run_parser(parent->cfg, lexer, &filter_expr_parser, (gpointer *) &args->filter, NULL)) { g_set_error(error, LOG_TEMPLATE_ERROR, LOG_TEMPLATE_ERROR_COMPILE, "Error parsing conditional filter expression"); goto error; } for (i = 1; i < argc; i++) { args->argv[i - 1] = log_template_new(parent->cfg, NULL); log_template_set_escape(args->argv[i - 1], TRUE); if (!log_template_compile(args->argv[i - 1], argv[i], error)) goto error; } *state = args; *state_destroy = (GDestroyNotify) tf_cond_free_state; return TRUE; error: tf_cond_free_state(args); return FALSE; }
void pdb_action_set_condition(PDBAction *self, GlobalConfig *cfg, const gchar *filter_string, GError **error) { CfgLexer *lexer; lexer = cfg_lexer_new_buffer(filter_string, strlen(filter_string)); if (!cfg_run_parser(cfg, lexer, &filter_expr_parser, (gpointer *) &self->condition, NULL)) { g_set_error(error, 0, 1, "Error compiling conditional expression"); self->condition = NULL; return; } }
gboolean tf_cond_prepare(LogTemplateFunction *self, gpointer s, LogTemplate *parent, gint argc, gchar *argv[], GError **error) { TFCondState *state = (TFCondState *) s; CfgLexer *lexer; g_return_val_if_fail(error == NULL || *error == NULL, FALSE); lexer = cfg_lexer_new_buffer(argv[1], strlen(argv[1])); if (!cfg_run_parser(parent->cfg, lexer, &filter_expr_parser, (gpointer *) &state->filter, NULL)) { g_set_error(error, LOG_TEMPLATE_ERROR, LOG_TEMPLATE_ERROR_COMPILE, "Error parsing conditional filter expression"); return FALSE; } memmove(&argv[1], &argv[2], sizeof(argv[0]) * (argc - 2)); if (!tf_simple_func_prepare(self, s, parent, argc - 1, argv, error)) return FALSE; return TRUE; }
gboolean cfg_load_config(GlobalConfig *self, gchar *config_string, gboolean syntax_only, gchar *preprocess_into) { gint res; CfgLexer *lexer; GString *preprocess_output = g_string_sized_new(8192); lexer = cfg_lexer_new_buffer(config_string, strlen(config_string)); lexer->preprocess_output = preprocess_output; res = cfg_run_parser(self, lexer, &main_parser, (gpointer *) &self, NULL); if (preprocess_into) { cfg_dump_processed_config(preprocess_output, preprocess_into); } g_string_free(preprocess_output, TRUE); if (res) { return TRUE; } return FALSE; }