MINOR: sample: add a new helper to initialize the owner of a sample

Since commit 6879ad3 ("MEDIUM: sample: fill the struct sample with the
session, proxy and stream pointers") merged in 1.6-dev2, the sample
contains the pointer to the stream and sample fetch functions as well
as converters use it heavily. This requires from a lot of call places
to initialize 4 fields, and it was even forgotten at a few places.

This patch provides a convenient helper to initialize all these fields
at once, making it easy to prepare a new sample from a previous one for
example.

A few call places were cleaned up to make use of it. It will be needed
by further fixes.

At one place in the Lua code, it was moved earlier because we used to
call sample casts with a non completely initialized sample, which is
not clean eventhough at the moment there are no consequences.
diff --git a/include/proto/sample.h b/include/proto/sample.h
index bcdd23b..268e7a0 100644
--- a/include/proto/sample.h
+++ b/include/proto/sample.h
@@ -63,4 +63,15 @@
 	return sample_casts[sample->data.type][req_type](sample);
 }
 
+static inline
+struct sample *smp_set_owner(struct sample *smp, struct proxy *px,
+                             struct session *sess, struct stream *strm, int opt)
+{
+	smp->px   = px;
+	smp->sess = sess;
+	smp->strm = strm;
+	smp->opt  = opt;
+	return smp;
+}
+
 #endif /* _PROTO_SAMPLE_H */
diff --git a/src/hlua.c b/src/hlua.c
index 9291517..2ed6f52 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -3011,10 +3011,7 @@
 	memset(&smp, 0, sizeof(smp));
 
 	/* Run the sample fetch process. */
-	smp.px = hsmp->p;
-	smp.sess = hsmp->s->sess;
-	smp.strm = hsmp->s;
-	smp.opt = hsmp->dir & SMP_OPT_DIR;
+	smp_set_owner(&smp, hsmp->p, hsmp->s->sess, hsmp->s, hsmp->dir & SMP_OPT_DIR);
 	if (!f->process(args, &smp, f->kw, f->private)) {
 		if (hsmp->flags & HLUA_F_AS_STRING)
 			lua_pushstring(L, "");
@@ -3121,6 +3118,8 @@
 		WILL_LJMP(lua_error(L));
 	}
 
+	smp_set_owner(&smp, hsmp->p, hsmp->s->sess, hsmp->s, hsmp->dir & SMP_OPT_DIR);
+
 	/* Apply expected cast. */
 	if (!sample_casts[smp.data.type][conv->in_type]) {
 		hlua_pusherror(L, "invalid input argument: cannot cast '%s' to '%s'",
@@ -3134,10 +3133,6 @@
 	}
 
 	/* Run the sample conversion process. */
-	smp.px = hsmp->p;
-	smp.sess = hsmp->s->sess;
-	smp.strm = hsmp->s;
-	smp.opt = hsmp->dir & SMP_OPT_DIR;
 	if (!conv->process(args, &smp, conv->private)) {
 		if (hsmp->flags & HLUA_F_AS_STRING)
 			lua_pushstring(L, "");
diff --git a/src/sample.c b/src/sample.c
index 5a79955..7c2d905 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -1040,10 +1040,7 @@
 		memset(p, 0, sizeof(*p));
 	}
 
-	p->px   = px;
-	p->sess = sess;
-	p->strm = strm;
-	p->opt  = opt;
+	smp_set_owner(p, px, sess, strm, opt);
 	if (!expr->fetch->process(expr->arg_p, p, expr->fetch->kw, expr->fetch->private))
 		return NULL;