From ba65400c6ee710b8b5857af5825a784b5c2d0d47 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 11 May 2012 15:19:55 +0200 Subject: tevent: expose tevent_context_init_ops This can be used to implement wrapper backends, while passing a private pointer to the backens init function via ev->additional_data. metze --- lib/tevent/tevent.c | 8 +++++--- lib/tevent/tevent.h | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index 5247b5ec1c..61ffc7edaa 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -210,8 +210,9 @@ int tevent_common_context_destructor(struct tevent_context *ev) NOTE: use tevent_context_init() inside of samba! */ -static struct tevent_context *tevent_context_init_ops(TALLOC_CTX *mem_ctx, - const struct tevent_ops *ops) +struct tevent_context *tevent_context_init_ops(TALLOC_CTX *mem_ctx, + const struct tevent_ops *ops, + void *additional_data) { struct tevent_context *ev; int ret; @@ -222,6 +223,7 @@ static struct tevent_context *tevent_context_init_ops(TALLOC_CTX *mem_ctx, talloc_set_destructor(ev, tevent_common_context_destructor); ev->ops = ops; + ev->additional_data = additional_data; ret = ev->ops->context_init(ev); if (ret != 0) { @@ -253,7 +255,7 @@ struct tevent_context *tevent_context_init_byname(TALLOC_CTX *mem_ctx, for (e=tevent_backends;e;e=e->next) { if (strcmp(name, e->name) == 0) { - return tevent_context_init_ops(mem_ctx, e->ops); + return tevent_context_init_ops(mem_ctx, e->ops, NULL); } } return NULL; diff --git a/lib/tevent/tevent.h b/lib/tevent/tevent.h index c8719fa4f1..dc61912be7 100644 --- a/lib/tevent/tevent.h +++ b/lib/tevent/tevent.h @@ -125,6 +125,20 @@ struct tevent_context *tevent_context_init(TALLOC_CTX *mem_ctx); */ struct tevent_context *tevent_context_init_byname(TALLOC_CTX *mem_ctx, const char *name); +/** + * @brief Create a custom event context + * + * @param[in] mem_ctx The memory context to use. + * @param[in] ops The function pointer table of the backend. + * @param[in] additional_data The additional/private data to this instance + * + * @return An allocated tevent context, NULL on error. + * + */ +struct tevent_context *tevent_context_init_ops(TALLOC_CTX *mem_ctx, + const struct tevent_ops *ops, + void *additional_data); + /** * @brief List available backends. * -- cgit