struct imap_metadata_iter *iter;
string_t *iter_entry_prefix;
+ string_t *delayed_errors;
+
unsigned int entry_idx;
bool first_entry_sent;
bool failed;
error_string = imap_metadata_transaction_get_last_error(
ctx->trans, &error);
if (error != MAIL_ERROR_NOTFOUND && error != MAIL_ERROR_PERM) {
- client_send_line(client, t_strconcat("* NO ", error_string, NULL));
+ str_printfa(ctx->delayed_errors, "* NO %s\r\n",
+ error_string);
ctx->failed = TRUE;
+ return;
}
}
/* iteration finished, get to the next entry */
if (imap_metadata_iter_deinit(&ctx->iter) < 0) {
enum mail_error error;
- client_send_line(client, t_strconcat("* NO ",
- imap_metadata_transaction_get_last_error(ctx->trans, &error),
- NULL));
+
+ str_printfa(ctx->delayed_errors, "* NO %s\r\n",
+ imap_metadata_transaction_get_last_error(ctx->trans, &error));
ctx->failed = TRUE;
}
return -1;
if (ctx->first_entry_sent)
o_stream_nsend_str(cmd->client->output, ")\r\n");
+ if (str_len(ctx->delayed_errors) > 0) {
+ o_stream_nsend(cmd->client->output,
+ str_data(ctx->delayed_errors),
+ str_len(ctx->delayed_errors));
+ str_truncate(ctx->delayed_errors, 0);
+ }
+
cmd_getmetadata_iter_deinit(ctx);
if (ctx->list_iter != NULL)
return cmd_getmetadata_mailbox_iter_next(ctx);
ctx->cmd = cmd;
ctx->maxsize = (uint32_t)-1;
ctx->cmd->context = ctx;
+ ctx->delayed_errors = str_new(cmd->pool, 128);
if (imap_arg_get_list(&args[0], &options)) {
if (!cmd_getmetadata_parse_options(ctx, options))