From: Timo Sirainen Date: Thu, 13 Jan 2022 15:17:28 +0000 (+0200) Subject: lib-master, login-common: anvil_client_init() - Change callback to struct of callbacks X-Git-Tag: 2.4.0~4502 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=96a4cb55afffe5c2df67f2ab867f0f1527b5d7e8;p=thirdparty%2Fdovecot%2Fcore.git lib-master, login-common: anvil_client_init() - Change callback to struct of callbacks --- diff --git a/src/lib-master/anvil-client.c b/src/lib-master/anvil-client.c index e16e3706ec..d6a95e306e 100644 --- a/src/lib-master/anvil-client.c +++ b/src/lib-master/anvil-client.c @@ -30,7 +30,7 @@ struct anvil_client { ARRAY(struct anvil_query *) queries_arr; struct aqueue *queries; - bool (*reconnect_callback)(void); + struct anvil_client_callbacks callbacks; enum anvil_client_flags flags; bool deinitializing; }; @@ -62,7 +62,8 @@ static struct connection_vfuncs anvil_connections_vfuncs = { }; struct anvil_client * -anvil_client_init(const char *path, bool (*reconnect_callback)(void), +anvil_client_init(const char *path, + const struct anvil_client_callbacks *callbacks, enum anvil_client_flags flags) { struct anvil_client *client; @@ -74,7 +75,8 @@ anvil_client_init(const char *path, bool (*reconnect_callback)(void), client = i_new(struct anvil_client, 1); connection_init_client_unix(anvil_connections, &client->conn, path); - client->reconnect_callback = reconnect_callback; + if (callbacks != NULL) + client->callbacks = *callbacks; client->flags = flags; i_array_init(&client->queries_arr, 32); client->queries = aqueue_init(&client->queries_arr.arr); @@ -120,8 +122,8 @@ anvil_client_start_multiplex_output(struct anvil_client *client) static void anvil_client_reconnect(struct anvil_client *client) { - if (client->reconnect_callback != NULL) { - if (!client->reconnect_callback()) { + if (client->callbacks.reconnect != NULL) { + if (!client->callbacks.reconnect()) { /* no reconnection */ return; } diff --git a/src/lib-master/anvil-client.h b/src/lib-master/anvil-client.h index 3433041701..997791ffdf 100644 --- a/src/lib-master/anvil-client.h +++ b/src/lib-master/anvil-client.h @@ -6,13 +6,20 @@ enum anvil_client_flags { ANVIL_CLIENT_FLAG_HIDE_ENOENT = 0x01 }; +struct anvil_client_callbacks { + /* Called when connection is lost. If it returns FALSE, reconnection + isn't attempted. */ + bool (*reconnect)(void); +}; + /* reply=NULL if query failed */ typedef void anvil_callback_t(const char *reply, void *context); /* If reconnect_callback is specified, it's called when connection is lost. If the callback returns FALSE, reconnection isn't attempted. */ struct anvil_client * -anvil_client_init(const char *path, bool (*reconnect_callback)(void), +anvil_client_init(const char *path, + const struct anvil_client_callbacks *callbacks, enum anvil_client_flags flags) ATTR_NULL(2); void anvil_client_deinit(struct anvil_client **client); diff --git a/src/login-common/main.c b/src/login-common/main.c index 7d3a760878..d291c886d1 100644 --- a/src/login-common/main.c +++ b/src/login-common/main.c @@ -327,7 +327,10 @@ void login_anvil_init(void) if (anvil != NULL) return; - anvil = anvil_client_init("anvil", anvil_reconnect_callback, 0); + const struct anvil_client_callbacks callbacks = { + .reconnect = anvil_reconnect_callback, + }; + anvil = anvil_client_init("anvil", &callbacks, 0); if (anvil_client_connect(anvil, TRUE) < 0) i_fatal("Couldn't connect to anvil"); }