mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-08 20:07:56 -04:00
test evbuffer_add_reference
svn:r1068
This commit is contained in:
parent
f13bede758
commit
66b2a7ffb7
5
buffer.c
5
buffer.c
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
/**
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user