diff options
author | Fedor Indutny <fedor@indutny.com> | 2016-05-27 09:59:45 -0400 |
---|---|---|
committer | Fedor Indutny <fedor@indutny.com> | 2016-05-27 09:59:45 -0400 |
commit | 800432e83ea2bc09079b9487a565d41bf36f872c (patch) | |
tree | 1572a58a6958585b5473a50de1ad714a807c8880 | |
parent | aa6a92fdd3c3e22fee12c4cc9a657034dd5ce184 (diff) | |
download | uv_link_t-800432e83ea2bc09079b9487a565d41bf36f872c.tar.gz |
include: add `arg` to write/shutdown
-rw-r--r-- | README.md | 7 | ||||
-rw-r--r-- | include/uv_link_t.h | 22 | ||||
-rw-r--r-- | src/uv_link_observer_t.c | 11 | ||||
-rw-r--r-- | src/uv_link_source_t.c | 14 | ||||
-rw-r--r-- | test/src/test-uv-link-source-t.c | 6 |
5 files changed, 40 insertions, 20 deletions
diff --git a/README.md b/README.md index 14f6963..634281d 100644 --- a/README.md +++ b/README.md @@ -64,9 +64,12 @@ Now comes a funny part, any of these method implementations may hook up into the parent link in a chain to perform their actions: ```c -static int shutdown_impl(uv_link_t* link, uv_link_shutdown_cb cb) { +static int shutdown_impl(uv_link_t* link, + uv_link_t* source, + uv_link_shutdown_cb cb, + void* arg) { fprintf(stderr, "this will be printed\n"); - return uv_link_shutdown(link->parent, cb); + return uv_link_shutdown(link->parent, cb, arg); } ``` diff --git a/include/uv_link_t.h b/include/uv_link_t.h index 63e2410..2adaac3 100644 --- a/include/uv_link_t.h +++ b/include/uv_link_t.h @@ -14,8 +14,8 @@ typedef void (*uv_link_alloc_cb)(uv_link_t* link, typedef void (*uv_link_read_cb)(uv_link_t* link, ssize_t nread, const uv_buf_t* buf); -typedef void (*uv_link_write_cb)(uv_link_t* source, int status); -typedef void (*uv_link_shutdown_cb)(uv_link_t* source, int status); +typedef void (*uv_link_write_cb)(uv_link_t* source, int status, void* arg); +typedef void (*uv_link_shutdown_cb)(uv_link_t* source, int status, void* arg); struct uv_link_methods_s { int (*read_start)(uv_link_t* link); @@ -26,12 +26,16 @@ struct uv_link_methods_s { const uv_buf_t bufs[], unsigned int nbufs, uv_stream_t* send_handle, - uv_link_write_cb cb); + uv_link_write_cb cb, + void* arg); int (*try_write)(uv_link_t* link, const uv_buf_t bufs[], unsigned int nbufs); - int (*shutdown)(uv_link_t* link, uv_link_t* source, uv_link_shutdown_cb cb); + int (*shutdown)(uv_link_t* link, + uv_link_t* source, + uv_link_shutdown_cb cb, + void* arg); /* Overriding callbacks */ uv_link_alloc_cb alloc_cb_override; @@ -86,8 +90,9 @@ static int uv_link_write(uv_link_t* link, const uv_buf_t bufs[], unsigned int nbufs, uv_stream_t* send_handle, - uv_link_write_cb cb) { - return link->methods->write(link, source, bufs, nbufs, send_handle, cb); + uv_link_write_cb cb, + void* arg) { + return link->methods->write(link, source, bufs, nbufs, send_handle, cb, arg); } @@ -99,8 +104,9 @@ static int uv_link_try_write(uv_link_t* link, static int uv_link_shutdown(uv_link_t* link, uv_link_t* source, - uv_link_shutdown_cb cb) { - return link->methods->shutdown(link, source, cb); + uv_link_shutdown_cb cb, + void* arg) { + return link->methods->shutdown(link, source, cb, arg); } /* Link Source */ diff --git a/src/uv_link_observer_t.c b/src/uv_link_observer_t.c index 07f3dca..4e50010 100644 --- a/src/uv_link_observer_t.c +++ b/src/uv_link_observer_t.c @@ -27,12 +27,14 @@ static int uv_link_observer_write(uv_link_t* link, const uv_buf_t bufs[], unsigned int nbufs, uv_stream_t* send_handle, - uv_link_write_cb cb) { + uv_link_write_cb cb, + void* arg) { uv_link_observer_t* observer; observer = container_of(link, uv_link_observer_t, link); - return uv_link_write(observer->target, source, bufs, nbufs, send_handle, cb); + return uv_link_write(observer->target, source, bufs, nbufs, send_handle, cb, + arg); } @@ -49,12 +51,13 @@ static int uv_link_observer_try_write(uv_link_t* link, static int uv_link_observer_shutdown(uv_link_t* link, uv_link_t* source, - uv_link_shutdown_cb cb) { + uv_link_shutdown_cb cb, + void* arg) { uv_link_observer_t* observer; observer = container_of(link, uv_link_observer_t, link); - return uv_link_shutdown(observer->target, source, cb); + return uv_link_shutdown(observer->target, source, cb, arg); } diff --git a/src/uv_link_source_t.c b/src/uv_link_source_t.c index d3d4c3f..c445fab 100644 --- a/src/uv_link_source_t.c +++ b/src/uv_link_source_t.c @@ -9,12 +9,14 @@ typedef struct uv_link_source_shutdown_s uv_link_source_shutdown_t; struct uv_link_source_write_s { uv_write_t req; uv_link_t* link; + void* arg; uv_link_write_cb write_cb; }; struct uv_link_source_shutdown_s { uv_shutdown_t req; uv_link_t* link; + void* arg; uv_link_shutdown_cb shutdown_cb; }; @@ -65,7 +67,7 @@ static void uv_link_source_wrap_write_cb(uv_write_t* req, int status) { uv_link_source_write_t* lreq; lreq = container_of(req, uv_link_source_write_t, req); - lreq->write_cb(lreq->link, status); + lreq->write_cb(lreq->link, status, lreq->arg); free(lreq); } @@ -75,7 +77,8 @@ static int uv_link_source_write(uv_link_t* link, const uv_buf_t bufs[], unsigned int nbufs, uv_stream_t* send_handle, - uv_link_write_cb cb) { + uv_link_write_cb cb, + void* arg) { uv_link_source_t* s; uv_link_source_write_t* req; @@ -86,6 +89,7 @@ static int uv_link_source_write(uv_link_t* link, req->link = source; req->write_cb = cb; + req->arg = arg; return uv_write2(&req->req, s->stream, bufs, nbufs, send_handle, uv_link_source_wrap_write_cb); @@ -107,14 +111,15 @@ static void uv_link_source_wrap_shutdown_cb(uv_shutdown_t* req, int status) { uv_link_source_shutdown_t* lreq; lreq = container_of(req, uv_link_source_shutdown_t, req); - lreq->shutdown_cb(lreq->link, status); + lreq->shutdown_cb(lreq->link, status, lreq->arg); free(lreq); } static int uv_link_source_shutdown(uv_link_t* link, uv_link_t* source, - uv_link_shutdown_cb cb) { + uv_link_shutdown_cb cb, + void* arg) { uv_link_source_t* s; uv_link_source_shutdown_t* req; @@ -126,6 +131,7 @@ static int uv_link_source_shutdown(uv_link_t* link, req->link = source; req->shutdown_cb = cb; + req->arg = arg; return uv_shutdown(&req->req, s->stream, uv_link_source_wrap_shutdown_cb); } diff --git a/test/src/test-uv-link-source-t.c b/test/src/test-uv-link-source-t.c index 31a0c40..99d97d7 100644 --- a/test/src/test-uv-link-source-t.c +++ b/test/src/test-uv-link-source-t.c @@ -7,6 +7,7 @@ static int fds[2]; static uv_loop_t* loop; static uv_pipe_t pair_right; static uv_link_source_t source; +static int test_arg; static int write_cb_called; static int alloc_cb_called; @@ -24,8 +25,9 @@ static void read_one() { CHECK_EQ(buf[0], 'x', "data should match"); } -static void source_write_cb(uv_link_t* link, int status) { +static void source_write_cb(uv_link_t* link, int status, void* arg) { CHECK_EQ(link, &source.link, "link == &source.link"); + CHECK_EQ(arg, &test_arg, "arg == &test_arg"); write_cb_called++; @@ -39,7 +41,7 @@ static void test_writes() { /* .write() should work */ buf = uv_buf_init("x", 1); CHECK_EQ(uv_link_write(&source.link, &source.link, &buf, 1, NULL, - source_write_cb), + source_write_cb, &test_arg), 0, "source.link.write() should return 0"); |