From: Timo Sirainen Date: Tue, 23 Feb 2021 09:11:47 +0000 (+0200) Subject: lib-dict, global: Add type safety to dict_transaction_commit_async() callback context X-Git-Tag: 2.3.15~323 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2a79971244801a3cf84d7e88cf9dccb092e80698;p=thirdparty%2Fdovecot%2Fcore.git lib-dict, global: Add type safety to dict_transaction_commit_async() callback context --- diff --git a/src/dict/dict-commands.c b/src/dict/dict-commands.c index 5238c7b9c4..135a278fd6 100644 --- a/src/dict/dict-commands.c +++ b/src/dict/dict-commands.c @@ -495,18 +495,14 @@ cmd_commit_finish(struct dict_connection_cmd *cmd, } static void cmd_commit_callback(const struct dict_commit_result *result, - void *context) + struct dict_connection_cmd *cmd) { - struct dict_connection_cmd *cmd = context; - cmd_commit_finish(cmd, result, FALSE); } static void cmd_commit_callback_async(const struct dict_commit_result *result, - void *context) + struct dict_connection_cmd *cmd) { - struct dict_connection_cmd *cmd = context; - cmd_commit_finish(cmd, result, TRUE); } diff --git a/src/lib-dict/dict.c b/src/lib-dict/dict.c index 79307b4867..b1d40a17b6 100644 --- a/src/lib-dict/dict.c +++ b/src/lib-dict/dict.c @@ -561,6 +561,7 @@ int dict_transaction_commit(struct dict_transaction_context **_ctx, return result.ret; } +#undef dict_transaction_commit_async void dict_transaction_commit_async(struct dict_transaction_context **_ctx, dict_transaction_commit_callback_t *callback, void *context) diff --git a/src/lib-dict/dict.h b/src/lib-dict/dict.h index 6bb033ea9a..47b0f170bd 100644 --- a/src/lib-dict/dict.h +++ b/src/lib-dict/dict.h @@ -167,6 +167,11 @@ int dict_transaction_commit(struct dict_transaction_context **ctx, void dict_transaction_commit_async(struct dict_transaction_context **ctx, dict_transaction_commit_callback_t *callback, void *context) ATTR_NULL(2, 3); +#define dict_transaction_commit_async(ctx, callback, context) \ + dict_transaction_commit_async(ctx, (dict_transaction_commit_callback_t *)(callback), \ + 1 ? (context) : \ + CALLBACK_TYPECHECK(callback, \ + void (*)(const struct dict_commit_result *, typeof(context)))) /* Same as dict_transaction_commit_async(), but don't call a callback. */ void dict_transaction_commit_async_nocallback( struct dict_transaction_context **ctx); diff --git a/src/plugins/last-login/last-login-plugin.c b/src/plugins/last-login/last-login-plugin.c index 3bb5451cad..11cea2bed5 100644 --- a/src/plugins/last-login/last-login-plugin.c +++ b/src/plugins/last-login/last-login-plugin.c @@ -48,9 +48,8 @@ static void last_login_user_deinit(struct mail_user *user) static void last_login_dict_commit(const struct dict_commit_result *result, - void *context) + struct mail_user *user) { - struct mail_user *user = context; struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user); switch(result->ret) { diff --git a/src/plugins/quota-clone/quota-clone-plugin.c b/src/plugins/quota-clone/quota-clone-plugin.c index 489276acd9..c05716abb2 100644 --- a/src/plugins/quota-clone/quota-clone-plugin.c +++ b/src/plugins/quota-clone/quota-clone-plugin.c @@ -38,10 +38,8 @@ struct quota_clone_user { static void quota_clone_dict_commit(const struct dict_commit_result *result, - void *context) + struct quota_clone_user *quser) { - struct quota_clone_user *quser = context; - switch (result->ret) { case DICT_COMMIT_RET_OK: case DICT_COMMIT_RET_NOTFOUND: diff --git a/src/plugins/quota/quota-dict.c b/src/plugins/quota/quota-dict.c index f0f28c086b..d8b12defee 100644 --- a/src/plugins/quota/quota-dict.c +++ b/src/plugins/quota/quota-dict.c @@ -192,10 +192,8 @@ static void dict_quota_recalc_timeout(struct dict_quota_root *root) } static void dict_quota_update_callback(const struct dict_commit_result *result, - void *context) + struct dict_quota_root *root) { - struct dict_quota_root *root = context; - if (result->ret == 0) { /* row doesn't exist, need to recalculate it */ if (root->to_update == NULL)