mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-10 13:04:23 -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
|
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)
|
void (*cleanupfn)(void *extra), void *extra)
|
||||||
{
|
{
|
||||||
size_t old_len = outbuf->total_len;
|
size_t old_len = outbuf->total_len;
|
||||||
@ -1400,7 +1401,7 @@ evbuffer_add_reference(struct evbuffer *outbuf, void *data, size_t datlen,
|
|||||||
return (-1);
|
return (-1);
|
||||||
|
|
||||||
chain->flags |= EVBUFFER_REFERENCE | EVBUFFER_IMMUTABLE;
|
chain->flags |= EVBUFFER_REFERENCE | EVBUFFER_IMMUTABLE;
|
||||||
chain->buffer = data;
|
chain->buffer = (u_char *)data;
|
||||||
chain->buffer_len = datlen;
|
chain->buffer_len = datlen;
|
||||||
chain->off = 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
|
@param extra optional argument to the cleanup callback
|
||||||
@return 0 if successful, or -1 if an error occurred
|
@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);
|
void (*cleanupfn)(void *extra), void *extra);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1237,6 +1237,64 @@ out:
|
|||||||
cleanup_test();
|
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
|
static void
|
||||||
test_evbuffer_readln(void)
|
test_evbuffer_readln(void)
|
||||||
{
|
{
|
||||||
@ -2363,6 +2421,7 @@ main (int argc, char **argv)
|
|||||||
test_priorities(3);
|
test_priorities(3);
|
||||||
|
|
||||||
test_evbuffer();
|
test_evbuffer();
|
||||||
|
test_evbuffer_reference();
|
||||||
test_evbuffer_iterative();
|
test_evbuffer_iterative();
|
||||||
test_evbuffer_readln();
|
test_evbuffer_readln();
|
||||||
test_evbuffer_find();
|
test_evbuffer_find();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user