changeset 2533:89911d2a9126 HEAD

Don't break if saving messages to maildir without index files.
author Timo Sirainen <tss@iki.fi>
date Thu, 02 Sep 2004 19:53:36 +0300
parents c80b942d5040
children 9c55e054e57d
files src/lib-storage/index/maildir/maildir-save.c src/lib-storage/index/maildir/maildir-storage.h src/lib-storage/index/maildir/maildir-sync.c
diffstat 3 files changed, 9 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-save.c	Thu Sep 02 19:53:06 2004 +0300
+++ b/src/lib-storage/index/maildir/maildir-save.c	Thu Sep 02 19:53:36 2004 +0300
@@ -323,6 +323,11 @@
 		return -1;
 	}
 
+	if (maildir_sync_index(ctx->ibox, TRUE) < 0) {
+		maildir_save_commit_abort(ctx, ctx->files);
+		return -1;
+	}
+
 	first_uid = maildir_uidlist_get_next_uid(ctx->ibox->uidlist);
 	mail_index_append_assign_uids(ctx->trans, first_uid, &last_uid);
 
--- a/src/lib-storage/index/maildir/maildir-storage.h	Thu Sep 02 19:53:06 2004 +0300
+++ b/src/lib-storage/index/maildir/maildir-storage.h	Thu Sep 02 19:53:36 2004 +0300
@@ -42,6 +42,7 @@
 struct mailbox_sync_context *
 maildir_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags);
 int maildir_storage_sync_force(struct index_mailbox *ibox);
+int maildir_sync_index(struct index_mailbox *ibox, int partial);
 
 struct mailbox_transaction_context *
 maildir_transaction_begin(struct mailbox *box, int hide);
--- a/src/lib-storage/index/maildir/maildir-sync.c	Thu Sep 02 19:53:06 2004 +0300
+++ b/src/lib-storage/index/maildir/maildir-sync.c	Thu Sep 02 19:53:36 2004 +0300
@@ -573,9 +573,8 @@
 	return 0;
 }
 
-static int maildir_sync_index(struct maildir_sync_context *ctx)
+int maildir_sync_index(struct index_mailbox *ibox, int partial)
 {
-	struct index_mailbox *ibox = ctx->ibox;
 	struct maildir_index_sync_context sync_ctx;
 	struct maildir_uidlist_iter_ctx *iter;
 	struct mail_index_transaction *trans;
@@ -761,7 +760,7 @@
 	}
 	maildir_uidlist_iter_deinit(iter);
 
-	if (!ctx->partial) {
+	if (!partial) {
 		/* expunge the rest */
 		for (seq++; seq <= hdr->messages_count; seq++)
 			mail_index_expunge(trans, seq);
@@ -892,7 +891,7 @@
 	/* finish uidlist syncing, but keep it still locked */
 	maildir_uidlist_sync_finish(ctx->uidlist_sync_ctx);
 	if (!ctx->ibox->syncing_commit) {
-		if (maildir_sync_index(ctx) < 0)
+		if (maildir_sync_index(ctx->ibox, ctx->partial) < 0)
 			return -1;
 	}