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;
char sep;
int ret = 0;
sep = mailbox_list_get_hierarchy_sep(_list);
- ctx = i_new(struct imapc_mailbox_list_iterate_context, 1);
+ pool = pool_alloconly_create("mailbox list imapc iter", 1024);
+ ctx = p_new(pool, struct imapc_mailbox_list_iterate_context, 1);
+ ctx->ctx.pool = pool;
ctx->ctx.list = _list;
ctx->ctx.flags = flags;
- ctx->ctx.glob = imap_match_init_multiple(default_pool, patterns,
- FALSE, sep);
- array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5);
+ ctx->ctx.glob = imap_match_init_multiple(pool, patterns, FALSE, sep);
+ array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
ctx->info.ns = _list->ns;
mailbox_tree_iterate_deinit(&ctx->iter);
mailbox_tree_deinit(&ctx->tree);
- imap_match_deinit(&_ctx->glob);
- array_free(&_ctx->module_contexts);
- i_free(ctx);
+ pool_unref(&_ctx->pool);
return ret;
}
enum mailbox_list_iter_flags flags)
{
struct mailbox_list_iterate_context *ctx;
+ pool_t pool;
char sep = mail_namespace_get_sep(list->ns);
- ctx = i_new(struct mailbox_list_iterate_context, 1);
+ pool = pool_alloconly_create("mailbox list shared iter", 1024);
+ ctx = p_new(pool, struct mailbox_list_iterate_context, 1);
+ ctx->pool = pool;
ctx->list = list;
ctx->flags = flags;
- ctx->glob = imap_match_init_multiple(default_pool, patterns,
- FALSE, sep);
- array_create(&ctx->module_contexts, default_pool, sizeof(void *), 5);
+ ctx->glob = imap_match_init_multiple(pool, patterns, FALSE, sep);
+ array_create(&ctx->module_contexts, pool, sizeof(void *), 5);
if ((flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) == 0 &&
(list->ns->flags & NAMESPACE_FLAG_AUTOCREATED) == 0) T_BEGIN {
static int shared_list_iter_deinit(struct mailbox_list_iterate_context *ctx)
{
- imap_match_deinit(&ctx->glob);
- array_free(&ctx->module_contexts);
- i_free(ctx);
+ pool_unref(&ctx->pool);
return 0;
}
struct fs_list_iterate_context {
struct mailbox_list_iterate_context ctx;
- ARRAY_DEFINE(valid_patterns, char *);
+ ARRAY_DEFINE(valid_patterns, const char *);
char sep;
enum mailbox_info_flags inbox_flags;
static int list_opendir(struct fs_list_iterate_context *ctx,
const char *path, const char *list_path, DIR **dirp)
{
- char *const *patterns;
+ const char *const *patterns;
unsigned int i;
/* if no patterns have wildcards at this point of the path, we don't
{
struct fs_list_iterate_context *ctx;
const char *path, *vpath, *rootdir, *test_pattern, *real_pattern;
- char *pattern;
+ pool_t pool;
+ const char *pattern;
DIR *dirp;
unsigned int prefix_len;
int ret;
flags);
}
- ctx = i_new(struct fs_list_iterate_context, 1);
+ pool = pool_alloconly_create("mailbox list fs iter", 1024);
+ ctx = p_new(pool, struct fs_list_iterate_context, 1);
+ ctx->ctx.pool = pool;
ctx->ctx.list = _list;
ctx->ctx.flags = flags;
- array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5);
+ array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
ctx->info_pool = pool_alloconly_create("fs list", 1024);
ctx->next = fs_list_next;
ctx->info.ns = _list->ns;
prefix_len = strlen(_list->ns->prefix);
- i_array_init(&ctx->valid_patterns, 8);
+ p_array_init(&ctx->valid_patterns, pool, 8);
for (; *patterns != NULL; patterns++) {
/* check that we're not trying to do any "../../" lists */
test_pattern = *patterns;
ctx->inbox_match = TRUE;
continue;
}
- pattern = i_strdup(*patterns);
+ pattern = p_strdup(pool, *patterns);
array_append(&ctx->valid_patterns, &pattern, 1);
}
}
return &ctx->ctx;
}
patterns = (const void *)array_idx(&ctx->valid_patterns, 0);
- ctx->ctx.glob = imap_match_init_multiple(default_pool, patterns, TRUE,
+ ctx->ctx.glob = imap_match_init_multiple(pool, patterns, TRUE,
ctx->sep);
vpath = _list->ns->prefix;
{
struct fs_list_iterate_context *ctx =
(struct fs_list_iterate_context *)_ctx;
- char **patterns;
- unsigned int i, count;
int ret = _ctx->failed ? -1 : 0;
if ((_ctx->flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0)
return mailbox_list_subscriptions_iter_deinit(_ctx);
- patterns = array_get_modifiable(&ctx->valid_patterns, &count);
- for (i = 0; i < count; i++)
- i_free(patterns[i]);
- array_free(&ctx->valid_patterns);
-
while (ctx->dir != NULL) {
struct list_dir_context *dir = ctx->dir;
if (ctx->info_pool != NULL)
pool_unref(&ctx->info_pool);
- if (_ctx->glob != NULL)
- imap_match_deinit(&_ctx->glob);
- array_free(&_ctx->module_contexts);
- i_free(ctx);
-
+ pool_unref(&_ctx->pool);
return ret;
}
{
struct list_dir_context *dir = ctx->dir;
struct dirent *d;
- char *const *patterns;
+ const char *const *patterns;
const char *fname, *path, *p;
unsigned int pos;
struct stat st;
{
struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
struct mailbox_list_index_iterate_context *ctx;
+ pool_t pool;
char ns_sep = mail_namespace_get_sep(list->ns);
- ctx = i_new(struct mailbox_list_index_iterate_context, 1);
+ pool = pool_alloconly_create("mailbox list index iter", 1024);
+ ctx = p_new(pool, struct mailbox_list_index_iterate_context, 1);
+ ctx->ctx.pool = pool;
ctx->ctx.list = list;
ctx->ctx.flags = flags;
- ctx->ctx.glob = imap_match_init_multiple(default_pool, patterns,
- TRUE, ns_sep);
- array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5);
+ ctx->ctx.glob = imap_match_init_multiple(pool, patterns, TRUE, ns_sep);
+ array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
ctx->sep = ns_sep;
if (mailbox_list_index_refresh(ctx->ctx.list) < 0) {
} else {
/* listing mailboxes from index */
ctx->info.ns = list->ns;
- ctx->path = str_new(default_pool, 128);
+ ctx->path = str_new(pool, 128);
ctx->next_node = ilist->mailbox_tree;
ilist->iter_refcount++;
}
else {
i_assert(ilist->iter_refcount > 0);
ilist->iter_refcount--;
- str_free(&ctx->path);
}
- imap_match_deinit(&ctx->ctx.glob);
- array_free(&ctx->ctx.module_contexts);
- i_free(ctx);
+ pool_unref(&_ctx->pool);
return ret;
}
struct maildir_list_iterate_context {
struct mailbox_list_iterate_context ctx;
- pool_t pool;
const char *dir;
char prefix_char;
char ns_sep = mail_namespace_get_sep(_list->ns);
int ret;
- pool = pool_alloconly_create("maildir_list", 1024);
+ pool = pool_alloconly_create("mailbox list maildir iter", 1024);
ctx = p_new(pool, struct maildir_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, ns_sep);
array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
- ctx->pool = pool;
ctx->tree_ctx = mailbox_tree_init(ns_sep);
ctx->info.ns = _list->ns;
ctx->prefix_char = strcmp(_list->name, MAILBOX_LIST_NAME_IMAPDIR) == 0 ?
if (ctx->tree_iter != NULL)
mailbox_tree_iterate_deinit(&ctx->tree_iter);
mailbox_tree_deinit(&ctx->tree_ctx);
- pool_unref(&ctx->pool);
+ pool_unref(&ctx->ctx.pool);
return ret;
}
enum mailbox_list_iter_flags flags)
{
struct noop_list_iterate_context *ctx;
+ pool_t pool;
- ctx = i_new(struct noop_list_iterate_context, 1);
+ pool = pool_alloconly_create("mailbox list none iter", 1024);
+ ctx = p_new(pool, struct noop_list_iterate_context, 1);
+ ctx->ctx.pool = pool;
ctx->ctx.list = list;
ctx->ctx.flags = flags;
- ctx->ctx.glob = imap_match_init_multiple(default_pool, patterns, TRUE,
+ ctx->ctx.glob = imap_match_init_multiple(pool, patterns, TRUE,
mail_namespace_get_sep(list->ns));
- array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5);
+ array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
if ((list->ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0 &&
imap_match(ctx->ctx.glob, "INBOX") == IMAP_MATCH_YES) {
ctx->list_inbox = TRUE;
static int
none_list_iter_deinit(struct mailbox_list_iterate_context *ctx)
{
- array_free(&ctx->module_contexts);
- imap_match_deinit(&ctx->glob);
- i_free(ctx);
+ pool_unref(&ctx->pool);
return 0;
}
enum mailbox_list_iter_flags flags)
{
struct subscriptions_mailbox_list_iterate_context *ctx;
+ pool_t pool;
char sep = mail_namespace_get_sep(list->ns);
- ctx = i_new(struct subscriptions_mailbox_list_iterate_context, 1);
+ 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(default_pool, patterns,
- TRUE, sep);
- array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5);
+ 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);
mailbox_tree_iterate_deinit(&ctx->iter);
mailbox_tree_deinit(&ctx->tree);
- if (_ctx->glob != NULL)
- imap_match_deinit(&_ctx->glob);
- array_free(&_ctx->module_contexts);
- i_free(ctx);
+ pool_unref(&_ctx->pool);
return ret;
}
struct mailbox_list_iterate_context {
struct mailbox_list *list;
+ pool_t pool;
enum mailbox_list_iter_flags flags;
bool failed;
{
struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(list);
struct acl_mailbox_list_iterate_context *ctx;
+ pool_t pool;
const char *p;
unsigned int i;
bool inboxcase;
- ctx = i_new(struct acl_mailbox_list_iterate_context, 1);
+ pool = pool_alloconly_create("mailbox list acl iter", 1024);
+ ctx = p_new(pool, struct acl_mailbox_list_iterate_context, 1);
+ ctx->ctx.pool = pool;
ctx->ctx.list = list;
ctx->ctx.flags = flags;
inboxcase = (list->ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0;
ctx->sep = mail_namespace_get_sep(list->ns);
- ctx->glob = imap_match_init_multiple(default_pool, patterns,
+ ctx->glob = imap_match_init_multiple(pool, patterns,
inboxcase, ctx->sep);
/* see if all patterns have only a single '*' and it's at the end.
we can use it to do some optimizations. */
ret = -1;
if (ctx->lookup_boxes != NULL)
mailbox_tree_deinit(&ctx->lookup_boxes);
- if (ctx->glob != NULL)
- imap_match_deinit(&ctx->glob);
- i_free(ctx);
+ pool_unref(&_ctx->pool);
return ret;
}