]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imap: GETMETADATA: Replace failed boolean with last_error code
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 24 Jul 2019 12:26:08 +0000 (15:26 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 10 Sep 2019 07:02:10 +0000 (10:02 +0300)
src/imap/cmd-getmetadata.c

index b2a6e6eca5a2e234d7e91b4ef010e8d7bb27e119..f968ad0926d3969be6c4e2373dbb2b06d96f403e 100644 (file)
@@ -28,10 +28,10 @@ struct imap_getmetadata_context {
        string_t *iter_entry_prefix;
 
        string_t *delayed_errors;
+       enum mail_error last_error;
 
        unsigned int entry_idx;
        bool first_entry_sent;
-       bool failed;
 };
 
 static bool
@@ -162,7 +162,7 @@ static void cmd_getmetadata_send_entry(struct imap_getmetadata_context *ctx,
                if (error != MAIL_ERROR_NOTFOUND && error != MAIL_ERROR_PERM) {
                        str_printfa(ctx->delayed_errors, "* NO %s\r\n",
                                    error_string);
-                       ctx->failed = TRUE;
+                       ctx->last_error = error;
                        return;
                }
        }
@@ -175,7 +175,7 @@ static void cmd_getmetadata_send_entry(struct imap_getmetadata_context *ctx,
                                i_stream_get_name(value.value_stream),
                                i_stream_get_error(value.value_stream));
                        i_stream_unref(&value.value_stream);
-                       ctx->failed = TRUE;
+                       ctx->last_error = MAIL_ERROR_TEMP;
                        return;
                }
        } else {
@@ -260,11 +260,8 @@ cmd_getmetadata_send_entry_tree(struct imap_getmetadata_context *ctx,
                        if (subentry == NULL) {
                                /* iteration finished, get to the next entry */
                                if (imap_metadata_iter_deinit(&ctx->iter) < 0) {
-                                       enum mail_error error;
-
                                        str_printfa(ctx->delayed_errors, "* NO %s\r\n",
-                                               imap_metadata_transaction_get_last_error(ctx->trans, &error));
-                                       ctx->failed = TRUE;
+                                               imap_metadata_transaction_get_last_error(ctx->trans, &ctx->last_error));
                                }
                                return -1;
                        }
@@ -318,7 +315,7 @@ static void cmd_getmetadata_deinit(struct imap_getmetadata_context *ctx)
        if (ctx->list_iter != NULL &&
            mailbox_list_iter_deinit(&ctx->list_iter) < 0)
                client_send_list_error(cmd, cmd->client->user->namespaces->list);
-       else if (ctx->failed) {
+       else if (ctx->last_error != 0) {
                client_send_tagline(cmd, "NO Getmetadata failed to send some entries");
        } else if (ctx->largest_seen_size != 0) {
                client_send_tagline(cmd, t_strdup_printf(