From: Aki Tuomi Date: Mon, 3 Sep 2018 09:17:40 +0000 (+0300) Subject: driver-mysql: Add init_full X-Git-Tag: 2.3.9~1456 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cc5ff7352d54a7738e76e73647cd45268dc5a9e5;p=thirdparty%2Fdovecot%2Fcore.git driver-mysql: Add init_full --- diff --git a/src/lib-sql/driver-mysql.c b/src/lib-sql/driver-mysql.c index eca58494e5..2e90da4c39 100644 --- a/src/lib-sql/driver-mysql.c +++ b/src/lib-sql/driver-mysql.c @@ -269,7 +269,8 @@ static int driver_mysql_parse_connect_string(struct mysql_db *db, return 0; } -static struct sql_db *driver_mysql_init_v(const char *connect_string) +static int driver_mysql_init_full_v(const struct sql_settings *set, + struct sql_db **db_r, const char **error_r) { struct mysql_db *db; const char *error = NULL; @@ -281,12 +282,18 @@ static struct sql_db *driver_mysql_init_v(const char *connect_string) db->pool = pool; db->api = driver_mysql_db; T_BEGIN { - ret = driver_mysql_parse_connect_string(db, connect_string, &error); - if (ret < 0) - i_fatal("mysql: %s", error); + ret = driver_mysql_parse_connect_string(db, set->connect_string, &error); + error = p_strdup(db->pool, error); } T_END; - return &db->api; + if (ret < 0) { + *error_r = t_strdup(error); + pool_unref(&db->pool); + return ret; + } + + *db_r = &db->api; + return 0; } static void driver_mysql_deinit_v(struct sql_db *_db) @@ -687,7 +694,7 @@ const struct sql_db driver_mysql_db = { .flags = SQL_DB_FLAG_BLOCKING | SQL_DB_FLAG_POOLED, .v = { - .init = driver_mysql_init_v, + .init_full = driver_mysql_init_full_v, .deinit = driver_mysql_deinit_v, .connect = driver_mysql_connect, .disconnect = driver_mysql_disconnect,