{
struct doveadm_mail_iter *iter;
struct mailbox_transaction_context *trans;
- struct mailbox_header_lookup_ctx *headers = NULL;
- int ret;
-
- if (array_count(&ctx->header_fields) > 1) {
- headers = mailbox_header_lookup_init(
- mailbox_transaction_get_mailbox(trans),
- array_idx(&ctx->header_fields, 0));
- }
if (doveadm_mail_iter_init(info, ctx->ctx.search_args,
- ctx->wanted_fields, headers,
+ ctx->wanted_fields,
+ array_idx(&ctx->header_fields, 0),
&trans, &iter) < 0)
- ret = -1;
- else {
- while (doveadm_mail_iter_next(iter, &ctx->mail)) {
- T_BEGIN {
- cmd_fetch_mail(ctx);
- } T_END;
- }
- ret = doveadm_mail_iter_deinit(&iter);
+ return -1;
+
+ while (doveadm_mail_iter_next(iter, &ctx->mail)) {
+ T_BEGIN {
+ cmd_fetch_mail(ctx);
+ } T_END;
}
- if (headers != NULL)
- mailbox_header_lookup_unref(&headers);
- return ret;
+ return doveadm_mail_iter_deinit(&iter);
}
static void
int doveadm_mail_iter_init(const struct mailbox_info *info,
struct mail_search_args *search_args,
enum mail_fetch_field wanted_fields,
- struct mailbox_header_lookup_ctx *wanted_headers,
+ const char *const *wanted_headers,
struct mailbox_transaction_context **trans_r,
struct doveadm_mail_iter **iter_r)
{
struct doveadm_mail_iter *iter;
+ struct mailbox_header_lookup_ctx *headers_ctx;
iter = i_new(struct doveadm_mail_iter, 1);
iter->box = mailbox_alloc(info->ns->list, info->name,
return -1;
}
+ headers_ctx = wanted_headers == NULL || wanted_headers[0] == NULL ?
+ NULL : mailbox_header_lookup_init(iter->box, wanted_headers);
+
mail_search_args_init(search_args, iter->box, FALSE, NULL);
iter->t = mailbox_transaction_begin(iter->box, 0);
iter->search_ctx = mailbox_search_init(iter->t, search_args, NULL,
- wanted_fields, wanted_headers);
+ wanted_fields, headers_ctx);
*trans_r = iter->t;
*iter_r = iter;
int doveadm_mail_iter_init(const struct mailbox_info *info,
struct mail_search_args *search_args,
enum mail_fetch_field wanted_fields,
- struct mailbox_header_lookup_ctx *wanted_headers,
+ const char *const *wanted_headers,
struct mailbox_transaction_context **trans_r,
struct doveadm_mail_iter **iter_r);
int doveadm_mail_iter_deinit(struct doveadm_mail_iter **iter);