{
const enum mailbox_list_iter_flags iter_flags =
MAILBOX_LIST_ITER_RAW_LIST |
+ MAILBOX_LIST_ITER_VIRTUAL_NAMES |
MAILBOX_LIST_ITER_NO_AUTO_INBOX |
MAILBOX_LIST_ITER_RETURN_NO_FLAGS;
struct mail_search_args *search_args;
struct mail_namespace *ns, *prev_ns = NULL;
struct mailbox *box;
ARRAY_DEFINE(purged_storages, struct mail_storage *);
+ const char *storage_name;
struct mail_storage *const *storages;
unsigned int i, count;
t_array_init(&purged_storages, 8);
iter = doveadm_mail_list_iter_init(user, search_args, iter_flags);
- while ((info = doveadm_mail_list_iter_next(iter)) != NULL) {
+ while ((info = doveadm_mail_list_iter_next(iter)) != NULL) T_BEGIN {
if (info->ns != prev_ns) {
if (prev_ns != NULL) {
ns_purge(prev_ns);
prev_ns = info->ns;
}
- box = mailbox_alloc(info->ns->list, info->name,
+ storage_name = mail_namespace_get_storage_name(info->ns,
+ info->name);
+ box = mailbox_alloc(info->ns->list, storage_name,
MAILBOX_FLAG_KEEP_RECENT |
MAILBOX_FLAG_IGNORE_ACLS);
(void)cmd_altmove_box(box, search_args);
mailbox_free(&box);
- }
+ } T_END;
doveadm_mail_list_iter_deinit(&iter);
/* make sure all private storages have been purged */
enum mailbox_list_iter_flags iter_flags;
struct mailbox_list_iterate_context *iter;
- string_t *vname;
};
static void
struct doveadm_mail_list_iter *iter;
ARRAY_TYPE(const_string) patterns;
+ i_assert((iter_flags & MAILBOX_LIST_ITER_VIRTUAL_NAMES) != 0);
+
iter = i_new(struct doveadm_mail_list_iter, 1);
iter->search_args = search_args;
array_idx(&patterns, 0),
NAMESPACE_PRIVATE,
iter_flags);
- iter->vname = str_new(default_pool, 256);
return iter;
}
if (mailbox_list_iter_deinit(&iter->iter) < 0)
i_error("Listing mailboxes failed");
- str_free(&iter->vname);
i_free(iter);
}
doveadm_mail_list_iter_next(struct doveadm_mail_list_iter *iter)
{
const struct mailbox_info *info;
- const char *vname;
while ((info = mailbox_list_iter_next(iter->iter)) != NULL) {
- if ((iter->iter_flags & MAILBOX_LIST_ITER_VIRTUAL_NAMES) != 0)
- vname = info->name;
- else {
- vname = mail_namespace_get_vname(info->ns, iter->vname,
- info->name);
- }
- if (mail_search_args_match_mailbox(iter->search_args, vname,
- info->ns->sep))
+ if (mail_search_args_match_mailbox(iter->search_args,
+ info->name, info->ns->sep))
break;
}
return info;