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


Reply via email to