]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-dict, global: Add type safety to dict_transaction_commit_async() callback context
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 23 Feb 2021 09:11:47 +0000 (11:11 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 4 Mar 2021 12:25:48 +0000 (12:25 +0000)
src/dict/dict-commands.c
src/lib-dict/dict.c
src/lib-dict/dict.h
src/plugins/last-login/last-login-plugin.c
src/plugins/quota-clone/quota-clone-plugin.c
src/plugins/quota/quota-dict.c

index 5238c7b9c4660d6ec866fe3e0bf5f051a0a454e7..135a278fd616d79ad30fdbe7a07dedf725ab267d 100644 (file)
@@ -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);
 }
 
index 79307b4867847fa83ddb37c0d63a5f1cea68ad45..b1d40a17b67bab2212ea1c4f81efb5deb94fa112 100644 (file)
@@ -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)
index 6bb033ea9a3a159e6b54f92b5c95d12f6cbc1f36..47b0f170bdc0ac5a4b5dd7de1c4eb390818de691 100644 (file)
@@ -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);
index 3bb5451cadfb129c64577217713857a6948081d8..11cea2bed5b271d6f3cb771a78a5bba43afa968d 100644 (file)
@@ -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) {
index 489276acd98a9f44fb0e6d3acee93a1c0da78864..c05716abb26ad1ba056c101a9831b7a51ec67fe5 100644 (file)
@@ -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:
index f0f28c086b3103dd1bc42b8d3106b4ecb38c9131..d8b12defeecb8de7aa5629de251756d67a82b895 100644 (file)
@@ -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)