]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sql: driver-mysql - Use container_of instead of blind cast
authorAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 29 Aug 2023 12:04:04 +0000 (15:04 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Mon, 4 Sep 2023 07:53:57 +0000 (10:53 +0300)
src/lib-sql/driver-mysql.c

index 216aa3cb0cd3431ef05cadbe3cc076e9f6f51e12..05fdecb780f6179548430bb6a321d8042b2dc56c 100644 (file)
@@ -80,7 +80,7 @@ static struct event_category event_category_mysql = {
 
 static int driver_mysql_connect(struct sql_db *_db)
 {
-       struct mysql_db *db = (struct mysql_db *)_db;
+       struct mysql_db *db = container_of(_db, struct mysql_db, api);
        const char *unix_socket, *host;
        unsigned long client_flags = db->client_flags;
        unsigned int secs_used;
@@ -174,7 +174,7 @@ static int driver_mysql_connect(struct sql_db *_db)
 
 static void driver_mysql_disconnect(struct sql_db *_db)
 {
-       struct mysql_db *db = (struct mysql_db *)_db;
+       struct mysql_db *db = container_of(_db, struct mysql_db, api);
        if (db->mysql != NULL)
                mysql_close(db->mysql);
        db->mysql = NULL;
@@ -310,7 +310,7 @@ static int driver_mysql_init_full_v(const struct sql_settings *set,
 
 static void driver_mysql_deinit_v(struct sql_db *_db)
 {
-       struct mysql_db *db = (struct mysql_db *)_db;
+       struct mysql_db *db = container_of(_db, struct mysql_db, api);
 
        _db->no_reconnect = TRUE;
        sql_db_set_state(&db->api, SQL_DB_STATE_DISCONNECTED);
@@ -361,7 +361,7 @@ static int driver_mysql_do_query(struct mysql_db *db, const char *query,
 static const char *
 driver_mysql_escape_string(struct sql_db *_db, const char *string)
 {
-       struct mysql_db *db = (struct mysql_db *)_db;
+       struct mysql_db *db = container_of(_db, struct mysql_db, api);
        size_t len = strlen(string);
        char *to;
 
@@ -391,7 +391,7 @@ driver_mysql_escape_string(struct sql_db *_db, const char *string)
 
 static void driver_mysql_exec(struct sql_db *_db, const char *query)
 {
-       struct mysql_db *db = (struct mysql_db *)_db;
+       struct mysql_db *db = container_of(_db, struct mysql_db, api);
        struct event *event = event_create(_db->event);
 
        (void)driver_mysql_do_query(db, query, event);
@@ -414,7 +414,7 @@ static void driver_mysql_query(struct sql_db *db, const char *query,
 static struct sql_result *
 driver_mysql_query_s(struct sql_db *_db, const char *query)
 {
-       struct mysql_db *db = (struct mysql_db *)_db;
+       struct mysql_db *db = container_of(_db, struct mysql_db, api);
        struct mysql_result *result;
        struct event *event;
        int ret;
@@ -457,7 +457,8 @@ driver_mysql_query_s(struct sql_db *_db, const char *query)
 
 static void driver_mysql_result_free(struct sql_result *_result)
 {
-       struct mysql_result *result = (struct mysql_result *)_result;
+       struct mysql_result *result =
+               container_of(_result, struct mysql_result, api);
 
        i_assert(_result != &sql_not_connected_result);
        if (_result->callback)
@@ -471,8 +472,9 @@ static void driver_mysql_result_free(struct sql_result *_result)
 
 static int driver_mysql_result_next_row(struct sql_result *_result)
 {
-       struct mysql_result *result = (struct mysql_result *)_result;
-       struct mysql_db *db = (struct mysql_db *)_result->db;
+       struct mysql_result *result =
+               container_of(_result, struct mysql_result, api);
+       struct mysql_db *db = container_of(_result->db, struct mysql_db, api);
        int ret;
 
        if (result->result == NULL) {
@@ -504,7 +506,8 @@ static void driver_mysql_result_fetch_fields(struct mysql_result *result)
 static unsigned int
 driver_mysql_result_get_fields_count(struct sql_result *_result)
 {
-       struct mysql_result *result = (struct mysql_result *)_result;
+       struct mysql_result *result =
+               container_of(_result, struct mysql_result, api);
 
         driver_mysql_result_fetch_fields(result);
        return result->fields_count;
@@ -513,7 +516,8 @@ driver_mysql_result_get_fields_count(struct sql_result *_result)
 static const char *
 driver_mysql_result_get_field_name(struct sql_result *_result, unsigned int idx)
 {
-       struct mysql_result *result = (struct mysql_result *)_result;
+       struct mysql_result *result =
+               container_of(_result, struct mysql_result, api);
 
        driver_mysql_result_fetch_fields(result);
        i_assert(idx < result->fields_count);
@@ -523,7 +527,8 @@ driver_mysql_result_get_field_name(struct sql_result *_result, unsigned int idx)
 static int driver_mysql_result_find_field(struct sql_result *_result,
                                          const char *field_name)
 {
-       struct mysql_result *result = (struct mysql_result *)_result;
+       struct mysql_result *result =
+               container_of(_result, struct mysql_result, api);
        unsigned int i;
 
        driver_mysql_result_fetch_fields(result);
@@ -538,7 +543,8 @@ static const char *
 driver_mysql_result_get_field_value(struct sql_result *_result,
                                    unsigned int idx)
 {
-       struct mysql_result *result = (struct mysql_result *)_result;
+       struct mysql_result *result =
+               container_of(_result, struct mysql_result, api);
 
        return (const char *)result->row[idx];
 }
@@ -547,7 +553,8 @@ static const unsigned char *
 driver_mysql_result_get_field_value_binary(struct sql_result *_result,
                                           unsigned int idx, size_t *size_r)
 {
-       struct mysql_result *result = (struct mysql_result *)_result;
+       struct mysql_result *result =
+               container_of(_result, struct mysql_result, api);
        unsigned long *lengths;
 
        lengths = mysql_fetch_lengths(result->result);
@@ -571,14 +578,15 @@ driver_mysql_result_find_field_value(struct sql_result *result,
 static const char *const *
 driver_mysql_result_get_values(struct sql_result *_result)
 {
-       struct mysql_result *result = (struct mysql_result *)_result;
+       struct mysql_result *result =
+               container_of(_result, struct mysql_result, api);
 
        return (const char *const *)result->row;
 }
 
 static const char *driver_mysql_result_get_error(struct sql_result *_result)
 {
-       struct mysql_db *db = (struct mysql_db *)_result->db;
+       struct mysql_db *db = container_of(_result->db, struct mysql_db, api);
        const char *errstr;
        unsigned int idle_time;
        int err;
@@ -635,7 +643,8 @@ transaction_send_query(struct mysql_transaction_context *ctx, const char *query,
                ctx->failed = TRUE;
                ret = -1;
        } else if (affected_rows_r != NULL) {
-               struct mysql_result *result = (struct mysql_result *)_result;
+               struct mysql_result *result =
+                       container_of(_result, struct mysql_result, api);
 
                i_assert(result->affected_rows != (my_ulonglong)-1);
                *affected_rows_r = result->affected_rows;
@@ -675,8 +684,8 @@ driver_mysql_transaction_commit_s(struct sql_transaction_context *_ctx,
                                  const char **error_r)
 {
        struct mysql_transaction_context *ctx =
-               (struct mysql_transaction_context *)_ctx;
-       struct mysql_db *db = (struct mysql_db *)_ctx->db;
+               container_of(_ctx, struct mysql_transaction_context, ctx);
+       struct mysql_db *db = container_of(_ctx->db, struct mysql_db, api);
        int ret = 1;
 
        *error_r = NULL;
@@ -705,7 +714,7 @@ static void
 driver_mysql_transaction_rollback(struct sql_transaction_context *_ctx)
 {
        struct mysql_transaction_context *ctx =
-               (struct mysql_transaction_context *)_ctx;
+               container_of(_ctx, struct mysql_transaction_context, ctx);
 
        if (ctx->failed) {
                bool rolledback = FALSE;
@@ -744,7 +753,7 @@ driver_mysql_update(struct sql_transaction_context *_ctx, const char *query,
                    unsigned int *affected_rows)
 {
        struct mysql_transaction_context *ctx =
-               (struct mysql_transaction_context *)_ctx;
+               container_of(_ctx, struct mysql_transaction_context, ctx);
 
        sql_transaction_add_query(&ctx->ctx, ctx->query_pool,
                                  query, affected_rows);