]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add and use INDEX_LIST_CONTEXT_REQUIRE
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 22 Jan 2018 07:38:26 +0000 (09:38 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 24 Jan 2018 11:24:31 +0000 (13:24 +0200)
Satisfies static analyzers

src/lib-storage/list/mailbox-list-index-backend.c
src/lib-storage/list/mailbox-list-index-iter.c
src/lib-storage/list/mailbox-list-index-notify.c
src/lib-storage/list/mailbox-list-index-status.c
src/lib-storage/list/mailbox-list-index-sync.c
src/lib-storage/list/mailbox-list-index.c
src/lib-storage/list/mailbox-list-index.h
src/lib-storage/list/mailbox-list-notify-tree.c

index 02095192b94d3ded37a4bd43846b7b846d1f8b30..be6a199c8a47d32d14f5b62c9420917d286fa3aa 100644 (file)
@@ -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;
@@ -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() */
@@ -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;
@@ -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) {
@@ -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 */
index 4f6a20ec6d5ae3bc24ab0aa03b638d64c602c6a7..c3387583f83c1066e06f6b732c5057945707ff54 100644 (file)
@@ -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,
@@ -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);
@@ -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);
@@ -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);
 
index df911a0968e6b17a7fd700dcee70c89bd8f65d05..6e374727ddeb946f65bb76ebf50be7d256a9c3cd 100644 (file)
@@ -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;
 
@@ -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;
index 937e6afcc12368fcc706c53d9edd95537e7d05d5..ee7f468509b127ff4ea79f4e402dcff7e658ce25 100644 (file)
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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);
@@ -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;
@@ -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),
index e51a07c46fc40b1fc19f550756cbc18fe979a59b..700d18ac0fefd9370a39b8a6045c07201d13e22a 100644 (file)
@@ -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;
index 78d0661aa1c06db0c0027f955e69976f0993ab26..4409a62bdfcfb2fc12da449064da2e5f4eadc8e4 100644 (file)
@@ -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);
@@ -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;
@@ -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;
@@ -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;
 
@@ -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;
@@ -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;
@@ -545,7 +545,7 @@ 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);
@@ -553,7 +553,7 @@ static void mailbox_list_index_refresh_timeout(struct mailbox_list *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;
@@ -590,7 +590,7 @@ void mailbox_list_index_refresh_later(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);
        struct mail_storage *const *storagep;
        enum mail_storage_list_index_rebuild_reason reason;
        int ret = 0;
@@ -626,7 +626,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;
@@ -641,7 +641,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) {
@@ -659,7 +659,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)
@@ -681,7 +681,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;
@@ -742,7 +742,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)
@@ -756,7 +756,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)
@@ -773,7 +773,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) {
@@ -793,7 +793,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;
index 660b653e24f053cb858687c37d8b23c7a781d02c..22bb82ce493b9f01f3e27c76f5abff05348da160 100644 (file)
@@ -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;
index 52a11ce4955495af7963d1b6c4ddc8dd41cc7113..956cec58962dcc9d7522bf47f44605492a598a87 100644 (file)
@@ -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);