static int
maildir_copy_hardlink(struct mail_save_context *ctx, struct mail *mail)
{
- struct maildir_mailbox *dest_mbox =
- (struct maildir_mailbox *)ctx->transaction->box;
+ struct maildir_mailbox *dest_mbox = MAILDIR_MAILBOX(ctx->transaction->box);
struct maildir_mailbox *src_mbox;
struct maildir_filename *mf;
struct hardlink_ctx do_ctx;
enum mail_lookup_abort old_abort;
if (strcmp(mail->box->storage->name, MAILDIR_STORAGE_NAME) == 0)
- src_mbox = (struct maildir_mailbox *)mail->box;
+ src_mbox = MAILDIR_MAILBOX(mail->box);
else if (strcmp(mail->box->storage->name, "raw") == 0) {
/* lda uses raw format */
src_mbox = NULL;
int maildir_copy(struct mail_save_context *ctx, struct mail *mail)
{
struct mailbox_transaction_context *_t = ctx->transaction;
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)_t->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(_t->box);
int ret;
i_assert((_t->flags & MAILBOX_TRANSACTION_FLAG_EXTERNAL) != 0);
static int maildir_mail_stat(struct mail *mail, struct stat *st_r)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(mail->box);
struct index_mail *imail = (struct index_mail *)mail;
const char *path;
int fd, ret;
uoff_t *size_r)
{
struct mail *_mail = &mail->mail.mail;
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)_mail->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(_mail->box);
enum maildir_uidlist_rec_ext_key key;
const char *path, *fname, *value;
bool vsize)
{
struct mailbox *box = mail->mail.mail.box;
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
enum mail_fetch_field field;
uoff_t size;
int pop3_state;
static int maildir_mail_get_virtual_size(struct mail *_mail, uoff_t *size_r)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)_mail->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(_mail->box);
struct index_mail *mail = (struct index_mail *)_mail;
struct index_mail_data *data = &mail->data;
struct message_size hdr_size, body_size;
static int maildir_mail_get_physical_size(struct mail *_mail, uoff_t *size_r)
{
struct index_mail *mail = (struct index_mail *)_mail;
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)_mail->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(_mail->box);
struct index_mail_data *data = &mail->data;
struct stat st;
struct message_size hdr_size, body_size;
const char **value_r)
{
struct index_mail *mail = (struct index_mail *)_mail;
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)_mail->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(_mail->box);
const char *path, *fname = NULL, *end, *guid, *uidl, *order;
struct stat st;
struct istream **stream_r)
{
struct index_mail *mail = (struct index_mail *)_mail;
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)_mail->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(_mail->box);
struct index_mail_data *data = &mail->data;
bool deleted;
static void maildir_update_pop3_uidl(struct mail *_mail, const char *uidl)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)_mail->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(_mail->box);
const char *fname;
if (maildir_mail_get_special(_mail, MAIL_FETCH_STORAGE_ID,
static void maildir_mail_remove_sizes_from_uidlist(struct mail *mail)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(mail->box);
if (maildir_uidlist_lookup_ext(mbox->uidlist, mail->uid,
MAILDIR_UIDLIST_REC_EXT_VSIZE) != NULL) {
maildir_mail_remove_sizes_from_filename(struct mail *mail,
enum mail_fetch_field field)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(mail->box);
struct mail_private *pmail = (struct mail_private *)mail;
enum maildir_uidlist_rec_flag flags;
const char *fname;
bool locked_uidlist_refresh:1;
};
+#define MAILDIR_SAVECTX(s) container_of(s, struct maildir_save_context, ctx)
+
static int maildir_file_move(struct maildir_save_context *ctx,
struct maildir_filename *mf, const char *destname,
bool newdir)
static struct mail_save_context *
maildir_save_transaction_init(struct mailbox_transaction_context *t)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)t->box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(t->box);
struct maildir_save_context *ctx;
const char *path;
pool_t pool;
maildir_save_add(struct mail_save_context *_ctx, const char *tmp_fname,
struct mail *src_mail)
{
- struct maildir_save_context *ctx = (struct maildir_save_context *)_ctx;
+ struct maildir_save_context *ctx = MAILDIR_SAVECTX(_ctx);
struct mail_save_data *mdata = &_ctx->data;
struct maildir_filename *mf;
struct istream *input;
struct maildir_filename *mf,
const char *basename)
{
- struct maildir_save_context *ctx = (struct maildir_save_context *)_ctx;
+ struct maildir_save_context *ctx = MAILDIR_SAVECTX(_ctx);
mf->preserve_filename = TRUE;
mf->dest_basename = p_strdup(ctx->pool, basename);
static struct maildir_filename *
maildir_save_get_mf(struct mailbox_transaction_context *t, uint32_t seq)
{
- struct maildir_save_context *save_ctx =
- (struct maildir_save_context *)t->save_ctx;
+ struct maildir_save_context *save_ctx = MAILDIR_SAVECTX(t->save_ctx);
struct maildir_filename *mf;
i_assert(seq >= save_ctx->first_seq);
const char *maildir_save_file_get_path(struct mailbox_transaction_context *t,
uint32_t seq)
{
- struct maildir_save_context *save_ctx =
- (struct maildir_save_context *)t->save_ctx;
+ struct maildir_save_context *save_ctx = MAILDIR_SAVECTX(t->save_ctx);
struct maildir_filename *mf = maildir_save_get_mf(t, seq);
return maildir_mf_get_path(save_ctx, mf);
int maildir_save_continue(struct mail_save_context *_ctx)
{
- struct maildir_save_context *ctx = (struct maildir_save_context *)_ctx;
+ struct maildir_save_context *ctx = MAILDIR_SAVECTX(_ctx);
if (ctx->failed)
return -1;
static int maildir_save_finish_real(struct mail_save_context *_ctx)
{
- struct maildir_save_context *ctx = (struct maildir_save_context *)_ctx;
+ struct maildir_save_context *ctx = MAILDIR_SAVECTX(_ctx);
struct mail_storage *storage = &ctx->mbox->storage->storage;
const char *path, *output_errstr;
off_t real_size;
void maildir_save_cancel(struct mail_save_context *_ctx)
{
- struct maildir_save_context *ctx = (struct maildir_save_context *)_ctx;
+ struct maildir_save_context *ctx = MAILDIR_SAVECTX(_ctx);
ctx->failed = TRUE;
(void)maildir_save_finish(_ctx);
void maildir_transaction_save_commit_post(struct mail_save_context *_ctx,
struct mail_index_transaction_commit_result *result ATTR_UNUSED)
{
- struct maildir_save_context *ctx = (struct maildir_save_context *)_ctx;
+ struct maildir_save_context *ctx = MAILDIR_SAVECTX(_ctx);
_ctx->transaction = NULL; /* transaction is already freed */
void maildir_transaction_save_rollback(struct mail_save_context *_ctx)
{
- struct maildir_save_context *ctx = (struct maildir_save_context *)_ctx;
+ struct maildir_save_context *ctx = MAILDIR_SAVECTX(_ctx);
i_assert(_ctx->data.output == NULL);
maildir_storage_create(struct mail_storage *_storage, struct mail_namespace *ns,
const char **error_r ATTR_UNUSED)
{
- struct maildir_storage *storage = (struct maildir_storage *)_storage;
+ struct maildir_storage *storage = MAILDIR_STORAGE(_storage);
struct mailbox_list *list = ns->list;
const char *dir;
index_storage_mailbox_alloc(&mbox->box, vname, flags, MAIL_INDEX_PREFIX);
- mbox->storage = (struct maildir_storage *)storage;
+ mbox->storage = MAILDIR_STORAGE(storage);
return &mbox->box;
}
static int maildir_mailbox_open_existing(struct mailbox *box)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
mbox->uidlist = maildir_uidlist_init(mbox);
mbox->keywords = maildir_keywords_init(mbox);
static bool maildir_storage_is_readonly(struct mailbox *box)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
if (index_storage_is_readonly(box))
return TRUE;
static int
maildir_mailbox_update(struct mailbox *box, const struct mailbox_update *update)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
struct maildir_uidlist *uidlist;
bool locked = FALSE;
int ret = 0;
enum mailbox_metadata_items items,
struct mailbox_metadata *metadata_r)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
if (index_mailbox_get_metadata(box, items, metadata_r) < 0)
return -1;
static void maildir_mailbox_close(struct mailbox *box)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
if (mbox->keep_lock_to != NULL) {
maildir_uidlist_unlock(mbox->uidlist);
static void maildir_notify_changes(struct mailbox *box)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
const char *box_path = mailbox_get_path(box);
if (box->notify_callback == NULL)
static enum mail_flags maildir_get_private_flags_mask(struct mailbox *box)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
const char *path, *path2;
struct stat st;
bool sync_uidlist_refreshed:1;
};
+#define MAILDIR_STORAGE(s) container_of(s, struct maildir_storage, storage)
+#define MAILDIR_MAILBOX(s) container_of(s, struct maildir_mailbox, box)
+
extern struct mail_vfuncs maildir_mail_vfuncs;
/* Return -1 = error, 0 = file not found, 1 = ok */
struct mail_index_view *list_view,
uint32_t seq, bool quick)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
const struct maildir_list_index_record *rec;
const void *data;
const char *root_dir, *new_dir, *cur_dir;
struct mail_index_transaction *trans,
uint32_t seq)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
struct mail_index_view *list_view;
const struct maildir_index_header *mhdr = &mbox->maildir_hdr;
const struct maildir_list_index_record *old_rec;
struct mailbox_sync_context *
maildir_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags)
{
- struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+ struct maildir_mailbox *mbox = MAILDIR_MAILBOX(box);
bool lost_files, force_resync;
int ret = 0;