enum mailbox_list_path_type type, const char **path_r)
{
struct index_mailbox_list *list = (struct index_mailbox_list *)_list;
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(_list);
struct mail_index_view *view;
struct mailbox_list_index_node *node;
struct mailbox_status status;
return 1;
}
+ /* ilist is only required from this point onwards.
+ At least imapc calls index_list_get_path without this context*/
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(_list);
+
if (ilist->sync_ctx != NULL) {
/* we could get here during sync from
index_list_mailbox_create_selectable() */
{
struct index_mailbox_list *list =
(struct index_mailbox_list *)box->list;
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
struct mailbox_list_index_sync_context *sync_ctx;
struct mailbox_list_index_record rec;
struct mailbox_list_index_node *node;
void mailbox_list_index_backend_sync_init(struct mailbox *box,
enum mailbox_sync_flags flags)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
if ((flags & MAILBOX_SYNC_FLAG_FORCE_RESYNC) != 0 &&
!ilist->force_resynced) {
int mailbox_list_index_backend_sync_deinit(struct mailbox *box)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
if (ilist->force_resync_failed) {
/* fail this only once */
static bool iter_use_index(struct mailbox_list *list,
enum mailbox_list_iter_flags flags)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
if ((flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) {
/* for now we don't use indexes when listing subscriptions,
const char *const *patterns,
enum mailbox_list_iter_flags flags)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
struct mailbox_list_index_iterate_context *ctx;
pool_t pool;
char ns_sep = mail_namespace_get_sep(list->ns);
const struct mailbox_info *
mailbox_list_index_iter_next(struct mailbox_list_iterate_context *_ctx)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(_ctx->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(_ctx->list);
if (!_ctx->index_iteration) {
/* index isn't being used */
return ilist->module_ctx.super.iter_next(_ctx);
int mailbox_list_index_iter_deinit(struct mailbox_list_iterate_context *_ctx)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(_ctx->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(_ctx->list);
if (!_ctx->index_iteration)
return ilist->module_ctx.super.iter_deinit(_ctx);
struct mailbox_status *status_r, guid_128_t guid_r)
{
struct mailbox_list_index *ilist =
- INDEX_LIST_CONTEXT(inotify->notify.list);
+ INDEX_LIST_CONTEXT_REQUIRE(inotify->notify.list);
struct mailbox_list_index_node *index_node;
uint32_t seq;
mailbox_list_index_notify_read_next(struct mailbox_list_notify_index *inotify)
{
struct mailbox_list_notify *notify = &inotify->notify;
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(notify->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(notify->list);
const struct mail_transaction_header *hdr;
const void *data;
int ret;
index_list_open_view(struct mailbox *box, bool status_check,
struct mail_index_view **view_r, uint32_t *seq_r)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
struct mailbox_list_index_node *node;
struct mail_index_view *view;
uint32_t seq;
uint8_t *mailbox_guid,
struct mailbox_index_vsize *vsize_r)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
const void *data;
bool expunged;
bool ret = TRUE;
static int
index_list_get_cached_guid(struct mailbox *box, guid_128_t guid_r)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
struct mailbox_status status;
struct mail_index_view *view;
uint32_t seq;
static int index_list_get_cached_vsize(struct mailbox *box, uoff_t *vsize_r)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
struct mailbox_status status;
struct mailbox_index_vsize vsize;
struct mail_index_view *view;
index_list_get_cached_first_saved(struct mailbox *box,
struct mailbox_index_first_saved *first_saved_r)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
struct mail_index_view *view;
struct mailbox_status status;
const void *data;
struct mail_index_view *list_view,
struct index_list_changes *changes)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
struct mailbox_index_first_saved first_saved;
const void *data;
bool expunged;
struct mail_index_transaction *list_trans,
const struct index_list_changes *changes)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
struct mailbox_transaction_context *t;
struct mail *mail;
struct mailbox_index_first_saved first_saved;
struct mail_index_transaction *list_trans,
const struct index_list_changes *changes)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
if (changes->rec_changed) {
struct mailbox_list_index_record rec;
static int index_list_update_mailbox(struct mailbox *box)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
struct mail_index_sync_ctx *list_sync_ctx;
struct mail_index_view *list_view;
struct mail_index_transaction *list_trans;
void mailbox_list_index_status_sync_deinit(struct mailbox *box)
{
struct index_list_mailbox *ibox = INDEX_LIST_STORAGE_CONTEXT(box);
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
const struct mail_index_header *hdr;
hdr = mail_index_get_header(box->view);
void mailbox_list_index_status_set_info_flags(struct mailbox *box, uint32_t uid,
enum mailbox_info_flags *flags)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(box->list);
struct mail_index_view *view;
struct mailbox_status status;
uint32_t seq;
void mailbox_list_index_status_init_finish(struct mailbox_list *list)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
ilist->msgs_ext_id = mail_index_ext_register(ilist->index, "msgs", 0,
sizeof(struct mailbox_list_index_msgs_record),
int mailbox_list_index_sync_begin(struct mailbox_list *list,
struct mailbox_list_index_sync_context **sync_ctx_r)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
struct mailbox_list_index_sync_context *sync_ctx;
struct mail_index_sync_ctx *index_sync_ctx;
struct mail_index_view *view;
void mailbox_list_index_set_index_error(struct mailbox_list *list)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
mailbox_list_set_internal_error(list);
mail_index_reset_error(ilist->index);
int mailbox_list_index_index_open(struct mailbox_list *list)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
const struct mail_storage_settings *set = list->mail_set;
enum mail_index_open_flags index_flags;
unsigned int lock_timeout;
static struct mailbox_list_index_node *
mailbox_list_index_lookup_real(struct mailbox_list *list, const char *name)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
struct mailbox_list_index_node *node = ilist->mailbox_tree;
const char *const *path;
unsigned int i;
int mailbox_list_index_parse(struct mailbox_list *list,
struct mail_index_view *view, bool force)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
const struct mail_index_header *hdr;
const char *error;
int mailbox_list_index_refresh(struct mailbox_list *list)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
if (ilist->syncing)
return 0;
int mailbox_list_index_refresh_force(struct mailbox_list *list)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
struct mail_index_view *view;
int ret;
bool refresh;
static void mailbox_list_index_refresh_timeout(struct mailbox_list *list)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
timeout_remove(&ilist->to_refresh);
(void)mailbox_list_index_refresh(list);
void mailbox_list_index_refresh_later(struct mailbox_list *list)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
struct mailbox_list_index_header new_hdr;
struct mail_index_view *view;
struct mail_index_transaction *trans;
int mailbox_list_index_handle_corruption(struct mailbox_list *list)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
struct mail_storage *const *storagep;
enum mail_storage_list_index_rebuild_reason reason;
int ret = 0;
int mailbox_list_index_set_uncorrupted(struct mailbox_list *list)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
struct mailbox_list_index_sync_context *sync_ctx;
ilist->call_corruption_callback = FALSE;
static void mailbox_list_index_deinit(struct mailbox_list *list)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
timeout_remove(&ilist->to_refresh);
if (ilist->index != NULL) {
mailbox_list_index_refresh_if_found(struct mailbox_list *list,
const char *name, bool selectable)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
struct mailbox_list_index_node *node;
if (ilist->syncing)
static void mailbox_list_index_refresh_if_not_found(struct mailbox_list *list,
const char *name)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
if (ilist->syncing)
return;
static int
mailbox_list_index_delete_mailbox(struct mailbox_list *list, const char *name)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
if (ilist->module_ctx.super.delete_mailbox(list, name) < 0) {
if (mailbox_list_get_last_mail_error(list) == MAIL_ERROR_NOTFOUND)
static int
mailbox_list_index_delete_dir(struct mailbox_list *list, const char *name)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
if (ilist->module_ctx.super.delete_dir(list, name) < 0) {
if (mailbox_list_get_last_mail_error(list) == MAIL_ERROR_NOTFOUND)
struct mailbox_list *newlist,
const char *newname)
{
- struct mailbox_list_index *oldilist = INDEX_LIST_CONTEXT(oldlist);
+ struct mailbox_list_index *oldilist = INDEX_LIST_CONTEXT_REQUIRE(oldlist);
if (oldilist->module_ctx.super.rename_mailbox(oldlist, oldname,
newlist, newname) < 0) {
mailbox_list_index_set_subscribed(struct mailbox_list *_list,
const char *name, bool set)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(_list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(_list);
struct mail_index_view *view;
struct mail_index_transaction *trans;
const void *data;
#define INDEX_LIST_CONTEXT(obj) \
MODULE_CONTEXT(obj, mailbox_list_index_module)
+#define INDEX_LIST_CONTEXT_REQUIRE(obj) \
+ MODULE_CONTEXT_REQUIRE(obj, mailbox_list_index_module)
struct mail_index_view;
struct mailbox_index_vsize;
static void
mailbox_list_notify_tree_build(struct mailbox_list_notify_tree *tree)
{
- struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(tree->list);
+ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(tree->list);
struct mailbox_list_index_node *index_node;
string_t *path = t_str_new(128);