r276 - trunk/varnish-cache/lib/libvarnishapi

phk at projects.linpro.no phk at projects.linpro.no
Fri Jun 30 22:22:58 CEST 2006


Author: phk
Date: 2006-06-30 22:22:58 +0200 (Fri, 30 Jun 2006)
New Revision: 276

Added:
   trunk/varnish-cache/lib/libvarnishapi/shmlog.c
Log:
Forgot to add shmlog.c (reminded by des@)



Added: trunk/varnish-cache/lib/libvarnishapi/shmlog.c
===================================================================
--- trunk/varnish-cache/lib/libvarnishapi/shmlog.c	2006-06-30 20:21:15 UTC (rev 275)
+++ trunk/varnish-cache/lib/libvarnishapi/shmlog.c	2006-06-30 20:22:58 UTC (rev 276)
@@ -0,0 +1,77 @@
+/*
+ * $Id: varnishlog.c 153 2006-04-25 08:17:43Z phk $
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#include "shmlog.h"
+#include "varnishapi.h"
+
+static unsigned char *logstart, *logend;
+
+struct shmloghead *
+VSL_OpenLog(void)
+{
+	int fd;
+	int i;
+	struct shmloghead slh, *lh;
+
+	fd = open(SHMLOG_FILENAME, O_RDONLY);
+	if (fd < 0) {
+		fprintf(stderr, "Cannot open %s: %s\n",
+		    SHMLOG_FILENAME, strerror(errno));
+		exit (1);
+	}
+	i = read(fd, &slh, sizeof slh);
+	if (i != sizeof slh) {
+		fprintf(stderr, "Cannot read %s: %s\n",
+		    SHMLOG_FILENAME, strerror(errno));
+		exit (1);
+	}
+	if (slh.magic != SHMLOGHEAD_MAGIC) {
+		fprintf(stderr, "Wrong magic number in file %s\n",
+		    SHMLOG_FILENAME);
+		exit (1);
+	}
+
+	lh = mmap(NULL, slh.size + sizeof slh,
+	    PROT_READ, MAP_HASSEMAPHORE, fd, 0);
+	if (lh == MAP_FAILED) {
+		fprintf(stderr, "Cannot mmap %s: %s\n",
+		    SHMLOG_FILENAME, strerror(errno));
+		exit (1);
+	}
+
+	logstart = (unsigned char *)lh + lh->start;
+	logend = logstart + lh->size;
+
+	return (lh);
+}
+
+unsigned char *
+VSL_NextLog(struct shmloghead *lh, unsigned char **pp)
+{
+	unsigned char *p;
+
+	p = *pp;
+	if (p == NULL)
+		p = logstart;
+	while (1) {
+		if (*p == SLT_WRAPMARKER) {
+			p = logstart;
+			continue;
+		}
+		if (*p == SLT_ENDMARKER) {
+			*pp = p;
+			return (NULL);
+		}
+		*pp = p + p[1] + 4;
+		return (p);
+	}
+}




More information about the varnish-commit mailing list