]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Remove diversions to mailbox_list_subscriptions_iter_*()
authorMarco Bettini <marco.bettini@open-xchange.com>
Fri, 27 Jun 2025 14:07:29 +0000 (14:07 +0000)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 28 Jul 2025 18:03:03 +0000 (18:03 +0000)
src/lib-storage/index/imapc/imapc-list.c
src/lib-storage/list/mailbox-list-fs-iter.c
src/lib-storage/list/mailbox-list-index-backend.c
src/lib-storage/list/mailbox-list-subscriptions.c
src/lib-storage/list/mailbox-list-subscriptions.h

index 9d7a0935934f7768c41696c50a5624861c576dcb..b4c366e26a837de6fd8ceb96ed8bc6a83e915db2 100644 (file)
@@ -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);
index f4a08d270f36da1889e641be8435fd0b3b3b27d6..5a24ee741c89030d542760883983ede0786e098a 100644 (file)
@@ -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;
index 20ed49befd42a691c931381626abb639066270d3..65d11e2141f8d47bbeeb2788175f9c0a24d4ab3b 100644 (file)
@@ -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;
 }
index d56dc9ee3657d3631c8dbe2ef967a8eb43e3a132..3a30661ba8e20ddab6a782650ee561fc0ca4e629 100644 (file)
@@ -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;
-}
index 283012d80fc95adacc5dd91771a41c60138ce2cd..123c220fa3ed0ca0d729753c456e241d172363b2 100644 (file)
@@ -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