]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Preserve box-name header when rebuilding index.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 16 Nov 2016 01:01:22 +0000 (03:01 +0200)
committerGitLab <gitlab@git.dovecot.net>
Wed, 16 Nov 2016 15:08:03 +0000 (17:08 +0200)
src/lib-storage/index/index-rebuild.c

index 6c32a587abd551ede67706e07393d56ff80d2594..0c2b79284d622dce73c8804ca6ebd1b1f182b659 100644 (file)
@@ -145,6 +145,25 @@ index_rebuild_header(struct index_rebuild_context *ctx,
        mail_index_view_close(&trans_view);
 }
 
+static void
+index_rebuild_box_name_header(struct index_rebuild_context *ctx)
+{
+       const void *name_hdr;
+       size_t name_hdr_size;
+
+       mail_index_get_header_ext(ctx->view, ctx->box->box_name_hdr_ext_id,
+                                 &name_hdr, &name_hdr_size);
+       if (name_hdr_size == 0 && ctx->backup_view != NULL) {
+               mail_index_get_header_ext(ctx->backup_view,
+                                         ctx->box->box_name_hdr_ext_id,
+                                         &name_hdr, &name_hdr_size);
+       }
+       if (name_hdr_size == 0)
+               return;
+       mail_index_update_header_ext(ctx->trans, ctx->box->box_name_hdr_ext_id,
+                                    0, name_hdr, name_hdr_size);
+}
+
 struct index_rebuild_context *
 index_index_rebuild_init(struct mailbox *box, struct mail_index_view *view,
                         struct mail_index_transaction *trans)
@@ -201,6 +220,7 @@ void index_index_rebuild_deinit(struct index_rebuild_context **_ctx,
                mail_cache_compress_unlock(&lock);
        }
        index_rebuild_header(ctx, cb);
+       index_rebuild_box_name_header(ctx);
        if (ctx->backup_index != NULL) {
                mail_index_view_close(&ctx->backup_view);
                mail_index_close(ctx->backup_index);