From: Marco Bettini Date: Fri, 27 Jun 2025 14:07:29 +0000 (+0000) Subject: lib-storage: Remove diversions to mailbox_list_subscriptions_iter_*() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=505dbcf9277ffb4e499e788e60334cf2f270657b;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Remove diversions to mailbox_list_subscriptions_iter_*() --- diff --git a/src/lib-storage/index/imapc/imapc-list.c b/src/lib-storage/index/imapc/imapc-list.c index 9d7a093593..b4c366e26a 100644 --- a/src/lib-storage/index/imapc/imapc-list.c +++ b/src/lib-storage/index/imapc/imapc-list.c @@ -688,7 +688,6 @@ imapc_list_iter_init(struct mailbox_list *_list, const char *const *patterns, enum mailbox_list_iter_flags flags) { struct imapc_mailbox_list *list = (struct imapc_mailbox_list *)_list; - struct mailbox_list_iterate_context *_ctx; struct imapc_mailbox_list_iterate_context *ctx; pool_t pool; const char *ns_root_name; @@ -701,16 +700,6 @@ imapc_list_iter_init(struct mailbox_list *_list, const char *const *patterns, list->iter_count++; - if ((flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) { - /* we're listing only subscriptions. just use the cached - subscriptions list. */ - _ctx = mailbox_list_subscriptions_iter_init(_list, patterns, - flags); - if (ret < 0) - _ctx->failed = TRUE; - return _ctx; - } - /* if we've already failed, make sure we don't call mailbox_list_get_hierarchy_sep(), since it clears the error */ ns_sep = ret < 0 ? '/' : mail_namespace_get_sep(_list->ns); @@ -795,9 +784,6 @@ imapc_list_iter_next(struct mailbox_list_iterate_context *_ctx) if (_ctx->failed) return NULL; - if ((_ctx->flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) - return mailbox_list_subscriptions_iter_next(_ctx); - do { node = mailbox_tree_iterate_next(ctx->iter, &vname); if (node == NULL) @@ -843,9 +829,6 @@ static int imapc_list_iter_deinit(struct mailbox_list_iterate_context *_ctx) list->refreshed_subscriptions = FALSE; } - if ((_ctx->flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) - return mailbox_list_subscriptions_iter_deinit(_ctx); - mailbox_tree_iterate_deinit(&ctx->iter); mailbox_tree_deinit(&ctx->tree); pool_unref(&_ctx->pool); diff --git a/src/lib-storage/list/mailbox-list-fs-iter.c b/src/lib-storage/list/mailbox-list-fs-iter.c index f4a08d270f..5a24ee741c 100644 --- a/src/lib-storage/list/mailbox-list-fs-iter.c +++ b/src/lib-storage/list/mailbox-list-fs-iter.c @@ -519,13 +519,6 @@ fs_list_iter_init(struct mailbox_list *_list, const char *const *patterns, struct fs_list_iterate_context *ctx; pool_t pool; - if ((flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) { - /* we're listing only subscribed mailboxes. we can't optimize - it, so just use the generic code. */ - return mailbox_list_subscriptions_iter_init(_list, patterns, - flags); - } - pool = pool_alloconly_create("mailbox list fs iter", 2048); ctx = p_new(pool, struct fs_list_iterate_context, 1); ctx->ctx.pool = pool; @@ -564,9 +557,6 @@ int fs_list_iter_deinit(struct mailbox_list_iterate_context *_ctx) (struct fs_list_iterate_context *)_ctx; int ret = _ctx->failed ? -1 : 0; - if ((_ctx->flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) - return mailbox_list_subscriptions_iter_deinit(_ctx); - while (ctx->dir != NULL) { struct list_dir_context *dir = ctx->dir; @@ -892,9 +882,6 @@ fs_list_iter_next(struct mailbox_list_iterate_context *_ctx) (struct fs_list_iterate_context *)_ctx; int ret; - if ((_ctx->flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) - return mailbox_list_subscriptions_iter_next(_ctx); - T_BEGIN { ret = fs_list_next(ctx); } T_END; diff --git a/src/lib-storage/list/mailbox-list-index-backend.c b/src/lib-storage/list/mailbox-list-index-backend.c index 20ed49befd..65d11e2141 100644 --- a/src/lib-storage/list/mailbox-list-index-backend.c +++ b/src/lib-storage/list/mailbox-list-index-backend.c @@ -900,18 +900,12 @@ index_list_rename_mailbox(struct mailbox_list *_oldlist, const char *oldname, static struct mailbox_list_iterate_context * index_list_iter_init(struct mailbox_list *list, - const char *const *patterns, + const char *const *patterns ATTR_UNUSED, enum mailbox_list_iter_flags flags) { struct mailbox_list_iterate_context *ctx; - pool_t pool; - - if ((flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) { - return mailbox_list_subscriptions_iter_init(list, patterns, - flags); - } - - pool = pool_alloconly_create("mailbox list index backend iter", 1024); + pool_t pool = + pool_alloconly_create("mailbox list index backend iter", 1024); ctx = p_new(pool, struct mailbox_list_iterate_context, 1); ctx->pool = pool; ctx->list = list; @@ -921,17 +915,13 @@ index_list_iter_init(struct mailbox_list *list, } static const struct mailbox_info * -index_list_iter_next(struct mailbox_list_iterate_context *ctx) +index_list_iter_next(struct mailbox_list_iterate_context *ctx ATTR_UNUSED) { - if ((ctx->flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) - return mailbox_list_subscriptions_iter_next(ctx); return NULL; } static int index_list_iter_deinit(struct mailbox_list_iterate_context *ctx) { - if ((ctx->flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) - return mailbox_list_subscriptions_iter_deinit(ctx); pool_unref(&ctx->pool); return 0; } diff --git a/src/lib-storage/list/mailbox-list-subscriptions.c b/src/lib-storage/list/mailbox-list-subscriptions.c index d56dc9ee36..3a30661ba8 100644 --- a/src/lib-storage/list/mailbox-list-subscriptions.c +++ b/src/lib-storage/list/mailbox-list-subscriptions.c @@ -225,96 +225,3 @@ void mailbox_list_subscriptions_fill(struct mailbox_list_iterate_context *ctx, mailbox_list_iter_update(&update_ctx, name); mailbox_tree_iterate_deinit(&iter); } - -struct mailbox_list_iterate_context * -mailbox_list_subscriptions_iter_init(struct mailbox_list *list, - const char *const *patterns, - enum mailbox_list_iter_flags flags) -{ - struct subscriptions_mailbox_list_iterate_context *ctx; - pool_t pool; - char sep = mail_namespace_get_sep(list->ns); - - pool = pool_alloconly_create("mailbox list subscriptions iter", 1024); - ctx = p_new(pool, struct subscriptions_mailbox_list_iterate_context, 1); - ctx->ctx.pool = pool; - ctx->ctx.list = list; - ctx->ctx.flags = flags; - ctx->ctx.glob = imap_match_init_multiple(pool, patterns, TRUE, sep); - array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5); - - ctx->tree = mailbox_tree_init(sep); - mailbox_list_subscriptions_fill(&ctx->ctx, ctx->tree, FALSE); - - ctx->info.ns = list->ns; - /* the tree usually has only those entries we want to iterate through, - but there are also non-matching root entries (e.g. "LSUB foo/%" will - include the "foo"), which we'll drop with MAILBOX_MATCHED. */ - ctx->iter = mailbox_tree_iterate_init(ctx->tree, NULL, MAILBOX_MATCHED); - return &ctx->ctx; -} - -const struct mailbox_info * -mailbox_list_subscriptions_iter_next(struct mailbox_list_iterate_context *_ctx) -{ - struct subscriptions_mailbox_list_iterate_context *ctx = - (struct subscriptions_mailbox_list_iterate_context *)_ctx; - struct mailbox_list *list = _ctx->list; - struct mailbox_node *node; - enum mailbox_info_flags subs_flags; - const char *vname, *storage_name, *error; - int ret; - - node = mailbox_tree_iterate_next(ctx->iter, &vname); - if (node == NULL) - return mailbox_list_iter_default_next(_ctx); - - ctx->info.vname = vname; - subs_flags = node->flags & (MAILBOX_SUBSCRIBED | - MAILBOX_CHILD_SUBSCRIBED); - - if ((_ctx->flags & MAILBOX_LIST_ITER_RETURN_NO_FLAGS) != 0 && - (_ctx->flags & MAILBOX_LIST_ITER_RETURN_CHILDREN) == 0) { - /* don't care about flags, just return it */ - ctx->info.flags = subs_flags; - return &ctx->info; - } - - storage_name = mailbox_list_get_storage_name(list, vname); - if (!mailbox_list_is_valid_name(list, storage_name, &error)) { - /* broken entry in subscriptions file */ - ctx->info.flags = MAILBOX_NONEXISTENT; - } else if (mailbox_list_mailbox(list, storage_name, - &ctx->info.flags) < 0) { - ctx->info.flags = 0; - _ctx->failed = TRUE; - } else if ((_ctx->flags & MAILBOX_LIST_ITER_RETURN_CHILDREN) != 0 && - (ctx->info.flags & (MAILBOX_CHILDREN | - MAILBOX_NOCHILDREN)) == 0) { - ret = mailbox_has_children(list, storage_name); - if (ret < 0) - _ctx->failed = TRUE; - else if (ret == 0) - ctx->info.flags |= MAILBOX_NOCHILDREN; - else - ctx->info.flags |= MAILBOX_CHILDREN; - - } - - ctx->info.flags &= ENUM_NEGATE(MAILBOX_SUBSCRIBED | MAILBOX_CHILD_SUBSCRIBED); - ctx->info.flags |= - node->flags & (MAILBOX_SUBSCRIBED | MAILBOX_CHILD_SUBSCRIBED); - return &ctx->info; -} - -int mailbox_list_subscriptions_iter_deinit(struct mailbox_list_iterate_context *_ctx) -{ - struct subscriptions_mailbox_list_iterate_context *ctx = - (struct subscriptions_mailbox_list_iterate_context *)_ctx; - int ret = _ctx->failed ? -1 : 0; - - mailbox_tree_iterate_deinit(&ctx->iter); - mailbox_tree_deinit(&ctx->tree); - pool_unref(&_ctx->pool); - return ret; -} diff --git a/src/lib-storage/list/mailbox-list-subscriptions.h b/src/lib-storage/list/mailbox-list-subscriptions.h index 283012d80f..123c220fa3 100644 --- a/src/lib-storage/list/mailbox-list-subscriptions.h +++ b/src/lib-storage/list/mailbox-list-subscriptions.h @@ -20,14 +20,4 @@ void mailbox_list_subscriptions_fill(struct mailbox_list_iterate_context *ctx, struct mailbox_tree_context *tree, bool default_nonexistent); -/* Iterate through subscriptions, call mailbox_list.get_mailbox_flags() - if necessary for mailboxes to get their flags. */ -struct mailbox_list_iterate_context * -mailbox_list_subscriptions_iter_init(struct mailbox_list *list, - const char *const *patterns, - enum mailbox_list_iter_flags flags); -const struct mailbox_info * -mailbox_list_subscriptions_iter_next(struct mailbox_list_iterate_context *ctx); -int mailbox_list_subscriptions_iter_deinit(struct mailbox_list_iterate_context *ctx); - #endif