]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Set vsize extension when copying mails.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 30 Jan 2017 13:12:04 +0000 (15:12 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 30 Jan 2017 13:12:04 +0000 (15:12 +0200)
src/lib-storage/index/index-storage.c

index c3b91ddbf7a3faf54311bf322879a40e75247403..4a4459b64e5896c0d61ce1bb555159397102f261 100644 (file)
@@ -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;
 }