Mercurial > dovecot > core-2.2
view src/imap/cmd-close.c @ 21495:5f2cc5e42122
imap: Share mailbox closing code in SELECT/UNSELECT/CLOSE/LOGOUT/deinit
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Sun, 05 Feb 2017 16:24:08 +0200 |
parents | 6291f52aea85 |
children | cb108f786fb4 |
line wrap: on
line source
/* Copyright (c) 2002-2017 Dovecot authors, see the included COPYING file */ #include "imap-common.h" #include "imap-commands.h" #include "imap-expunge.h" bool cmd_close(struct client_command_context *cmd) { struct client *client = cmd->client; struct mailbox *mailbox = client->mailbox; struct mail_storage *storage; const char *errstr, *tagged_reply = "OK Close completed."; enum mail_error error = MAIL_ERROR_NONE; if (!client_verify_open_mailbox(cmd)) return TRUE; i_assert(client->mailbox_change_lock == NULL); storage = mailbox_get_storage(mailbox); if (imap_expunge(mailbox, NULL, &client->expunged_count) < 0) { errstr = mailbox_get_last_error(mailbox, &error); if (error != MAIL_ERROR_PERM) client_send_untagged_storage_error(client, storage); else { tagged_reply = t_strdup_printf( "OK Closed without expunging: %s", errstr); } } if (mailbox_sync(mailbox, 0) < 0) client_send_untagged_storage_error(client, storage); imap_client_close_mailbox(client); client_send_tagline(cmd, tagged_reply); return TRUE; }