about summary refs log tree commit diff
path: root/libevent/buffer.c
diff options
context:
space:
mode:
authorRichard Nyberg <rnyberg@murmeldjur.se>2007-02-25 17:34:12 +0000
committerRichard Nyberg <rnyberg@murmeldjur.se>2007-02-25 17:34:12 +0000
commit91f85c222be7ef247c8f2e18815eb23c336ed081 (patch)
treee622ff381949cdbda284550f1fb701e29b0eba76 /libevent/buffer.c
parent372cec7b53ce0959ba5756e1e51f1f15793a3663 (diff)
downloadbtpd-91f85c222be7ef247c8f2e18815eb23c336ed081.tar.gz
btpd-91f85c222be7ef247c8f2e18815eb23c336ed081.zip
Update to libevent from patches-1.3 r335.
Diffstat (limited to 'libevent/buffer.c')
-rw-r--r--libevent/buffer.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/libevent/buffer.c b/libevent/buffer.c
index 1585389..77efd0c 100644
--- a/libevent/buffer.c
+++ b/libevent/buffer.c
@@ -135,17 +135,23 @@ evbuffer_add_vprintf(struct evbuffer *buf, const char *fmt, va_list ap)
 	va_list aq;
 
 	for (;;) {
-		buffer = buf->buffer + buf->off;
+		buffer = (char *)buf->buffer + buf->off;
 		space = buf->totallen - buf->misalign - buf->off;
 
+#ifndef va_copy
+#define	va_copy(dst, src)	memcpy(&(dst), &(src), sizeof(va_list))
+#endif
 		va_copy(aq, ap);
+
 #ifdef WIN32
 		sz = vsnprintf(buffer, space - 1, fmt, aq);
 		buffer[space - 1] = '\0';
 #else
 		sz = vsnprintf(buffer, space, fmt, aq);
 #endif
+
 		va_end(aq);
+
 		if (sz == -1)
 			return (-1);
 		if (sz < space) {
@@ -285,7 +291,7 @@ evbuffer_expand(struct evbuffer *buf, size_t datlen)
 }
 
 int
-evbuffer_add(struct evbuffer *buf, void *data, size_t datlen)
+evbuffer_add(struct evbuffer *buf, const void *data, size_t datlen)
 {
 	size_t need = buf->misalign + buf->off + datlen;
 	size_t oldoff = buf->off;
@@ -429,12 +435,13 @@ evbuffer_find(struct evbuffer *buffer, const u_char *what, size_t len)
 	u_char *search = buffer->buffer;
 	u_char *p;
 
-	while ((p = memchr(search, *what, remain)) != NULL && remain >= len) {
+	while ((p = memchr(search, *what, remain)) != NULL) {
+		remain = buffer->off - (size_t)(search - buffer->buffer);
+		if (remain < len)
+			break;
 		if (memcmp(p, what, len) == 0)
 			return (p);
-
 		search = p + 1;
-		remain = buffer->off - (size_t)(search - buffer->buffer);
 	}
 
 	return (NULL);