static struct mailbox * mdbox_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list, const char *vname, enum mailbox_flags flags) { struct mdbox_mailbox *mbox; struct index_mailbox_context *ibox; pool_t pool; /* dbox can't work without index files */ flags &= ~MAILBOX_FLAG_NO_INDEX_FILES; pool = pool_alloconly_create("mdbox mailbox", 1024*3); mbox = p_new(pool, struct mdbox_mailbox, 1); mbox->box = mdbox_mailbox; mbox->box.pool = pool; mbox->box.storage = storage; mbox->box.list = list; mbox->box.mail_vfuncs = &mdbox_mail_vfuncs; index_storage_mailbox_alloc(&mbox->box, vname, flags, MAIL_INDEX_PREFIX); ibox = INDEX_STORAGE_CONTEXT(&mbox->box); ibox->index_flags |= MAIL_INDEX_OPEN_FLAG_KEEP_BACKUPS | MAIL_INDEX_OPEN_FLAG_NEVER_IN_MEMORY; mbox->storage = (struct mdbox_storage *)storage; return &mbox->box; }
static struct mailbox * mbox_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list, const char *vname, enum mailbox_flags flags) { struct mbox_mailbox *mbox; pool_t pool; pool = pool_alloconly_create("mbox mailbox", 1024*3); mbox = p_new(pool, struct mbox_mailbox, 1); mbox->box = mbox_mailbox; mbox->box.pool = pool; mbox->box.storage = storage; mbox->box.list = list; mbox->box.mail_vfuncs = &mbox_mail_vfuncs; index_storage_mailbox_alloc(&mbox->box, vname, flags, MAIL_INDEX_PREFIX); mbox->storage = (struct mbox_storage *)storage; mbox->mbox_fd = -1; mbox->mbox_lock_type = F_UNLCK; mbox->mbox_list_index_ext_id = (uint32_t)-1; if (strcmp(mbox->storage->set->mbox_md5, "apop3d") == 0) mbox->md5_v = mbox_md5_apop3d; else if (strcmp(mbox->storage->set->mbox_md5, "all") == 0) mbox->md5_v = mbox_md5_all; else { i_fatal("Invalid mbox_md5 setting: %s", mbox->storage->set->mbox_md5); } if ((storage->flags & MAIL_STORAGE_FLAG_KEEP_HEADER_MD5) != 0) mbox->mbox_save_md5 = TRUE; return &mbox->box; }
static struct mailbox * mbox_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list, const char *name, enum mailbox_flags flags) { struct mbox_mailbox *mbox; struct index_mailbox_context *ibox; pool_t pool; pool = pool_alloconly_create("mbox mailbox", 1024*3); mbox = p_new(pool, struct mbox_mailbox, 1); mbox->box = mbox_mailbox; mbox->box.pool = pool; mbox->box.storage = storage; mbox->box.list = list; mbox->box.mail_vfuncs = &mbox_mail_vfuncs; index_storage_mailbox_alloc(&mbox->box, name, flags, MBOX_INDEX_PREFIX); ibox = INDEX_STORAGE_CONTEXT(&mbox->box); ibox->save_commit_pre = mbox_transaction_save_commit_pre; ibox->save_commit_post = mbox_transaction_save_commit_post; ibox->save_rollback = mbox_transaction_save_rollback; mbox->storage = (struct mbox_storage *)storage; mbox->mbox_fd = -1; mbox->mbox_lock_type = F_UNLCK; mbox->mbox_ext_idx = mail_index_ext_register(mbox->box.index, "mbox", sizeof(mbox->mbox_hdr), sizeof(uint64_t), sizeof(uint64_t)); mbox->md5hdr_ext_idx = mail_index_ext_register(mbox->box.index, "header-md5", 0, 16, 1); if ((storage->flags & MAIL_STORAGE_FLAG_KEEP_HEADER_MD5) != 0) mbox->mbox_save_md5 = TRUE; return &mbox->box; }
static struct mailbox * mdbox_deleted_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list, const char *vname, enum mailbox_flags flags) { struct mdbox_mailbox *mbox; pool_t pool; flags |= MAILBOX_FLAG_READONLY | MAILBOX_FLAG_NO_INDEX_FILES; pool = pool_alloconly_create("mdbox deleted mailbox", 1024*3); mbox = p_new(pool, struct mdbox_mailbox, 1); mbox->box = mdbox_deleted_mailbox; mbox->box.pool = pool; mbox->box.storage = storage; mbox->box.list = list; mbox->box.mail_vfuncs = &mdbox_mail_vfuncs; index_storage_mailbox_alloc(&mbox->box, vname, flags, MAIL_INDEX_PREFIX); mbox->storage = (struct mdbox_storage *)storage; return &mbox->box; }