Commit d967624f authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Forgot to add shmlog.c (reminded by des@)



git-svn-id: http://www.varnish-cache.org/svn/trunk@276 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent adbd3223
/*
* $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);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment