CLEANUP: opentracing: added flt_ot_smp_init() function

The flt_ot_smp_init() function has been added to make initializing the
sample structure easier.  The contents of the structure in question are
set in several places in the source of the OpenTracing filter, so it is
better to do this in one place.

This patch must be backported as far as 2.4.

(cherry picked from commit 854efefd6cf43018efcdeb0da2c06cc19fd00980)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit 7d841cdb91eaa3d2d787ce361a6b17a57e93c3f7)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/addons/ot/src/vars.c b/addons/ot/src/vars.c
index 8769d54..08e8edf 100644
--- a/addons/ot/src/vars.c
+++ b/addons/ot/src/vars.c
@@ -87,6 +87,38 @@
 
 /***
  * NAME
+ *   flt_ot_smp_init -
+ *
+ * ARGUMENTS
+ *   s    -
+ *   smp  -
+ *   opt  -
+ *   type -
+ *   data -
+ *
+ * DESCRIPTION
+ *   The function initializes the value of the 'smp' structure.  If the 'data'
+ *   argument is set, then the 'sample_data' member of the 'smp' structure is
+ *   also initialized.
+ *
+ * RETURN VALUE
+ *   This function does not return a value.
+ */
+static inline void flt_ot_smp_init(struct stream *s, struct sample *smp, uint opt, int type, const char *data)
+{
+	(void)memset(smp, 0, sizeof(*smp));
+	(void)smp_set_owner(smp, s->be, s->sess, s, opt | SMP_OPT_FINAL);
+
+	if (data != NULL) {
+		smp->data.type = type;
+
+		chunk_initstr(&(smp->data.u.str), data);
+	}
+}
+
+
+/***
+ * NAME
  *   flt_ot_get_vars -
  *
  * ARGUMENTS
@@ -305,11 +337,7 @@
 	if (retval == -1)
 		FLT_OT_RETURN(retval);
 
-	(void)memset(&smp, 0, sizeof(smp));
-	(void)smp_set_owner(&smp, s->be, s->sess, s, opt | SMP_OPT_FINAL);
-	smp.data.type       = SMP_T_STR;
-	smp.data.u.str.area = (char *)value;
-	smp.data.u.str.data = strlen(value);
+	flt_ot_smp_init(s, &smp, opt, SMP_T_STR, value);
 
 	if (vars_set_by_name_ifexist(var_name, retval, &smp) == 0) {
 		FLT_OT_ERR("failed to set variable '%s'", var_name);
@@ -375,10 +403,8 @@
 
 			FLT_OT_DBG(2, "- '%s' -> '%.*s'", var_name, (int)var->data.u.str.data, var->data.u.str.area);
 
-			(void)memset(&smp, 0, sizeof(smp));
-			(void)smp_set_owner(&smp, s->be, s->sess, s, opt | SMP_OPT_FINAL);
-
-			size = var_clear(var);
+			size = var_clear(var, 1);
+			flt_ot_smp_init(s, &smp, opt, 0, NULL);
 			var_accounting_diff(vars, smp.sess, smp.strm, -size);
 
 			retval++;