index_storage_mailbox_alloc(&mbox->box, vname, flags, MAIL_INDEX_PREFIX);
- mbox->storage = (struct mdbox_storage *)storage;
+ mbox->storage = MDBOX_STORAGE(storage);
return &mbox->box;
}
const struct mailbox_update *update,
struct mail_index_transaction *trans)
{
- struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(box);
struct mail_index_transaction *new_trans = NULL;
uint32_t uid_validity = ioloop_time;
uint32_t uid_next = 1;
mdbox_deleted_storage_sync_init(struct mailbox *box,
enum mailbox_sync_flags flags)
{
- struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(box);
enum mdbox_sync_flags mdbox_sync_flags = 0;
int ret = 0;
static void dbox_mail_set_expunged(struct dbox_mail *mail, uint32_t map_uid)
{
struct mail *_mail = &mail->imail.mail.mail;
- struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)_mail->box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(_mail->box);
mail_index_refresh(_mail->box->index);
if (mail_index_is_expunged(_mail->transaction->view, _mail->seq)) {
static int dbox_mail_open_init(struct dbox_mail *mail, uint32_t map_uid)
{
- struct mdbox_mailbox *mbox =
- (struct mdbox_mailbox *)mail->imail.mail.mail.box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(mail->imail.mail.mail.box);
uint32_t file_id;
int ret;
struct dbox_file **file_r)
{
struct mail *_mail = &mail->imail.mail.mail;
- struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)_mail->box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(_mail->box);
uint32_t prev_file_id = 0, map_uid = 0;
bool deleted;
static int mdbox_mail_get_save_date(struct mail *mail, time_t *date_r)
{
- struct mdbox_mailbox *mbox =
- (struct mdbox_mailbox *)mail->transaction->box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(mail->transaction->box);
const struct mdbox_mail_index_record *dbox_rec;
const void *data;
const char **value_r)
{
struct dbox_mail *mail = DBOX_MAIL(_mail);
- struct mdbox_mailbox *mbox =
- (struct mdbox_mailbox *)_mail->transaction->box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(_mail->transaction->box);
struct mdbox_map_mail_index_record rec;
uint32_t map_uid;
uint16_t refcount;
void mdbox_purge_alt_flag_change(struct mail *mail, bool move_to_alt)
{
- struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)mail->box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(mail->box);
ARRAY_TYPE(uint32_t) *dest;
uint32_t map_uid;
ARRAY(struct dbox_save_mail) mails;
};
+#define MDBOX_SAVECTX(s) container_of(DBOX_SAVECTX(s), struct mdbox_save_context, ctx)
+
static struct dbox_file *
mdbox_copy_file_get_file(struct mailbox_transaction_context *t,
uint32_t seq, uoff_t *offset_r)
{
- struct mdbox_save_context *ctx =
- (struct mdbox_save_context *)t->save_ctx;
+ struct mdbox_save_context *ctx = MDBOX_SAVECTX(t->save_ctx);
const struct mdbox_mail_index_record *rec;
const void *data;
uint32_t file_id;
mdbox_save_file_get_file(struct mailbox_transaction_context *t,
uint32_t seq, uoff_t *offset_r)
{
- struct mdbox_save_context *ctx =
- (struct mdbox_save_context *)t->save_ctx;
+ struct mdbox_save_context *ctx = MDBOX_SAVECTX(t->save_ctx);
const struct dbox_save_mail *mails, *mail;
unsigned int count;
struct mail_save_context *
mdbox_save_alloc(struct mailbox_transaction_context *t)
{
- struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)t->box;
- struct mdbox_save_context *ctx =
- (struct mdbox_save_context *)t->save_ctx;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(t->box);
+ struct mdbox_save_context *ctx = MDBOX_SAVECTX(t->save_ctx);
i_assert((t->flags & MAILBOX_TRANSACTION_FLAG_EXTERNAL) != 0);
int mdbox_save_begin(struct mail_save_context *_ctx, struct istream *input)
{
- struct mdbox_save_context *ctx = (struct mdbox_save_context *)_ctx;
+ struct mdbox_save_context *ctx = MDBOX_SAVECTX(_ctx);
struct dbox_save_mail *save_mail;
uoff_t mail_size, append_offset;
int mdbox_transaction_save_commit_pre(struct mail_save_context *_ctx)
{
- struct mdbox_save_context *ctx = (struct mdbox_save_context *)_ctx;
+ struct mdbox_save_context *ctx = MDBOX_SAVECTX(_ctx);
struct mailbox_transaction_context *_t = _ctx->transaction;
const struct mail_index_header *hdr;
uint32_t first_map_uid, last_map_uid;
void mdbox_transaction_save_commit_post(struct mail_save_context *_ctx,
struct mail_index_transaction_commit_result *result)
{
- struct mdbox_save_context *ctx = (struct mdbox_save_context *)_ctx;
+ struct mdbox_save_context *ctx = MDBOX_SAVECTX(_ctx);
struct mail_storage *storage = _ctx->transaction->box->storage;
_ctx->transaction = NULL; /* transaction is already freed */
void mdbox_transaction_save_rollback(struct mail_save_context *_ctx)
{
- struct mdbox_save_context *ctx = (struct mdbox_save_context *)_ctx;
+ struct mdbox_save_context *ctx = MDBOX_SAVECTX(_ctx);
if (!ctx->ctx.finished)
mdbox_save_cancel(&ctx->ctx.ctx);
int mdbox_copy(struct mail_save_context *_ctx, struct mail *mail)
{
- struct mdbox_save_context *ctx = (struct mdbox_save_context *)_ctx;
+ struct mdbox_save_context *ctx = MDBOX_SAVECTX(_ctx);
struct dbox_save_mail *save_mail;
struct mdbox_mailbox *src_mbox;
struct mdbox_mail_index_record rec;
if (mail->box->storage != _ctx->transaction->box->storage ||
_ctx->transaction->box->disable_reflink_copy_to)
return mail_storage_copy(_ctx, mail);
- src_mbox = (struct mdbox_mailbox *)mail->box;
+ src_mbox = MDBOX_MAILBOX(mail->box);
i_zero(&rec);
rec.save_date = ioloop_time;
/* non-temporary error, ignore */
return 0;
}
- mbox = (struct mdbox_mailbox *)box;
+ mbox = MDBOX_MAILBOX(box);
ret = mail_index_sync_begin(box->index, &sync_ctx, &view, &trans,
MAIL_INDEX_SYNC_FLAG_AVOID_FLAG_UPDATES);
return -1;
}
}
- mbox = (struct mdbox_mailbox *)box;
+ mbox = MDBOX_MAILBOX(box);
/* switch the mailbox cache if necessary */
if (box != ctx->prev_msg.box && ctx->prev_msg.box != NULL) {
int mdbox_storage_create(struct mail_storage *_storage,
struct mail_namespace *ns, const char **error_r)
{
- struct mdbox_storage *storage = (struct mdbox_storage *)_storage;
+ struct mdbox_storage *storage = MDBOX_STORAGE(_storage);
const char *dir;
storage->set = mail_namespace_get_driver_settings(ns, _storage);
void mdbox_storage_destroy(struct mail_storage *_storage)
{
- struct mdbox_storage *storage = (struct mdbox_storage *)_storage;
+ struct mdbox_storage *storage = MDBOX_STORAGE(_storage);
mdbox_files_free(storage);
mdbox_map_deinit(&storage->map);
ibox->index_flags |= MAIL_INDEX_OPEN_FLAG_KEEP_BACKUPS |
MAIL_INDEX_OPEN_FLAG_NEVER_IN_MEMORY;
- mbox->storage = (struct mdbox_storage *)storage;
+ mbox->storage = MDBOX_STORAGE(storage);
return &mbox->box;
}
int mdbox_mailbox_open(struct mailbox *box)
{
- struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(box);
time_t path_ctime;
if (dbox_mailbox_check_existence(box, &path_ctime) < 0)
static void mdbox_mailbox_close(struct mailbox *box)
{
- struct mdbox_storage *mstorage = (struct mdbox_storage *)box->storage;
+ struct mdbox_storage *mstorage = MDBOX_STORAGE(box->storage);
if (mstorage->corrupted && !mstorage->rebuilding_storage)
(void)mdbox_storage_rebuild(mstorage);
const struct mailbox_update *update,
struct mail_index_transaction *trans)
{
- struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(box);
int ret;
mbox->creating = TRUE;
void mdbox_set_mailbox_corrupted(struct mailbox *box)
{
- struct mdbox_storage *mstorage = (struct mdbox_storage *)box->storage;
+ struct mdbox_storage *mstorage = MDBOX_STORAGE(box->storage);
mdbox_storage_set_corrupted(mstorage);
}
void mdbox_set_file_corrupted(struct dbox_file *file)
{
- struct mdbox_storage *mstorage = (struct mdbox_storage *)file->storage;
+ struct mdbox_storage *mstorage = MDBOX_DBOX_STORAGE(file->storage);
mdbox_storage_set_corrupted(mstorage);
}
enum mailbox_metadata_items items,
struct mailbox_metadata *metadata_r)
{
- struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(box);
if (index_mailbox_get_metadata(box, items, metadata_r) < 0)
return -1;
bool creating:1;
};
+#define MDBOX_DBOX_STORAGE(s) container_of(s, struct mdbox_storage, storage)
+#define MDBOX_STORAGE(s) MDBOX_DBOX_STORAGE(DBOX_STORAGE(s))
+#define MDBOX_MAILBOX(s) container_of(s, struct mdbox_mailbox, box)
+
extern struct dbox_storage_vfuncs mdbox_dbox_storage_vfuncs;
extern struct mail_vfuncs mdbox_mail_vfuncs;
struct mailbox_sync_context *
mdbox_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags)
{
- struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)box;
+ struct mdbox_mailbox *mbox = MDBOX_MAILBOX(box);
enum mdbox_sync_flags mdbox_sync_flags = 0;
int ret = 0;