From b537064862d1674a9b1da0fecd9bc28f90f9eebc Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 28 Nov 2018 12:50:51 +0200 Subject: [PATCH] imap: Add and use client_enabled_mailbox_features() This simplifies the following commits. --- src/imap/cmd-notify.c | 2 +- src/imap/cmd-select.c | 2 +- src/imap/imap-client.c | 5 +++++ src/imap/imap-client.h | 3 +++ src/imap/imap-commands-util.c | 2 +- src/imap/imap-state.c | 2 +- src/imap/imap-status.c | 2 +- 7 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/imap/cmd-notify.c b/src/imap/cmd-notify.c index 2a7c198942..7fb2417de8 100644 --- a/src/imap/cmd-notify.c +++ b/src/imap/cmd-notify.c @@ -437,7 +437,7 @@ imap_notify_box_send_status(struct client_command_context *cmd, box = mailbox_alloc(info->ns->list, info->vname, MAILBOX_FLAG_READONLY); mailbox_set_reason(box, "NOTIFY send STATUS"); - (void)mailbox_enable(box, ctx->client->enabled_features); + (void)mailbox_enable(box, client_enabled_mailbox_features(ctx->client)); if (imap_status_get(cmd, info->ns, info->vname, &items, &result) < 0) { if (result.error == MAIL_ERROR_PERM) diff --git a/src/imap/cmd-select.c b/src/imap/cmd-select.c index 9892377430..9b7c33d218 100644 --- a/src/imap/cmd-select.c +++ b/src/imap/cmd-select.c @@ -290,7 +290,7 @@ select_open(struct imap_select_context *ctx, const char *mailbox, bool readonly) return -1; } - ret = mailbox_enable(ctx->box, client->enabled_features); + ret = mailbox_enable(ctx->box, client_enabled_mailbox_features(client)); if (ret < 0 || mailbox_sync(ctx->box, MAILBOX_SYNC_FLAG_FULL_READ) < 0) { client_send_box_error(ctx->cmd, ctx->box); diff --git a/src/imap/imap-client.c b/src/imap/imap-client.c index 3006a1c588..6341a99efe 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -1491,6 +1491,11 @@ bool client_has_enabled(struct client *client, unsigned int feature_idx) return (client->enabled_features & features) != 0; } +enum mailbox_feature client_enabled_mailbox_features(struct client *client) +{ + return client->enabled_features; +} + struct imap_search_update * client_search_update_lookup(struct client *client, const char *tag, unsigned int *idx_r) diff --git a/src/imap/imap-client.h b/src/imap/imap-client.h index 5404dc0418..dbad74155b 100644 --- a/src/imap/imap-client.h +++ b/src/imap/imap-client.h @@ -308,6 +308,9 @@ bool client_handle_search_save_ambiguity(struct client_command_context *cmd); int client_enable(struct client *client, unsigned int feature_idx); /* Returns TRUE if the given feature is enabled */ bool client_has_enabled(struct client *client, unsigned int feature_idx); +/* Returns mailbox features that are currently enabled. */ +enum mailbox_feature client_enabled_mailbox_features(struct client *client); + /* Send client processing to imap-idle process. If successful, returns TRUE and destroys the client. */ bool imap_client_hibernate(struct client **client); diff --git a/src/imap/imap-commands-util.c b/src/imap/imap-commands-util.c index 5a9fc47861..d7492676ba 100644 --- a/src/imap/imap-commands-util.c +++ b/src/imap/imap-commands-util.c @@ -121,7 +121,7 @@ int client_open_save_dest_box(struct client_command_context *cmd, mailbox_free(&box); return -1; } - if (mailbox_enable(box, cmd->client->enabled_features) < 0) { + if (mailbox_enable(box, client_enabled_mailbox_features(cmd->client)) < 0) { client_send_box_error(cmd, box); mailbox_free(&box); return -1; diff --git a/src/imap/imap-state.c b/src/imap/imap-state.c index 36d52d7884..e2c2342fe9 100644 --- a/src/imap/imap-state.c +++ b/src/imap/imap-state.c @@ -586,7 +586,7 @@ import_state_mailbox_open(struct client *client, return -1; } - ret = mailbox_enable(box, client->enabled_features); + ret = mailbox_enable(box, client_enabled_mailbox_features(client)); if (ret < 0 || mailbox_sync(box, 0) < 0) { *error_r = t_strdup_printf("Couldn't sync mailbox: %s", mailbox_get_last_internal_error(box, NULL)); diff --git a/src/imap/imap-status.c b/src/imap/imap-status.c index 578e483e1b..5ab3958346 100644 --- a/src/imap/imap-status.c +++ b/src/imap/imap-status.c @@ -75,7 +75,7 @@ int imap_status_get(struct client_command_context *cmd, /* open the mailbox */ box = mailbox_alloc(ns->list, mailbox, MAILBOX_FLAG_READONLY); mailbox_set_reason(box, "STATUS"); - (void)mailbox_enable(box, client->enabled_features); + (void)mailbox_enable(box, client_enabled_mailbox_features(client)); } if ((items->status & STATUS_HIGHESTMODSEQ) != 0)