const char *internal_date_str;
time_t internal_date;
int ret, timezone_offset;
+ unsigned int save_count;
bool nonsync;
if (cmd->cancel) {
cmd_append_finish(ctx);
return TRUE;
}
- i_assert(ctx->count == seq_range_count(&changes.saved_uids));
msg = t_str_new(256);
- str_printfa(msg, "OK [APPENDUID %u ", changes.uid_validity);
- imap_write_seq_range(msg, &changes.saved_uids);
- str_append(msg, "] Append completed.");
+ save_count = seq_range_count(&changes.saved_uids);
+ if (save_count == 0) {
+ /* not supported by backend (virtual) */
+ str_append(msg, "OK Append completed.");
+ } else {
+ i_assert(ctx->count == save_count);
+ str_printfa(msg, "OK [APPENDUID %u ",
+ changes.uid_validity);
+ imap_write_seq_range(msg, &changes.saved_uids);
+ str_append(msg, "] Append completed.");
+ }
pool_unref(&changes.pool);
if (ctx->box == cmd->client->mailbox) {
mailbox_transaction_rollback(&t);
else if (mailbox_transaction_commit_get_changes(&t, &changes) < 0)
ret = -1;
- else if (copy_count == 0)
+ else if (copy_count == 0) {
str_append(msg, "OK No messages copied.");
- else {
+ pool_unref(&changes.pool);
+ } else if (seq_range_count(&changes.saved_uids) == 0) {
+ /* not supported by backend (virtual) */
+ str_append(msg, "OK Copy completed.");
+ pool_unref(&changes.pool);
+ } else {
i_assert(copy_count == seq_range_count(&changes.saved_uids));
str_printfa(msg, "OK [COPYUID %u %s ", changes.uid_validity,