Skip to content

Commit

Permalink
lib-storage: Add and use INDEX_LIST_CONTEXT_REQUIRE
Browse files Browse the repository at this point in the history
Satisfies static analyzers
  • Loading branch information
cmouse authored and mrannanj committed Feb 20, 2018
1 parent 8fc876d commit 37aed1a
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 41 deletions.
11 changes: 7 additions & 4 deletions src/lib-storage/list/mailbox-list-index-backend.c
Expand Up @@ -114,7 +114,6 @@ index_list_get_path(struct mailbox_list *_list, const char *name,
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;
Expand Down Expand Up @@ -152,6 +151,10 @@ index_list_get_path(struct mailbox_list *_list, const char *name,
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() */
Expand Down Expand Up @@ -282,7 +285,7 @@ index_list_mailbox_create_selectable(struct mailbox *box,
{
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;
Expand Down Expand Up @@ -586,7 +589,7 @@ static int index_list_mailbox_open(struct mailbox *box)
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) {
Expand All @@ -603,7 +606,7 @@ void mailbox_list_index_backend_sync_init(struct mailbox *box,

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 */
Expand Down
8 changes: 4 additions & 4 deletions src/lib-storage/list/mailbox-list-index-iter.c
Expand Up @@ -11,7 +11,7 @@
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,
Expand All @@ -37,7 +37,7 @@ mailbox_list_index_iter_init(struct mailbox_list *list,
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);
Expand Down Expand Up @@ -178,7 +178,7 @@ iter_subscriptions_ok(struct mailbox_list_index_iterate_context *ctx)
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);
Expand Down Expand Up @@ -225,7 +225,7 @@ mailbox_list_index_iter_next(struct mailbox_list_iterate_context *_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);

Expand Down
4 changes: 2 additions & 2 deletions src/lib-storage/list/mailbox-list-index-notify.c
Expand Up @@ -209,7 +209,7 @@ notify_lookup_guid(struct mailbox_list_notify_index *inotify,
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;

Expand Down Expand Up @@ -311,7 +311,7 @@ static int
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;
Expand Down
24 changes: 12 additions & 12 deletions src/lib-storage/list/mailbox-list-index-status.c
Expand Up @@ -36,7 +36,7 @@ static int
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;
Expand Down Expand Up @@ -121,7 +121,7 @@ bool mailbox_list_index_status(struct mailbox_list *list,
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;
Expand Down Expand Up @@ -228,7 +228,7 @@ index_list_get_status(struct mailbox *box, enum mailbox_status_items items,
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;
Expand All @@ -252,7 +252,7 @@ index_list_get_cached_guid(struct mailbox *box, guid_128_t guid_r)

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;
Expand Down Expand Up @@ -286,7 +286,7 @@ static int
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;
Expand Down Expand Up @@ -454,7 +454,7 @@ index_list_first_saved_update_changes(struct mailbox *box,
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;
Expand Down Expand Up @@ -529,7 +529,7 @@ index_list_update_first_saved(struct mailbox *box,
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;
Expand Down Expand Up @@ -572,7 +572,7 @@ index_list_update(struct mailbox *box, struct mail_index_view *list_view,
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;
Expand Down Expand Up @@ -620,7 +620,7 @@ index_list_update(struct mailbox *box, struct mail_index_view *list_view,

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;
Expand Down Expand Up @@ -762,7 +762,7 @@ void mailbox_list_index_status_sync_init(struct mailbox *box)
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);
Expand Down Expand Up @@ -807,7 +807,7 @@ index_list_transaction_commit(struct mailbox_transaction_context *t,
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;
Expand Down Expand Up @@ -849,7 +849,7 @@ void mailbox_list_index_status_init_mailbox(struct mailbox_vfuncs *v)

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),
Expand Down
2 changes: 1 addition & 1 deletion src/lib-storage/list/mailbox-list-index-sync.c
Expand Up @@ -225,7 +225,7 @@ sync_expunge_nonexistent(struct mailbox_list_index_sync_context *sync_ctx,
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;
Expand Down
34 changes: 17 additions & 17 deletions src/lib-storage/list/mailbox-list-index.c
Expand Up @@ -25,7 +25,7 @@ struct mailbox_list_index_module mailbox_list_index_module =

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);
Expand Down Expand Up @@ -54,7 +54,7 @@ void mailbox_list_index_reset(struct mailbox_list_index *ilist)

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;
Expand Down Expand Up @@ -128,7 +128,7 @@ mailbox_list_index_node_find_sibling(struct mailbox_list_index_node *node,
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;
Expand Down Expand Up @@ -433,7 +433,7 @@ static int mailbox_list_index_parse_records(struct mailbox_list_index *ilist,
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;

Expand Down Expand Up @@ -495,7 +495,7 @@ bool mailbox_list_index_need_refresh(struct mailbox_list_index *ilist,

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;
Expand All @@ -513,7 +513,7 @@ int mailbox_list_index_refresh(struct mailbox_list *list)

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;
Expand Down Expand Up @@ -545,15 +545,15 @@ int mailbox_list_index_refresh_force(struct mailbox_list *list)

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;
Expand Down Expand Up @@ -610,7 +610,7 @@ list_handle_corruption_locked(struct mailbox_list *list,

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);
enum mail_storage_list_index_rebuild_reason reason;
int ret;

Expand Down Expand Up @@ -644,7 +644,7 @@ int mailbox_list_index_handle_corruption(struct mailbox_list *list)

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;
Expand All @@ -659,7 +659,7 @@ int mailbox_list_index_set_uncorrupted(struct mailbox_list *list)

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) {
Expand All @@ -677,7 +677,7 @@ static void
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)
Expand All @@ -699,7 +699,7 @@ mailbox_list_index_refresh_if_found(struct mailbox_list *list,
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;
Expand Down Expand Up @@ -760,7 +760,7 @@ mailbox_list_index_update_mailbox(struct mailbox *box,
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)
Expand All @@ -774,7 +774,7 @@ mailbox_list_index_delete_mailbox(struct mailbox_list *list, const char *name)
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)
Expand All @@ -791,7 +791,7 @@ mailbox_list_index_rename_mailbox(struct mailbox_list *oldlist,
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) {
Expand All @@ -811,7 +811,7 @@ static int
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;
Expand Down
2 changes: 2 additions & 0 deletions src/lib-storage/list/mailbox-list-index.h
Expand Up @@ -33,6 +33,8 @@

#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;
Expand Down
2 changes: 1 addition & 1 deletion src/lib-storage/list/mailbox-list-notify-tree.c
Expand Up @@ -78,7 +78,7 @@ mailbox_list_notify_node_build(struct mailbox_list_notify_tree *tree,
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);

Expand Down

0 comments on commit 37aed1a

Please sign in to comment.