[master] ef14640 Add ObjIterate() wrapper function
Poul-Henning Kamp
phk at FreeBSD.org
Thu Dec 10 01:23:28 CET 2015
commit ef14640730b8eca2cfb7458d08ee10270ce7968f
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed Dec 9 22:31:06 2015 +0000
Add ObjIterate() wrapper function
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 4fac13c..eb892ae 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -855,6 +855,9 @@ void *MPL_Get(struct mempool *mpl, unsigned *size);
void MPL_Free(struct mempool *mpl, void *item);
/* cache_obj.c */
+typedef int objiterate_f(void *priv, int flush, const void *ptr, ssize_t len);
+int ObjIterate(struct worker *, struct objcore *,
+ void *priv, objiterate_f *func);
enum objiter_status {
OIS_DONE,
OIS_DATA,
diff --git a/bin/varnishd/cache/cache_obj.c b/bin/varnishd/cache/cache_obj.c
index 53fe080..2203845 100644
--- a/bin/varnishd/cache/cache_obj.c
+++ b/bin/varnishd/cache/cache_obj.c
@@ -231,6 +231,40 @@ ObjIterEnd(struct objcore *oc, void **oix)
FREE_OBJ(oi);
}
+int
+ObjIterate(struct worker *wrk, struct objcore *oc,
+ void *priv, objiterate_f *func)
+{
+ void *oi;
+ enum objiter_status ois;
+ void *ptr;
+ ssize_t len;
+
+ oi = ObjIterBegin(wrk, oc);
+ do {
+ ois = ObjIter(oc, oi, &ptr, &len);
+ switch(ois) {
+ case OIS_DONE:
+ AZ(len);
+ break;
+ case OIS_ERROR:
+ break;
+ case OIS_DATA:
+ if (func(priv, 0, ptr, len))
+ ois = OIS_ERROR;
+ break;
+ case OIS_STREAM:
+ if (func(priv, 1, ptr, len))
+ ois = OIS_ERROR;
+ break;
+ default:
+ WRONG("Wrong OIS value");
+ }
+ } while (ois == OIS_DATA || ois == OIS_STREAM);
+ ObjIterEnd(oc, &oi);
+ return (ois == OIS_DONE ? 0 : -1);
+}
+
/*--------------------------------------------------------------------
*/
More information about the varnish-commit
mailing list