summaryrefslogtreecommitdiff
path: root/libevent/buffer.c
diff options
context:
space:
mode:
authorMax Laier <mlaier@FreeBSD.org>2008-12-10 21:08:42 +0000
committerMax Laier <mlaier@FreeBSD.org>2008-12-10 21:08:42 +0000
commit89a3159080a774bd9de50eaf1861a1f0c1657a9f (patch)
treec096fbed43e7e27c693d9c76d395f03a6c790ac2 /libevent/buffer.c
parenta13f3058fbd67e3bbda784171bacc8343faf6edf (diff)
Notes
Diffstat (limited to 'libevent/buffer.c')
-rw-r--r--libevent/buffer.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/libevent/buffer.c b/libevent/buffer.c
index 77efd0cfa3e20..0327eb549383c 100644
--- a/libevent/buffer.c
+++ b/libevent/buffer.c
@@ -44,6 +44,7 @@
#include <sys/ioctl.h>
#endif
+#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
@@ -106,7 +107,7 @@ evbuffer_add_buffer(struct evbuffer *outbuf, struct evbuffer *inbuf)
/*
* Optimization comes with a price; we need to notify the
* buffer if necessary of the changes. oldoff is the amount
- * of data that we tranfered from inbuf to outbuf
+ * of data that we transfered from inbuf to outbuf
*/
if (inbuf->off != oldoff && inbuf->cb != NULL)
(*inbuf->cb)(inbuf, oldoff, inbuf->off, inbuf->cbarg);
@@ -134,9 +135,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))
@@ -152,7 +157,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;
@@ -244,7 +249,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);
@@ -431,13 +436,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);