Mailing List Archive

r2471 - in trunk/varnish-cache: include lib/libvarnish
Author: phk
Date: 2008-02-15 11:34:42 +0100 (Fri, 15 Feb 2008)
New Revision: 2471

Added:
trunk/varnish-cache/include/vlu.h
trunk/varnish-cache/lib/libvarnish/vlu.c
Modified:
trunk/varnish-cache/lib/libvarnish/Makefile.am
Log:
Add VLU (Varnish Line Up) a copy of LineUp from my private utility library:

A set of simple functions for cutting a byte stream into text-lines and
calling a function for each of them, as the they become available.


Added: trunk/varnish-cache/include/vlu.h
===================================================================
--- trunk/varnish-cache/include/vlu.h (rev 0)
+++ trunk/varnish-cache/include/vlu.h 2008-02-15 10:34:42 UTC (rev 2471)
@@ -0,0 +1,41 @@
+/*-
+ * Copyright (c) 2005-2008 Poul-Henning Kamp <phk at freebsd.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id: vpf.h 1410 2007-05-11 11:17:09Z des $
+ *
+ * Functions for assembling a bytestream into text-lines and calling
+ * a function on each.
+ */
+
+#ifndef VLU_H_INCLUDED
+#define VLU_H_INCLUDED
+
+typedef int (vlu_f)(void *, const char *);
+struct vlu *VLU_New(void *priv, vlu_f *func);
+int VLU_Fd(int fd, struct vlu *l);
+int VLU_File(FILE *f, struct vlu *l);
+void VLU_Destroy(struct vlu *l);
+
+#endif

Modified: trunk/varnish-cache/lib/libvarnish/Makefile.am
===================================================================
--- trunk/varnish-cache/lib/libvarnish/Makefile.am 2008-02-15 10:28:00 UTC (rev 2470)
+++ trunk/varnish-cache/lib/libvarnish/Makefile.am 2008-02-15 10:34:42 UTC (rev 2471)
@@ -15,6 +15,7 @@
num.c \
time.c \
version.c \
+ vlu.c \
vpf.c \
vsb.c \
vss.c \

Added: trunk/varnish-cache/lib/libvarnish/vlu.c
===================================================================
--- trunk/varnish-cache/lib/libvarnish/vlu.c (rev 0)
+++ trunk/varnish-cache/lib/libvarnish/vlu.c 2008-02-15 10:34:42 UTC (rev 2471)
@@ -0,0 +1,129 @@
+/*-
+ * Copyright (c) 2005-2008 Poul-Henning Kamp <phk at freebsd.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id: vpf.h 1410 2007-05-11 11:17:09Z des $
+ *
+ * Functions for assembling a bytestream into text-lines and calling
+ * a function on each.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <unistd.h>
+#include "vlu.h"
+#include "miniobj.h"
+
+struct vlu {
+ unsigned magic;
+#define LINEUP_MAGIC 0x8286661
+ char *buf;
+ unsigned bufl;
+ unsigned bufp;
+ void *priv;
+ vlu_f *func;
+};
+
+struct vlu *
+VLU_New(void *priv, vlu_f *func)
+{
+ struct vlu *l;
+
+ ALLOC_OBJ(l, LINEUP_MAGIC);
+ if (l != NULL) {
+ l->func = func;
+ l->priv = priv;
+ l->bufl = BUFSIZ - 1;
+ l->buf = malloc(l->bufl + 1);
+ if (l->buf == NULL) {
+ FREE_OBJ(l);
+ l = NULL;
+ }
+ }
+ return (l);
+}
+
+void
+VLU_Destroy(struct vlu *l)
+{
+
+ CHECK_OBJ_NOTNULL(l, LINEUP_MAGIC);
+ free(l->buf);
+ FREE_OBJ(l);
+}
+
+static int
+LineUpProcess(struct vlu *l)
+{
+ char *p, *q;
+ int i;
+
+ l->buf[l->bufp] = '\0';
+ for (p = l->buf; *p != '\0'; p = q) {
+ q = strchr(p, '\n');
+ if (q == NULL)
+ break;
+ *q++ = '\0';
+ i = l->func(l->priv, p);
+ if (i != 0)
+ return (i);
+ }
+ if (*p != '\0') {
+ q = strchr(p, '\0');
+ assert(q != NULL);
+ l->bufp = (unsigned)(q - p);
+ memmove(l->buf, p, l->bufp);
+ l->buf[l->bufp] = '\0';
+ } else
+ l->bufp = 0;
+ return (0);
+}
+
+int
+VLU_Fd(int fd, struct vlu *l)
+{
+ int i;
+
+ CHECK_OBJ_NOTNULL(l, LINEUP_MAGIC);
+ i = read(fd, l->buf + l->bufp, l->bufl - l->bufp);
+ if (i <= 0)
+ return (-1);
+ l->bufp += i;
+ return (LineUpProcess(l));
+}
+
+int
+VLU_File(FILE *f, struct vlu *l)
+{
+ char *p;
+
+ CHECK_OBJ_NOTNULL(l, LINEUP_MAGIC);
+ p = fgets(l->buf + l->bufp, l->bufl - l->bufp, f);
+ if (p == NULL)
+ return (-1);
+ l->bufp = strlen(l->buf);
+ return (LineUpProcess(l));
+}