From: Timo Sirainen Date: Tue, 1 Feb 2022 15:39:57 +0000 (+0100) Subject: lib-master, global: anvil_client_query() - Add type safety to callback's context X-Git-Tag: 2.4.0~4471 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=045b1112123376efc0613faec7f01343548939b0;p=thirdparty%2Fdovecot%2Fcore.git lib-master, global: anvil_client_query() - Add type safety to callback's context --- diff --git a/src/auth/auth-penalty.c b/src/auth/auth-penalty.c index 8a8b953003..77b49f3b7d 100644 --- a/src/auth/auth-penalty.c +++ b/src/auth/auth-penalty.c @@ -61,9 +61,10 @@ unsigned int auth_penalty_to_secs(unsigned int penalty) return secs < AUTH_PENALTY_MAX_SECS ? secs : AUTH_PENALTY_MAX_SECS; } -static void auth_penalty_anvil_callback(const char *reply, void *context) +static void +auth_penalty_anvil_callback(const char *reply, + struct auth_penalty_request *request) { - struct auth_penalty_request *request = context; unsigned int penalty = 0; unsigned long last_penalty = 0; unsigned int secs, drop_penalty; diff --git a/src/director/director.c b/src/director/director.c index 6bc303b696..97b74e7155 100644 --- a/src/director/director.c +++ b/src/director/director.c @@ -1006,9 +1006,10 @@ static void director_user_kill_fail_throttled(unsigned int new_events_count, i_error("Failed to kill %u users' connections", new_events_count); } -static void director_kill_user_callback(const char *reply, void *context) +static void +director_kill_user_callback(const char *reply, + struct director_kill_context *ctx) { - struct director_kill_context *ctx = context; struct user *user; /* don't try to abort the IPC command anymore */ @@ -1191,10 +1192,8 @@ void director_move_user(struct director *dir, struct director_host *src, } static void -director_kick_user_callback(const char *reply ATTR_UNUSED, void *context) +director_kick_user_callback(const char *reply ATTR_UNUSED, struct director *dir) { - struct director *dir = context; - i_assert(dir->users_kicking_count > 0); dir->users_kicking_count--; if (dir->kick_callback != NULL) diff --git a/src/doveadm/doveadm-kick.c b/src/doveadm/doveadm-kick.c index 4247bd0062..211d75523e 100644 --- a/src/doveadm/doveadm-kick.c +++ b/src/doveadm/doveadm-kick.c @@ -25,9 +25,9 @@ struct kick_context { unsigned int kicked_count; }; -static void kick_user_anvil_callback(const char *reply, void *context) +static void +kick_user_anvil_callback(const char *reply, struct kick_context *ctx) { - struct kick_context *ctx = context; unsigned int count; if (reply != NULL) { diff --git a/src/lib-master/anvil-client.c b/src/lib-master/anvil-client.c index 08c0487afa..42d135ac0e 100644 --- a/src/lib-master/anvil-client.c +++ b/src/lib-master/anvil-client.c @@ -329,6 +329,7 @@ static int anvil_client_send(struct anvil_client *client, const char *cmd) return 0; } +#undef anvil_client_query struct anvil_query * anvil_client_query(struct anvil_client *client, const char *query, unsigned int timeout_msecs, diff --git a/src/lib-master/anvil-client.h b/src/lib-master/anvil-client.h index 33fd59d8d8..b2652f8160 100644 --- a/src/lib-master/anvil-client.h +++ b/src/lib-master/anvil-client.h @@ -44,6 +44,11 @@ struct anvil_query * anvil_client_query(struct anvil_client *client, const char *query, unsigned int timeout_msecs, anvil_callback_t *callback, void *context); +#define anvil_client_query(client, query, timeout_msecs, callback, context) \ + anvil_client_query(client, query, timeout_msecs, \ + (anvil_callback_t *)(callback), 1 ? (context) : \ + CALLBACK_TYPECHECK(callback, \ + void (*)(const char *, typeof(context)))) void anvil_client_query_abort(struct anvil_client *client, struct anvil_query **query); /* Send a command to anvil, don't expect any replies. */ diff --git a/src/lmtp/lmtp-local.c b/src/lmtp/lmtp-local.c index 1e961a9344..94d3f385b8 100644 --- a/src/lmtp/lmtp-local.c +++ b/src/lmtp/lmtp-local.c @@ -256,10 +256,8 @@ lmtp_local_rcpt_anvil_finish(struct lmtp_local_recipient *llrcpt) } static void -lmtp_local_rcpt_anvil_cb(const char *reply, void *context) +lmtp_local_rcpt_anvil_cb(const char *reply, struct lmtp_local_recipient *llrcpt) { - struct lmtp_local_recipient *llrcpt = - (struct lmtp_local_recipient *)context; struct client *client = llrcpt->rcpt->client; struct smtp_server_recipient *rcpt = llrcpt->rcpt->rcpt; const struct mail_storage_service_input *input; diff --git a/src/login-common/sasl-server.c b/src/login-common/sasl-server.c index 3237574e98..61616440d7 100644 --- a/src/login-common/sasl-server.c +++ b/src/login-common/sasl-server.c @@ -215,9 +215,8 @@ static int master_send_request(struct anvil_request *anvil_request) } static void ATTR_NULL(1) -anvil_lookup_callback(const char *reply, void *context) +anvil_lookup_callback(const char *reply, struct anvil_request *req) { - struct anvil_request *req = context; struct client *client = req->client; const struct login_settings *set = client->set; const char *errmsg;