r2471 - in trunk/varnish-cache: include lib/libvarnish

phk at projects.linpro.no phk at projects.linpro.no
Fri Feb 15 11:34:42 CET 2008


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));
+}




More information about the varnish-commit mailing list