From: Timo Sirainen Date: Mon, 30 Jan 2017 13:12:04 +0000 (+0200) Subject: lib-storage: Set vsize extension when copying mails. X-Git-Tag: 2.3.0.rc1~2246 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=00b2516ff54d1f9273beebc5861526ec2fd391a2;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Set vsize extension when copying mails. --- diff --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index c3b91ddbf7..4a4459b64e 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -903,6 +903,29 @@ mail_copy_cache_field(struct mail_save_context *ctx, struct mail *src_mail, } } +static void +index_copy_vsize_extension(struct mail_save_context *ctx, + struct mail *src_mail, uint32_t dest_seq) +{ + struct index_mail *src_imail = (struct index_mail *)src_mail; + unsigned int idx; + bool expunged ATTR_UNUSED; + + (void)index_mail_get_vsize_extension(src_mail); + if (src_imail->data.virtual_size == (uoff_t)-1) + return; + + if (mail_index_map_get_ext_idx(ctx->transaction->view->map, + ctx->transaction->box->mail_vsize_ext_id, + &idx) && + src_imail->data.virtual_size < (uint32_t)-1) { + uint32_t vsize = src_imail->data.virtual_size+1; + mail_index_update_ext(ctx->transaction->itrans, dest_seq, + ctx->transaction->box->mail_vsize_ext_id, + &vsize, NULL); + } +} + void index_copy_cache_fields(struct mail_save_context *ctx, struct mail *src_mail, uint32_t dest_seq) { @@ -928,6 +951,7 @@ void index_copy_cache_fields(struct mail_save_context *ctx, mail_copy_cache_field(ctx, src_mail, dest_seq, field->name, buf); } + index_copy_vsize_extension(ctx, src_mail, dest_seq); } T_END; }