]> err.no Git - varnish/commitdiff
Add VLU (Varnish Line Up) a copy of LineUp from my private utility library:
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Fri, 15 Feb 2008 10:34:42 +0000 (10:34 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Fri, 15 Feb 2008 10:34:42 +0000 (10:34 +0000)
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.

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2471 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/include/vlu.h [new file with mode: 0644]
varnish-cache/lib/libvarnish/Makefile.am
varnish-cache/lib/libvarnish/vlu.c [new file with mode: 0644]

diff --git a/varnish-cache/include/vlu.h b/varnish-cache/include/vlu.h
new file mode 100644 (file)
index 0000000..307f57f
--- /dev/null
@@ -0,0 +1,41 @@
+/*-
+ * Copyright (c) 2005-2008 Poul-Henning Kamp <phk@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
index a0c2ff7c77e3e788132b043e18a1d0037da1422a..7ce015ae43f81728ef9e8f2a61d09960eddf5c48 100644 (file)
@@ -15,6 +15,7 @@ libvarnish_la_SOURCES = \
        num.c \
        time.c \
        version.c \
+       vlu.c \
        vpf.c \
        vsb.c \
        vss.c \
diff --git a/varnish-cache/lib/libvarnish/vlu.c b/varnish-cache/lib/libvarnish/vlu.c
new file mode 100644 (file)
index 0000000..5f6c89a
--- /dev/null
@@ -0,0 +1,129 @@
+/*-
+ * Copyright (c) 2005-2008 Poul-Henning Kamp <phk@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));
+}