From: Marco Bettini Date: Thu, 6 Apr 2023 14:55:41 +0000 (+0000) Subject: virtual: Use container_of() X-Git-Tag: 2.4.0~2793 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9f2c0deae84ccad39b1be836e8209bcbf46a9051;p=thirdparty%2Fdovecot%2Fcore.git virtual: Use container_of() --- diff --git a/src/plugins/virtual/virtual-list.c b/src/plugins/virtual/virtual-list.c index 71576e4ad4..333d01bb2d 100644 --- a/src/plugins/virtual/virtual-list.c +++ b/src/plugins/virtual/virtual-list.c @@ -34,7 +34,7 @@ virtual_get_storage(struct mailbox_list **list, const char **vname, struct mailbox *vbox = mailbox_alloc(*list, *vname, flags & ENUM_NEGATE(MAILBOX_FLAG_SAVEONLY)); i_assert(strcmp(vbox->storage->name, VIRTUAL_STORAGE_NAME) == 0); - struct virtual_mailbox *mbox = (struct virtual_mailbox *)vbox; + struct virtual_mailbox *mbox = container_of(vbox, struct virtual_mailbox, box); const char *path; int ret = mailbox_get_path_to(vbox, MAILBOX_LIST_PATH_TYPE_MAILBOX, &path); if (ret > 0) diff --git a/src/plugins/virtual/virtual-mail.c b/src/plugins/virtual/virtual-mail.c index fd8303fc58..7afb932d4a 100644 --- a/src/plugins/virtual/virtual-mail.c +++ b/src/plugins/virtual/virtual-mail.c @@ -6,6 +6,13 @@ #include "virtual-storage.h" #include "virtual-transaction.h" +#define virtual_mail_container_of(mail) \ + container_of( \ + container_of( \ + container_of(mail, struct mail_private, mail), \ + struct index_mail, mail), \ + struct virtual_mail, imail) + struct virtual_mail { struct index_mail imail; @@ -33,7 +40,8 @@ virtual_mail_alloc(struct mailbox_transaction_context *t, enum mail_fetch_field wanted_fields, struct mailbox_header_lookup_ctx *wanted_headers) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)t->box; + struct virtual_mailbox *mbox = + container_of(t->box, struct virtual_mailbox, box); struct virtual_mail *vmail; pool_t mail_pool, data_pool; @@ -55,7 +63,7 @@ virtual_mail_alloc(struct mailbox_transaction_context *t, static void virtual_mail_close(struct mail *mail) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail **mails; unsigned int i, count; @@ -66,7 +74,8 @@ static void virtual_mail_close(struct mail *mail) mails = array_get_modifiable(&vmail->backend_mails, &count); for (i = 0; i < count; i++) { - struct mail_private *p = (struct mail_private *)mails[i]; + struct mail_private *p = + container_of(mails[i], struct mail_private, mail); if (vmail->imail.freeing) mail_free(&mails[i]); @@ -98,7 +107,8 @@ static int backend_mail_get(struct virtual_mail *vmail, struct mail **backend_mail_r) { struct mail *mail = &vmail->imail.mail.mail; - struct virtual_mailbox *mbox = (struct virtual_mailbox *)mail->box; + struct virtual_mailbox *mbox = + container_of(mail->box, struct virtual_mailbox, box); struct virtual_backend_box *bbox; *backend_mail_r = NULL; @@ -145,7 +155,7 @@ struct mail * virtual_mail_set_backend_mail(struct mail *mail, struct virtual_backend_box *bbox) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail_private *backend_pmail; struct mailbox_transaction_context *backend_trans; struct mailbox_header_lookup_ctx *backend_headers; @@ -170,7 +180,7 @@ virtual_mail_set_backend_mail(struct mail *mail, void virtual_mail_set_unattached_backend_mail(struct mail *mail, struct mail *backend_mail) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail_private *backend_pmail; vmail->cur_backend_mail = backend_mail; @@ -181,8 +191,9 @@ void virtual_mail_set_unattached_backend_mail(struct mail *mail, static void virtual_mail_set_seq(struct mail *mail, uint32_t seq, bool saving) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; - struct virtual_mailbox *mbox = (struct virtual_mailbox *)mail->box; + struct virtual_mail *vmail = virtual_mail_container_of(mail); + struct virtual_mailbox *mbox = + container_of(mail->box, struct virtual_mailbox, box); const void *data; i_assert(!saving); @@ -209,7 +220,7 @@ static bool virtual_mail_set_uid(struct mail *mail, uint32_t uid) static void virtual_mail_set_uid_cache_updates(struct mail *mail, bool set) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; struct mail_private *p; @@ -221,7 +232,7 @@ static void virtual_mail_set_uid_cache_updates(struct mail *mail, bool set) static bool virtual_mail_prefetch(struct mail *mail) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; struct mail_private *p; @@ -233,7 +244,7 @@ static bool virtual_mail_prefetch(struct mail *mail) static int virtual_mail_precache(struct mail *mail) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; struct mail_private *p; @@ -248,7 +259,7 @@ virtual_mail_add_temp_wanted_fields(struct mail *mail, enum mail_fetch_field fields, struct mailbox_header_lookup_ctx *headers) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; struct mailbox_header_lookup_ctx *backend_headers, *new_headers; @@ -278,7 +289,7 @@ virtual_mail_add_temp_wanted_fields(struct mail *mail, static int virtual_mail_get_parts(struct mail *mail, struct message_part **parts_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; if (backend_mail_get(vmail, &backend_mail) < 0) @@ -293,7 +304,7 @@ virtual_mail_get_parts(struct mail *mail, struct message_part **parts_r) static int virtual_mail_get_date(struct mail *mail, time_t *date_r, int *timezone_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; int tz; @@ -311,7 +322,7 @@ virtual_mail_get_date(struct mail *mail, time_t *date_r, int *timezone_r) static int virtual_mail_get_received_date(struct mail *mail, time_t *date_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; if (backend_mail_get(vmail, &backend_mail) < 0) @@ -325,7 +336,7 @@ static int virtual_mail_get_received_date(struct mail *mail, time_t *date_r) static int virtual_mail_get_save_date(struct mail *mail, time_t *date_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; int ret; @@ -339,7 +350,7 @@ static int virtual_mail_get_save_date(struct mail *mail, time_t *date_r) static int virtual_mail_get_virtual_mail_size(struct mail *mail, uoff_t *size_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; if (backend_mail_get(vmail, &backend_mail) < 0) @@ -353,7 +364,7 @@ static int virtual_mail_get_virtual_mail_size(struct mail *mail, uoff_t *size_r) static int virtual_mail_get_physical_size(struct mail *mail, uoff_t *size_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; if (backend_mail_get(vmail, &backend_mail) < 0) @@ -369,7 +380,7 @@ static int virtual_mail_get_first_header(struct mail *mail, const char *field, bool decode_to_utf8, const char **value_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; struct mail_private *p; int ret; @@ -390,7 +401,7 @@ static int virtual_mail_get_headers(struct mail *mail, const char *field, bool decode_to_utf8, const char *const **value_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; struct mail_private *p; @@ -409,7 +420,7 @@ virtual_mail_get_header_stream(struct mail *mail, struct mailbox_header_lookup_ctx *headers, struct istream **stream_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; struct mailbox_header_lookup_ctx *backend_headers; int ret; @@ -434,8 +445,9 @@ virtual_mail_get_stream(struct mail *mail, bool get_body, struct message_size *body_size, struct istream **stream_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; - struct mail_private *vp = (struct mail_private *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); + struct mail_private *vp = + container_of(mail, struct mail_private, mail); struct mail *backend_mail; const char *reason = t_strdup_printf("virtual mailbox %s: Opened mail UID=%u: %s", mailbox_get_vname(mail->box), mail->uid, vp->get_stream_reason); @@ -466,13 +478,14 @@ virtual_mail_get_binary_stream(struct mail *mail, unsigned int *lines_r, bool *binary_r, struct istream **stream_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; if (backend_mail_get(vmail, &backend_mail) < 0) return -1; - struct mail_private *p = (struct mail_private *)backend_mail; + struct mail_private *p = + container_of(backend_mail, struct mail_private, mail); if (p->v.get_binary_stream(backend_mail, part, include_hdr, size_r, lines_r, binary_r, stream_r) < 0) { virtual_box_copy_error(mail->box, backend_mail->box); @@ -485,7 +498,7 @@ static int virtual_mail_get_special(struct mail *mail, enum mail_fetch_field field, const char **value_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; if (backend_mail_get(vmail, &backend_mail) < 0) @@ -500,7 +513,7 @@ virtual_mail_get_special(struct mail *mail, enum mail_fetch_field field, static int virtual_mail_get_backend_mail(struct mail *mail, struct mail **real_mail_r) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; if (backend_mail_get(vmail, &backend_mail) < 0) @@ -513,7 +526,7 @@ static int virtual_mail_get_backend_mail(struct mail *mail, static void virtual_mail_update_pop3_uidl(struct mail *mail, const char *uidl) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; if (backend_mail_get(vmail, &backend_mail) < 0) @@ -523,7 +536,7 @@ static void virtual_mail_update_pop3_uidl(struct mail *mail, const char *uidl) static void virtual_mail_expunge(struct mail *mail) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; if (backend_mail_get(vmail, &backend_mail) < 0) @@ -536,7 +549,7 @@ virtual_mail_set_cache_corrupted(struct mail *mail, enum mail_fetch_field field, const char *reason) { - struct virtual_mail *vmail = (struct virtual_mail *)mail; + struct virtual_mail *vmail = virtual_mail_container_of(mail); struct mail *backend_mail; if (backend_mail_get(vmail, &backend_mail) < 0) diff --git a/src/plugins/virtual/virtual-save.c b/src/plugins/virtual/virtual-save.c index 9499cd3098..353f22c0a0 100644 --- a/src/plugins/virtual/virtual-save.c +++ b/src/plugins/virtual/virtual-save.c @@ -17,7 +17,7 @@ struct mail_save_context * virtual_save_alloc(struct mailbox_transaction_context *_t) { struct virtual_transaction_context *t = - (struct virtual_transaction_context *)_t; + container_of(_t, struct virtual_transaction_context, t); struct virtual_mailbox *mbox = (struct virtual_mailbox *)_t->box; struct mailbox_transaction_context *backend_trans; struct virtual_save_context *ctx; diff --git a/src/plugins/virtual/virtual-search.c b/src/plugins/virtual/virtual-search.c index ee04a74053..6393f6a2a7 100644 --- a/src/plugins/virtual/virtual-search.c +++ b/src/plugins/virtual/virtual-search.c @@ -65,7 +65,7 @@ static void virtual_search_get_records(struct mail_search_context *ctx, struct virtual_search_context *vctx) { struct virtual_mailbox *mbox = - (struct virtual_mailbox *)ctx->transaction->box; + container_of(ctx->transaction->box, struct virtual_mailbox, box); const struct virtual_mail_index_record *vrec; struct virtual_search_record srec; const void *data; @@ -135,7 +135,8 @@ bool virtual_search_next_nonblock(struct mail_search_context *ctx, struct mail **mail_r, bool *tryagain_r) { struct virtual_search_context *vctx = VIRTUAL_CONTEXT_REQUIRE(ctx); - struct index_search_context *ictx = (struct index_search_context *)ctx; + struct index_search_context *ictx = + container_of(ctx, struct index_search_context, mail_ctx); uint32_t seq; switch (vctx->search_state) { diff --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index 2c7cc321b4..4a5314e447 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -87,7 +87,8 @@ virtual_storage_create(struct mail_storage *_storage, struct mail_namespace *ns ATTR_UNUSED, const char **error_r) { - struct virtual_storage *storage = (struct virtual_storage *)_storage; + struct virtual_storage *storage = + container_of(_storage, struct virtual_storage, storage); const char *value; value = mail_user_plugin_getenv(_storage->user, "virtual_max_open_mailboxes"); @@ -258,7 +259,8 @@ static struct mailbox * virtual_mailbox_alloc(struct mail_storage *_storage, struct mailbox_list *list, const char *vname, enum mailbox_flags flags) { - struct virtual_storage *storage = (struct virtual_storage *)_storage; + struct virtual_storage *storage = + container_of(_storage, struct virtual_storage, storage); struct virtual_mailbox *mbox; pool_t pool; @@ -481,7 +483,8 @@ virtual_mailbox_exists(struct mailbox *box, bool auto_boxes ATTR_UNUSED, static int virtual_mailbox_open(struct mailbox *box) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); bool broken; int ret = 0; @@ -543,7 +546,8 @@ static int virtual_mailbox_open(struct mailbox *box) static void virtual_mailbox_close(struct mailbox *box) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); virtual_mailbox_close_internal(mbox); index_storage_mailbox_close(box); @@ -551,7 +555,8 @@ static void virtual_mailbox_close(struct mailbox *box) static void virtual_mailbox_free(struct mailbox *box) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); virtual_config_free(mbox); index_storage_mailbox_free(box); @@ -623,7 +628,8 @@ virtual_storage_get_status(struct mailbox *box, enum mailbox_status_items items, struct mailbox_status *status_r) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); if ((items & STATUS_LAST_CACHED_SEQ) != 0) items |= STATUS_MESSAGES; @@ -658,7 +664,8 @@ virtual_mailbox_get_metadata(struct mailbox *box, enum mailbox_metadata_items items, struct mailbox_metadata *metadata_r) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); if (index_mailbox_get_metadata(box, items, metadata_r) < 0) return -1; i_assert(box->opened); @@ -696,7 +703,8 @@ static int virtual_notify_start(struct virtual_backend_box *bbox) static void virtual_notify_changes(struct mailbox *box) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); struct virtual_backend_box **bboxp; if (box->notify_callback == NULL) { @@ -756,7 +764,8 @@ virtual_get_virtual_uids(struct mailbox *box, const ARRAY_TYPE(seq_range) *backend_uids, ARRAY_TYPE(seq_range) *virtual_uids_r) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); struct virtual_backend_box *bbox; const struct virtual_backend_uidmap *uids; ARRAY_TYPE(seq_range) uid_range; @@ -798,7 +807,8 @@ virtual_get_virtual_uid_map(struct mailbox *box, const ARRAY_TYPE(seq_range) *backend_uids, ARRAY_TYPE(uint32_t) *virtual_uids_r) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); struct virtual_backend_box *bbox; const struct virtual_backend_uidmap *uids; struct seq_range_iter iter; @@ -836,7 +846,8 @@ virtual_get_virtual_backend_boxes(struct mailbox *box, ARRAY_TYPE(mailboxes) *mailboxes, bool only_with_msgs) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); struct virtual_backend_box *const *bboxes; unsigned int i, count; @@ -849,7 +860,8 @@ virtual_get_virtual_backend_boxes(struct mailbox *box, static bool virtual_is_inconsistent(struct mailbox *box) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); if (mbox->inconsistent) return TRUE; diff --git a/src/plugins/virtual/virtual-sync.c b/src/plugins/virtual/virtual-sync.c index 2c654f7a3f..c9799501c3 100644 --- a/src/plugins/virtual/virtual-sync.c +++ b/src/plugins/virtual/virtual-sync.c @@ -1769,7 +1769,7 @@ virtual_sync_apply_existing_expunges(struct virtual_mailbox *mbox, struct mailbox_sync_context *sync_ctx) { struct index_mailbox_sync_context *isync_ctx = - (struct index_mailbox_sync_context *)sync_ctx; + container_of(sync_ctx, struct index_mailbox_sync_context, ctx); struct virtual_backend_box *bbox = NULL; struct seq_range_iter iter; const struct virtual_mail_index_record *vrec; @@ -1971,7 +1971,8 @@ static int virtual_sync(struct virtual_mailbox *mbox, struct mailbox_sync_context * virtual_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); struct mailbox_sync_context *sync_ctx; int ret = 0; diff --git a/src/plugins/virtual/virtual-transaction.c b/src/plugins/virtual/virtual-transaction.c index 53ac0a8ee4..319d653d9c 100644 --- a/src/plugins/virtual/virtual-transaction.c +++ b/src/plugins/virtual/virtual-transaction.c @@ -10,7 +10,7 @@ virtual_transaction_get(struct mailbox_transaction_context *trans, struct mailbox *backend_box) { struct virtual_transaction_context *vt = - (struct virtual_transaction_context *)trans; + container_of(trans, struct virtual_transaction_context, t); struct mailbox_transaction_context *const *bt, *new_bt; unsigned int i, count; @@ -30,7 +30,8 @@ virtual_transaction_begin(struct mailbox *box, enum mailbox_transaction_flags flags, const char *reason) { - struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); struct virtual_transaction_context *vt; vt = i_new(struct virtual_transaction_context, 1); @@ -44,7 +45,7 @@ int virtual_transaction_commit(struct mailbox_transaction_context *t, struct mail_transaction_commit_changes *changes_r) { struct virtual_transaction_context *vt = - (struct virtual_transaction_context *)t; + container_of(t, struct virtual_transaction_context, t); struct mailbox_transaction_context **bt; unsigned int i, count; int ret = 0; @@ -69,7 +70,7 @@ int virtual_transaction_commit(struct mailbox_transaction_context *t, void virtual_transaction_rollback(struct mailbox_transaction_context *t) { struct virtual_transaction_context *vt = - (struct virtual_transaction_context *)t; + container_of(t, struct virtual_transaction_context, t); struct mailbox_transaction_context **bt; unsigned int i, count;