diff -r a3b162331cd1 src/lib-storage/index/dbox-single/sdbox-file.c --- a/src/lib-storage/index/dbox-single/sdbox-file.c Tue Mar 13 17:01:56 2012 +0200 +++ b/src/lib-storage/index/dbox-single/sdbox-file.c Tue Mar 13 17:12:09 2012 +0200 @@ -55,11 +55,11 @@ return &file->file; } -struct dbox_file *sdbox_file_create(struct sdbox_mailbox *mbox) +struct dbox_file *sdbox_file_create(struct sdbox_mailbox *mbox, uint32_t uid) { struct dbox_file *file; - file = sdbox_file_init(mbox, 0); + file = sdbox_file_init(mbox, uid); file->created = TRUE; file->fd = file->storage->v. file_create_fd(file, file->primary_path, FALSE); diff -r a3b162331cd1 src/lib-storage/index/dbox-single/sdbox-file.h --- a/src/lib-storage/index/dbox-single/sdbox-file.h Tue Mar 13 17:01:56 2012 +0200 +++ b/src/lib-storage/index/dbox-single/sdbox-file.h Tue Mar 13 17:12:09 2012 +0200 @@ -16,7 +16,7 @@ }; struct dbox_file *sdbox_file_init(struct sdbox_mailbox *mbox, uint32_t uid); -struct dbox_file *sdbox_file_create(struct sdbox_mailbox *mbox); +struct dbox_file *sdbox_file_create(struct sdbox_mailbox *mbox, uint32_t uid); void sdbox_file_free(struct dbox_file *file); /* Get file's extrefs metadata. */ diff -r a3b162331cd1 src/lib-storage/index/dbox-single/sdbox-save.c --- a/src/lib-storage/index/dbox-single/sdbox-save.c Tue Mar 13 17:01:56 2012 +0200 +++ b/src/lib-storage/index/dbox-single/sdbox-save.c Tue Mar 13 17:12:09 2012 +0200 @@ -90,7 +90,7 @@ struct dbox_file *file; int ret; - file = sdbox_file_create(ctx->mbox); + file = sdbox_file_create(ctx->mbox, _ctx->uid); ctx->append_ctx = dbox_file_append_init(file); ret = dbox_file_get_append_stream(ctx->append_ctx, &ctx->ctx.dbox_output); @@ -233,8 +233,12 @@ ret = seq_range_array_iter_nth(&iter, n++, &uid); i_assert(ret); - if (sdbox_file_assign_uid(sfile, uid) < 0) - return -1; + if (sfile->uid != 0) { + i_assert(sfile->uid == uid); + } else { + if (sdbox_file_assign_uid(sfile, uid) < 0) + return -1; + } } i_assert(!seq_range_array_iter_nth(&iter, n, &uid)); return 0;