]> granicus.if.org Git - libevent/commit
Add evbuffer_copyout to copy data from an evbuffer without draining
authorNick Mathewson <nickm@torproject.org>
Tue, 13 Apr 2010 02:24:54 +0000 (22:24 -0400)
committerNick Mathewson <nickm@torproject.org>
Tue, 13 Apr 2010 05:42:01 +0000 (01:42 -0400)
commiteb86c8c5ffc43a4e52881a20132eb03c3f9da283
treeb45da736931a41b711029e9cc190b8e37909843a
parent819f949f4ab61c4c5add40105d299e73c190e94f
Add evbuffer_copyout to copy data from an evbuffer without draining

The evbuffer_remove() function copies data from the front of an
evbuffer into an array of char, and removes the data from the buffer.
This function behaves the same, but does not remove the data.  This
behavior can be handy for lots of protocols, where you want the
evbuffer to accumulate data until a complete record has arrived.

Lots of people have asked for a function more or less like this, and
though it isn't too hard to code one from evbuffer_peek(), it is
apparently annoying to do it in every app you write.  The
evbuffer_peek() function is significantly faster, but it requires that
the user be able to handle data in separate extents.

This patch also reimplements evbufer_remove() as evbuffer_copyout()
followed by evbuffer_drain().  I am reasonably confident that this
won't be a performance hit: the memcpy() overhead should dominate the
cost of walking the list an extra time.
buffer.c
include/event2/buffer.h