summaryrefslogtreecommitdiffstats
path: root/lib/libevent/buffer.c
diff options
context:
space:
mode:
authorbrad <brad@openbsd.org>2008-05-02 06:09:11 +0000
committerbrad <brad@openbsd.org>2008-05-02 06:09:11 +0000
commitbdce580dd5484a4be9bfd4a9190bc7567b885c81 (patch)
tree47b2d551a32f9da41534681e10790819fe771bd9 /lib/libevent/buffer.c
parentdo not always delay log initialization, when no configuration file is (diff)
downloadwireguard-openbsd-bdce580dd5484a4be9bfd4a9190bc7567b885c81.tar.xz
wireguard-openbsd-bdce580dd5484a4be9bfd4a9190bc7567b885c81.zip
Update to libevent 1.3e while retaining our local changes.
"No objection" millert@ "the diff looks and works fine" reyk@
Diffstat (limited to 'lib/libevent/buffer.c')
-rw-r--r--lib/libevent/buffer.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/lib/libevent/buffer.c b/lib/libevent/buffer.c
index 49495545585..264e6df0915 100644
--- a/lib/libevent/buffer.c
+++ b/lib/libevent/buffer.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: buffer.c,v 1.14 2007/03/19 15:12:49 millert Exp $ */
+/* $OpenBSD: buffer.c,v 1.15 2008/05/02 06:09:11 brad Exp $ */
/*
* Copyright (c) 2002, 2003 Niels Provos <provos@citi.umich.edu>
@@ -46,6 +46,7 @@
#include <sys/ioctl.h>
#endif
+#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
@@ -136,9 +137,13 @@ evbuffer_add_vprintf(struct evbuffer *buf, const char *fmt, va_list ap)
int sz;
va_list aq;
+ /* make sure that at least some space is available */
+ evbuffer_expand(buf, 64);
for (;;) {
+ size_t used = buf->misalign + buf->off;
buffer = (char *)buf->buffer + buf->off;
- space = buf->totallen - buf->misalign - buf->off;
+ assert(buf->totallen >= used);
+ space = buf->totallen - used;
#ifndef va_copy
#define va_copy(dst, src) memcpy(&(dst), &(src), sizeof(va_list))
@@ -154,7 +159,7 @@ evbuffer_add_vprintf(struct evbuffer *buf, const char *fmt, va_list ap)
va_end(aq);
- if (sz == -1)
+ if (sz < 0)
return (-1);
if (sz < space) {
buf->off += sz;
@@ -246,7 +251,7 @@ evbuffer_readline(struct evbuffer *buffer)
/* Adds data to an event buffer */
-static inline void
+static void
evbuffer_align(struct evbuffer *buf)
{
memmove(buf->orig_buffer, buf->buffer, buf->off);
@@ -433,13 +438,12 @@ evbuffer_write(struct evbuffer *buffer, int fd)
u_char *
evbuffer_find(struct evbuffer *buffer, const u_char *what, size_t len)
{
- size_t remain = buffer->off;
- u_char *search = buffer->buffer;
+ u_char *search = buffer->buffer, *end = search + buffer->off;
u_char *p;
- while ((p = memchr(search, *what, remain)) != NULL) {
- remain = buffer->off - (size_t)(search - buffer->buffer);
- if (remain < len)
+ while (search < end &&
+ (p = memchr(search, *what, end - search)) != NULL) {
+ if (p + len > end)
break;
if (memcmp(p, what, len) == 0)
return (p);