Change the return type from `void` to `int` and return whether setting the variable was successful. --- include/proto/vars.h | 6 +++--- src/vars.c | 25 +++++++++++++------------ 2 files changed, 16 insertions(+), 15 deletions(-)
diff --git a/include/proto/vars.h b/include/proto/vars.h index caf00ff68..81f99dfb3 100644 --- a/include/proto/vars.h +++ b/include/proto/vars.h @@ -7,9 +7,9 @@ void vars_init(struct vars *vars, enum vars_scope scope); void vars_prune(struct vars *vars, struct session *sess, struct stream *strm); void vars_prune_per_sess(struct vars *vars); int vars_get_by_name(const char *name, size_t len, struct sample *smp); -void vars_set_by_name_ifexist(const char *name, size_t len, struct sample *smp); -void vars_set_by_name(const char *name, size_t len, struct sample *smp); -void vars_unset_by_name_ifexist(const char *name, size_t len, struct sample *smp); +int vars_set_by_name_ifexist(const char *name, size_t len, struct sample *smp); +int vars_set_by_name(const char *name, size_t len, struct sample *smp); +int vars_unset_by_name_ifexist(const char *name, size_t len, struct sample *smp); int vars_get_by_desc(const struct var_desc *var_desc, struct sample *smp); int vars_check_arg(struct arg *arg, char **err); diff --git a/src/vars.c b/src/vars.c index 08b1307f1..ec95aaa3d 100644 --- a/src/vars.c +++ b/src/vars.c @@ -538,49 +538,50 @@ int vars_check_arg(struct arg *arg, char **err) } /* This function store a sample in a variable if it was already defined. - * In error case, it fails silently. + * Returns zero on failure and non-zero otherwise. The variable not being + * defined is treated as a failure. */ -void vars_set_by_name_ifexist(const char *name, size_t len, struct sample *smp) +int vars_set_by_name_ifexist(const char *name, size_t len, struct sample *smp) { enum vars_scope scope; /* Resolve name and scope. */ name = register_name(name, len, &scope, 0, NULL); if (!name) - return; + return 0; - sample_store_stream(name, scope, smp); + return sample_store_stream(name, scope, smp); } /* This function store a sample in a variable. - * In error case, it fails silently. + * Returns zero on failure and non-zero otherwise. */ -void vars_set_by_name(const char *name, size_t len, struct sample *smp) +int vars_set_by_name(const char *name, size_t len, struct sample *smp) { enum vars_scope scope; /* Resolve name and scope. */ name = register_name(name, len, &scope, 1, NULL); if (!name) - return; + return 0; - sample_store_stream(name, scope, smp); + return sample_store_stream(name, scope, smp); } /* This function unset a variable if it was already defined. - * In error case, it fails silently. + * Returns zero on failure and non-zero otherwise. */ -void vars_unset_by_name_ifexist(const char *name, size_t len, struct sample *smp) +int vars_unset_by_name_ifexist(const char *name, size_t len, struct sample *smp) { enum vars_scope scope; /* Resolve name and scope. */ name = register_name(name, len, &scope, 0, NULL); if (!name) - return; + return 0; - sample_clear_stream(name, scope, smp); + return sample_clear_stream(name, scope, smp); } -- 2.26.2