summaryrefslogtreecommitdiffstats
path: root/src/vars.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vars.c')
-rw-r--r--src/vars.c44
1 files changed, 17 insertions, 27 deletions
diff --git a/src/vars.c b/src/vars.c
index 7ec753e..9f706cf 100644
--- a/src/vars.c
+++ b/src/vars.c
@@ -328,16 +328,16 @@ static int smp_fetch_var(const struct arg *args, struct sample *smp, const char
*/
static inline void var_clear_buffer(struct sample *smp, struct vars *vars, struct var *var, int var_type)
{
- if (var_type == SMP_T_STR || var_type == SMP_T_BIN) {
- ha_free(&var->data.u.str.area);
- var_accounting_diff(vars, smp->sess, smp->strm,
- -var->data.u.str.data);
- }
- else if (var_type == SMP_T_METH && var->data.u.meth.meth == HTTP_METH_OTHER) {
- ha_free(&var->data.u.meth.str.area);
- var_accounting_diff(vars, smp->sess, smp->strm,
- -var->data.u.meth.str.data);
- }
+ if (var_type == SMP_T_STR || var_type == SMP_T_BIN) {
+ ha_free(&var->data.u.str.area);
+ var_accounting_diff(vars, smp->sess, smp->strm,
+ -var->data.u.str.data);
+ }
+ else if (var_type == SMP_T_METH && var->data.u.meth.meth == HTTP_METH_OTHER) {
+ ha_free(&var->data.u.meth.str.area);
+ var_accounting_diff(vars, smp->sess, smp->strm,
+ -var->data.u.meth.str.data);
+ }
}
/* This function tries to create a variable whose name hash is <name_hash> in
@@ -363,7 +363,7 @@ static inline void var_clear_buffer(struct sample *smp, struct vars *vars, struc
*
* It returns 0 on failure, non-zero on success.
*/
-static int var_set(uint64_t name_hash, enum vars_scope scope, struct sample *smp, uint flags)
+int var_set(uint64_t name_hash, enum vars_scope scope, struct sample *smp, uint flags)
{
struct vars *vars;
struct var *var;
@@ -515,7 +515,7 @@ static int var_set(uint64_t name_hash, enum vars_scope scope, struct sample *smp
* session and stream found in <smp>. Note that stream may be null for
* SCOPE_SESS. Returns 0 if the scope was not found otherwise 1.
*/
-static int var_unset(uint64_t name_hash, enum vars_scope scope, struct sample *smp)
+int var_unset(uint64_t name_hash, enum vars_scope scope, struct sample *smp)
{
struct vars *vars;
struct var *var;
@@ -787,7 +787,7 @@ static enum act_return action_store(struct act_rule *rule, struct proxy *px,
/* Process the expression. */
memset(&smp, 0, sizeof(smp));
- if (!LIST_ISEMPTY(&rule->arg.vars.fmt)) {
+ if (!lf_expr_isempty(&rule->arg.vars.fmt)) {
/* a format-string is used */
fmtstr = alloc_trash_chunk();
@@ -838,14 +838,7 @@ static enum act_return action_clear(struct act_rule *rule, struct proxy *px,
static void release_store_rule(struct act_rule *rule)
{
- struct logformat_node *lf, *lfb;
-
- list_for_each_entry_safe(lf, lfb, &rule->arg.vars.fmt, list) {
- LIST_DELETE(&lf->list);
- release_sample_expr(lf->expr);
- free(lf->arg);
- free(lf);
- }
+ lf_expr_deinit(&rule->arg.vars.fmt);
release_sample_expr(rule->arg.vars.expr);
}
@@ -949,7 +942,7 @@ static enum act_parse_ret parse_store(const char **args, int *arg, struct proxy
condition = istsplit(&var, ',');
}
- LIST_INIT(&rule->arg.vars.fmt);
+ lf_expr_init(&rule->arg.vars.fmt);
if (!vars_hash_name(var_name, var_len, &rule->arg.vars.scope, &rule->arg.vars.name_hash, err))
return ACT_RET_PRS_ERR;
@@ -1029,11 +1022,6 @@ static enum act_parse_ret parse_store(const char **args, int *arg, struct proxy
return ACT_RET_PRS_ERR;
(*arg)++;
-
- /* for late error reporting */
- free(px->conf.lfs_file);
- px->conf.lfs_file = strdup(px->conf.args.file);
- px->conf.lfs_line = px->conf.args.line;
} else {
/* set-var */
rule->arg.vars.expr = sample_parse_expr((char **)args, arg, px->conf.args.file,
@@ -1072,6 +1060,7 @@ static int vars_parse_global_set_var(char **args, int section_type, struct proxy
struct proxy px = {
.id = "CFG",
.conf.args = { .file = file, .line = line, },
+ .flags = PR_FL_CHECKED,
};
struct act_rule rule = {
.arg.vars.scope = SCOPE_PROC,
@@ -1192,6 +1181,7 @@ static int vars_parse_cli_set_var(char **args, char *payload, struct appctx *app
struct proxy px = {
.id = "CLI",
.conf.args = { .file = "CLI", .line = 0, },
+ .flags = PR_FL_CHECKED,
};
struct act_rule rule = {
.arg.vars.scope = SCOPE_PROC,