test evbuffer_add_reference

svn:r1068
This commit is contained in:
Niels Provos 2009-01-29 03:20:40 +00:00
parent f13bede758
commit 66b2a7ffb7
3 changed files with 64 additions and 3 deletions

View File

@ -1389,7 +1389,8 @@ evbuffer_add_printf(struct evbuffer *buf, const char *fmt, ...)
}
int
evbuffer_add_reference(struct evbuffer *outbuf, void *data, size_t datlen,
evbuffer_add_reference(struct evbuffer *outbuf,
const void *data, size_t datlen,
void (*cleanupfn)(void *extra), void *extra)
{
size_t old_len = outbuf->total_len;
@ -1400,7 +1401,7 @@ evbuffer_add_reference(struct evbuffer *outbuf, void *data, size_t datlen,
return (-1);
chain->flags |= EVBUFFER_REFERENCE | EVBUFFER_IMMUTABLE;
chain->buffer = data;
chain->buffer = (u_char *)data;
chain->buffer_len = datlen;
chain->off = datlen;

View File

@ -245,7 +245,8 @@ int evbuffer_add_buffer(struct evbuffer *outbuf, struct evbuffer *inbuf);
@param extra optional argument to the cleanup callback
@return 0 if successful, or -1 if an error occurred
*/
int evbuffer_add_reference(struct evbuffer *outbuf, void *data, size_t datlen,
int evbuffer_add_reference(struct evbuffer *outbuf,
const void *data, size_t datlen,
void (*cleanupfn)(void *extra), void *extra);
/**

View File

@ -1237,6 +1237,64 @@ out:
cleanup_test();
}
static void
reference_cb(void *extra)
{
assert(extra = (void *)0xdeadaffe);
test_ok = 1;
}
static void
test_evbuffer_reference(void)
{
struct evbuffer *src = evbuffer_new();
struct evbuffer *dst = evbuffer_new();
void *tmp;
const char *data = "this is what we add as read-only memory.";
setup_test("Testing evbuffer_add_reference: ");
if (evbuffer_add_reference(src, data, strlen(data),
reference_cb, (void *)0xdeadaffe) == -1) {
fprintf(stdout, "FAILED\n");
exit(1);
}
tmp = evbuffer_reserve_space(dst, strlen(data));
if (evbuffer_remove(src, tmp, 10) == -1) {
fprintf(stdout, "FAILED\n");
exit(1);
}
evbuffer_validate(src);
evbuffer_validate(dst);
/* make sure that we don't write data at the beginning */
evbuffer_prepend(src, "aaaaa", 5);
evbuffer_validate(src);
evbuffer_drain(src, 5);
if (evbuffer_remove(src, tmp + 10, strlen(data) - 10) == -1) {
fprintf(stdout, "FAILED\n");
exit(1);
}
evbuffer_commit_space(dst, strlen(data));
evbuffer_validate(src);
evbuffer_validate(dst);
if (memcmp(evbuffer_pullup(dst, strlen(data)),
data, strlen(data)) != 0) {
fprintf(stdout, "FAILED\n");
exit(1);
}
cleanup_test();
evbuffer_free(dst);
evbuffer_free(src);
}
static void
test_evbuffer_readln(void)
{
@ -2363,6 +2421,7 @@ main (int argc, char **argv)
test_priorities(3);
test_evbuffer();
test_evbuffer_reference();
test_evbuffer_iterative();
test_evbuffer_readln();
test_evbuffer_find();