[master] c2c164d Convert to ObjIterate()

Poul-Henning Kamp phk at FreeBSD.org
Thu Dec 10 01:23:28 CET 2015


commit c2c164d8f25732a970dc87fbc079a96c4d02d07d
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Dec 9 23:02:53 2015 +0000

    Convert to ObjIterate()

diff --git a/bin/varnishd/cache/cache_req_body.c b/bin/varnishd/cache/cache_req_body.c
index 02050f9..36256c9 100644
--- a/bin/varnishd/cache/cache_req_body.c
+++ b/bin/varnishd/cache/cache_req_body.c
@@ -47,33 +47,51 @@
  * return length or -1 on error
  */
 
+struct vrb_foo {
+	unsigned	magic;
+#define VRB_FOO_MAGIC	0x30240389
+	struct req	*req;
+	void		*priv;
+	req_body_iter_f	*func;
+	ssize_t		ll;
+};
+
+static int
+vrb_objiterator(void *priv, int flush, const void *ptr, ssize_t len)
+{
+	struct vrb_foo *foo;
+
+	CAST_OBJ_NOTNULL(foo, priv, VRB_FOO_MAGIC);
+
+	(void)flush;
+	foo->ll += len;
+	return (foo->func(foo->req, foo->priv, ptr, len));
+}
+
 ssize_t
 VRB_Iterate(struct req *req, req_body_iter_f *func, void *priv)
 {
 	char buf[8192];
 	ssize_t l, ll = 0;
-	void *p;
 	int i;
 	struct vfp_ctx *vfc;
 	enum vfp_status vfps = VFP_ERROR;
-	void *oi;
-	enum objiter_status ois;
+	struct vrb_foo foo;
 
 	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
 	AN(func);
 
 	switch(req->req_body_status) {
 	case REQ_BODY_CACHED:
-		oi = ObjIterBegin(req->wrk, req->body_oc);
-		AN(oi);
-		do {
-			ois = ObjIter(req->body_oc, oi, &p, &l);
-			ll += l;
-			if (l > 0 && func(req, priv, p, l))
-				break;
-		} while (ois == OIS_DATA);
-		ObjIterEnd(req->body_oc, &oi);
-		return (ois == OIS_DONE ? ll : -1);
+		INIT_OBJ(&foo, VRB_FOO_MAGIC);
+		foo.req = req;
+		foo.priv = priv;
+		foo.func = func;
+		foo.ll = 0;
+
+		if (ObjIterate(req->wrk, req->body_oc, &foo, vrb_objiterator))
+			return (-1);
+		return (foo.ll);
 	case REQ_BODY_NONE:
 		return (0);
 	case REQ_BODY_WITH_LEN:



More information about the varnish-commit mailing list