[dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-copy.c, 1.34, 1.35 maildir-mail.c, 1.13, 1.14 maildir-save.c, 1.49, 1.50 maildir-storage.c, 1.95, 1.96 maildir-storage.h, 1.35, 1.36 maildir-sync.c, 1.50, 1.51 maildir-transaction.c, 1.7, 1.8 maildir-uidlist.c, 1.35, 1.36 maildir-uidlist.h, 1.12, 1.13 maildir-util.c, 1.9, 1.10

cras at dovecot.org cras at dovecot.org
Fri Apr 8 16:13:50 EEST 2005


Update of /var/lib/cvs/dovecot/src/lib-storage/index/maildir
In directory talvi:/tmp/cvs-serv23481/lib-storage/index/maildir

Modified Files:
	maildir-copy.c maildir-mail.c maildir-save.c maildir-storage.c 
	maildir-storage.h maildir-sync.c maildir-transaction.c 
	maildir-uidlist.c maildir-uidlist.h maildir-util.c 
Log Message:
Moved mbox/maildir-specific variables from struct index_mailbox to
mbox_mailbox and maildir_mailbox.



Index: maildir-copy.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-copy.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- maildir-copy.c	15 Mar 2005 19:01:52 -0000	1.34
+++ maildir-copy.c	8 Apr 2005 13:13:47 -0000	1.35
@@ -10,7 +10,7 @@
 #include <unistd.h>
 
 struct maildir_copy_context {
-	struct index_mailbox *ibox;
+	struct maildir_mailbox *mbox;
 	int hardlink;
 
 	pool_t pool;
@@ -27,7 +27,7 @@
 	const char *fname;
 };
 
-static int do_hardlink(struct index_mailbox *ibox, const char *path,
+static int do_hardlink(struct maildir_mailbox *mbox, const char *path,
 		       void *context)
 {
 	struct hardlink_ctx *ctx = context;
@@ -37,14 +37,14 @@
 			return 0;
 
 		if (ENOSPACE(errno)) {
-			mail_storage_set_error(ibox->box.storage,
+			mail_storage_set_error(&mbox->storage->storage,
 					       "Not enough disk space");
 			return -1;
 		}
 		if (errno == EACCES || errno == EXDEV)
 			return 1;
 
-		mail_storage_set_critical(ibox->box.storage,
+		mail_storage_set_critical(&mbox->storage->storage,
 					  "link(%s, %s) failed: %m",
 					  path, ctx->dest_path);
 		return -1;
@@ -57,7 +57,8 @@
 static int maildir_copy_hardlink(struct mail *mail,
 				 struct maildir_copy_context *ctx)
 {
-	struct index_mail *imail = (struct index_mail *) mail;
+	struct index_mail *imail = (struct index_mail *)mail;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)imail->ibox;
 	struct hardlink_ctx do_ctx;
 	struct rollback *rb;
 	enum mail_flags flags;
@@ -71,9 +72,9 @@
 
 	memset(&do_ctx, 0, sizeof(do_ctx));
 	do_ctx.dest_path =
-		t_strconcat(ctx->ibox->path, "/new/", dest_fname, NULL);
+		t_strconcat(ctx->mbox->path, "/new/", dest_fname, NULL);
 
-	if (maildir_file_do(imail->ibox, imail->mail.mail.uid,
+	if (maildir_file_do(mbox, imail->mail.mail.uid,
 			    do_hardlink, &do_ctx) < 0)
 		return -1;
 
@@ -89,7 +90,7 @@
 }
 
 static struct maildir_copy_context *
-maildir_copy_init(struct index_mailbox *ibox)
+maildir_copy_init(struct maildir_mailbox *mbox)
 {
 	struct maildir_copy_context *ctx;
 	pool_t pool;
@@ -99,7 +100,7 @@
 	ctx = p_new(pool, struct maildir_copy_context, 1);
 	ctx->pool = pool;
 	ctx->hardlink = getenv("MAILDIR_COPY_WITH_HARDLINKS") != NULL;
-	ctx->ibox = ibox;
+	ctx->mbox = mbox;
 	return ctx;
 }
 
@@ -115,7 +116,7 @@
 
 	for (rb = ctx->rollbacks; rb != NULL; rb = rb->next) {
 		t_push();
-		(void)unlink(t_strconcat(ctx->ibox->path,
+		(void)unlink(t_strconcat(ctx->mbox->path,
 					 "/new/", rb->fname, NULL));
 		t_pop();
 	}
@@ -128,14 +129,16 @@
 {
 	struct maildir_transaction_context *t =
 		(struct maildir_transaction_context *)_t;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)t->ictx.ibox;
 	struct maildir_copy_context *ctx;
 	int ret;
 
 	if (t->copy_ctx == NULL)
-		t->copy_ctx = maildir_copy_init(t->ictx.ibox);
+		t->copy_ctx = maildir_copy_init(mbox);
 	ctx = t->copy_ctx;
 
-	if (ctx->hardlink && mail->box->storage == ctx->ibox->box.storage) {
+	if (ctx->hardlink &&
+	    mail->box->storage == &ctx->mbox->storage->storage) {
 		// FIXME: handle dest_mail
 		t_push();
 		ret = maildir_copy_hardlink(mail, ctx);

Index: maildir-mail.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-mail.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- maildir-mail.c	29 Mar 2005 16:48:47 -0000	1.13
+++ maildir-mail.c	8 Apr 2005 13:13:47 -0000	1.14
@@ -10,7 +10,8 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-static int do_open(struct index_mailbox *ibox, const char *path, void *context)
+static int
+do_open(struct maildir_mailbox *mbox, const char *path, void *context)
 {
 	int *fd = context;
 
@@ -20,12 +21,13 @@
 	if (errno == ENOENT)
 		return 0;
 
-	mail_storage_set_critical(ibox->box.storage,
+	mail_storage_set_critical(&mbox->storage->storage,
 				  "open(%s) failed: %m", path);
 	return -1;
 }
 
-static int do_stat(struct index_mailbox *ibox, const char *path, void *context)
+static int
+do_stat(struct maildir_mailbox *mbox, const char *path, void *context)
 {
 	struct stat *st = context;
 
@@ -34,20 +36,20 @@
 	if (errno == ENOENT)
 		return 0;
 
-	mail_storage_set_critical(ibox->box.storage,
+	mail_storage_set_critical(&mbox->storage->storage,
 				  "stat(%s) failed: %m", path);
 	return -1;
 }
 
 static struct istream *
-maildir_open_mail(struct index_mailbox *ibox, uint32_t uid, int *deleted)
+maildir_open_mail(struct maildir_mailbox *mbox, uint32_t uid, int *deleted)
 {
 	int fd;
 
 	*deleted = FALSE;
 
 	fd = -1;
-	if (maildir_file_do(ibox, uid, do_open, &fd) < 0)
+	if (maildir_file_do(mbox, uid, do_open, &fd) < 0)
 		return NULL;
 
 	if (fd == -1) {
@@ -55,7 +57,7 @@
 		return NULL;
 	}
 
-	if (ibox->mail_read_mmaped) {
+	if (mbox->ibox.mail_read_mmaped) {
 		return i_stream_create_mmap(fd, default_pool,
 					    MAIL_MMAP_BLOCK_SIZE, 0, 0, TRUE);
 	} else {
@@ -66,7 +68,8 @@
 
 static time_t maildir_mail_get_received_date(struct mail *_mail)
 {
-	struct index_mail *mail = (struct index_mail *) _mail;
+	struct index_mail *mail = (struct index_mail *)_mail;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox;
 	struct index_mail_data *data = &mail->data;
 	struct stat st;
 	int fd;
@@ -85,12 +88,12 @@
 		i_assert(fd != -1);
 
 		if (fstat(fd, &st) < 0) {
-			mail_storage_set_critical(mail->ibox->box.storage,
+			mail_storage_set_critical(&mbox->storage->storage,
 						  "fstat(maildir) failed: %m");
 			return (time_t)-1;
 		}
 	} else {
-		if (maildir_file_do(mail->ibox, mail->mail.mail.uid,
+		if (maildir_file_do(mbox, mail->mail.mail.uid,
 				    do_stat, &st) <= 0)
 			return (time_t)-1;
 	}
@@ -105,6 +108,7 @@
 static uoff_t maildir_mail_get_virtual_size(struct mail *_mail)
 {
 	struct index_mail *mail = (struct index_mail *)_mail;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox;
 	struct index_mail_data *data = &mail->data;
 	const char *fname, *p;
 	uoff_t virtual_size;
@@ -119,7 +123,7 @@
 			return data->virtual_size;
 	}
 
-	fname = maildir_uidlist_lookup(mail->ibox->uidlist,
+	fname = maildir_uidlist_lookup(mbox->uidlist,
 				       mail->mail.mail.uid, &flags);
 	if (fname == NULL)
 		return (uoff_t)-1;
@@ -149,11 +153,12 @@
 maildir_mail_get_special(struct mail *_mail, enum mail_fetch_field field)
 {
 	struct index_mail *mail = (struct index_mail *)_mail;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox;
 	enum maildir_uidlist_rec_flag flags;
 	const char *fname, *end;
 
 	if (field == MAIL_FETCH_UIDL_FILE_NAME) {
-	    	fname = maildir_uidlist_lookup(mail->ibox->uidlist,
+	    	fname = maildir_uidlist_lookup(mbox->uidlist,
 					       mail->mail.mail.uid, &flags);
 		end = strchr(fname, ':');
 		return end == NULL ? fname : t_strdup_until(fname, end);
@@ -165,6 +170,7 @@
 static uoff_t maildir_mail_get_physical_size(struct mail *_mail)
 {
 	struct index_mail *mail = (struct index_mail *)_mail;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox;
 	struct index_mail_data *data = &mail->data;
 	struct stat st;
 	const char *fname, *p;
@@ -175,7 +181,7 @@
 	if (size != (uoff_t)-1)
 		return size;
 
-	fname = maildir_uidlist_lookup(mail->ibox->uidlist,
+	fname = maildir_uidlist_lookup(mbox->uidlist,
 				       mail->mail.mail.uid, &flags);
 	if (fname == NULL)
 		return (uoff_t)-1;
@@ -195,7 +201,7 @@
 	}
 
 	if (size == (uoff_t)-1) {
-		if (maildir_file_do(mail->ibox, mail->mail.mail.uid,
+		if (maildir_file_do(mbox, mail->mail.mail.uid,
 				    do_stat, &st) <= 0)
 			return (uoff_t)-1;
 		size = st.st_size;
@@ -212,12 +218,13 @@
 					       struct message_size *hdr_size,
 					       struct message_size *body_size)
 {
-	struct index_mail *mail = (struct index_mail *) _mail;
+	struct index_mail *mail = (struct index_mail *)_mail;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox;
 	struct index_mail_data *data = &mail->data;
 	int deleted;
 
 	if (data->stream == NULL) {
-		data->stream = maildir_open_mail(mail->ibox,
+		data->stream = maildir_open_mail(mbox,
 						 mail->mail.mail.uid, &deleted);
 		if (data->stream == NULL) {
 			_mail->expunged = deleted;

Index: maildir-save.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-save.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -d -r1.49 -r1.50
--- maildir-save.c	3 Apr 2005 11:36:16 -0000	1.49
+++ maildir-save.c	8 Apr 2005 13:13:47 -0000	1.50
@@ -24,7 +24,7 @@
 	struct mail_save_context ctx;
 	pool_t pool;
 
-	struct index_mailbox *ibox;
+	struct maildir_mailbox *mbox;
 	struct mail_index_transaction *trans;
 	struct maildir_uidlist_sync_ctx *sync_ctx;
 
@@ -62,16 +62,16 @@
 	else {
 		ret = -1;
 		if (ENOSPACE(errno)) {
-			mail_storage_set_error(ctx->ibox->box.storage,
+			mail_storage_set_error(&ctx->mbox->storage->storage,
 					       "Not enough disk space");
 		} else {
-			mail_storage_set_critical(ctx->ibox->box.storage,
+			mail_storage_set_critical(&ctx->mbox->storage->storage,
 				"link(%s, %s) failed: %m", tmp_path, new_path);
 		}
 	}
 
 	if (unlink(tmp_path) < 0 && errno != ENOENT) {
-		mail_storage_set_critical(ctx->ibox->box.storage,
+		mail_storage_set_critical(&ctx->mbox->storage->storage,
 			"unlink(%s) failed: %m", tmp_path);
 	}
 	t_pop();
@@ -81,7 +81,7 @@
 static struct maildir_save_context *
 maildir_save_transaction_init(struct maildir_transaction_context *t)
 {
-        struct index_mailbox *ibox = t->ictx.ibox;
+        struct maildir_mailbox *mbox = (struct maildir_mailbox *)t->ictx.ibox;
 	struct maildir_save_context *ctx;
 	pool_t pool;
 
@@ -89,12 +89,12 @@
 	ctx = p_new(pool, struct maildir_save_context, 1);
 	ctx->ctx.transaction = &t->ictx.mailbox_ctx;
 	ctx->pool = pool;
-	ctx->ibox = ibox;
+	ctx->mbox = mbox;
 	ctx->trans = t->ictx.trans;
 
-	ctx->tmpdir = p_strconcat(pool, ibox->path, "/tmp", NULL);
-	ctx->newdir = p_strconcat(pool, ibox->path, "/new", NULL);
-	ctx->curdir = p_strconcat(pool, ibox->path, "/cur", NULL);
+	ctx->tmpdir = p_strconcat(pool, mbox->path, "/tmp", NULL);
+	ctx->newdir = p_strconcat(pool, mbox->path, "/new", NULL);
+	ctx->curdir = p_strconcat(pool, mbox->path, "/cur", NULL);
 	return ctx;
 }
 
@@ -108,7 +108,7 @@
 	struct maildir_transaction_context *t =
 		(struct maildir_transaction_context *)_t;
 	struct maildir_save_context *ctx;
-	struct index_mailbox *ibox = t->ictx.ibox;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)t->ictx.ibox;
 	struct maildir_filename *mf;
 	struct ostream *output;
 	const char *fname, *dest_fname, *path;
@@ -122,7 +122,7 @@
 	ctx = t->save_ctx;
 
 	/* create a new file in tmp/ directory */
-	ctx->fd = maildir_create_tmp(ibox, ctx->tmpdir, ibox->mail_create_mode,
+	ctx->fd = maildir_create_tmp(mbox, ctx->tmpdir, mbox->mail_create_mode,
 				     &path);
 	if (ctx->fd == -1) {
 		ctx->failed = TRUE;
@@ -138,14 +138,14 @@
 	ctx->input = input;
 
 	output = o_stream_create_file(ctx->fd, system_pool, 0, FALSE);
-	ctx->output = (ctx->ibox->storage->storage.flags &
+	ctx->output = (ctx->mbox->storage->storage.flags &
 		       MAIL_STORAGE_FLAG_SAVE_CRLF) != 0 ?
 		o_stream_create_crlf(default_pool, output) :
 		o_stream_create_lf(default_pool, output);
 	o_stream_unref(output);
 
 	flags &= ~MAIL_RECENT;
-	if (ibox->keep_recent)
+	if (mbox->ibox.keep_recent)
 		flags |= MAIL_RECENT;
 
 	/* now, we want to be able to rollback the whole append session,
@@ -210,7 +210,7 @@
 
 		if (utime(path, &buf) < 0) {
 			ctx->failed = TRUE;
-			mail_storage_set_critical(ctx->ibox->box.storage,
+			mail_storage_set_critical(&ctx->mbox->storage->storage,
 						  "utime(%s) failed: %m", path);
 		}
 	}
@@ -222,12 +222,12 @@
 	/* FIXME: when saving multiple messages, we could get better
 	   performance if we left the fd open and fsync()ed it later */
 	if (fsync(ctx->fd) < 0) {
-		mail_storage_set_critical(ctx->ibox->box.storage,
+		mail_storage_set_critical(&ctx->mbox->storage->storage,
 					  "fsync(%s) failed: %m", path);
 		ctx->failed = TRUE;
 	}
 	if (close(ctx->fd) < 0) {
-		mail_storage_set_critical(ctx->ibox->box.storage,
+		mail_storage_set_critical(&ctx->mbox->storage->storage,
 					  "close(%s) failed: %m", path);
 		ctx->failed = TRUE;
 	}
@@ -236,17 +236,17 @@
 	if (ctx->failed) {
 		/* delete the tmp file */
 		if (unlink(path) < 0 && errno != ENOENT) {
-			mail_storage_set_critical(ctx->ibox->box.storage,
+			mail_storage_set_critical(&ctx->mbox->storage->storage,
 				"unlink(%s) failed: %m", path);
 		}
 
 		errno = output_errno;
 		if (ENOSPACE(errno)) {
-			mail_storage_set_error(ctx->ibox->box.storage,
+			mail_storage_set_error(&ctx->mbox->storage->storage,
 					       "Not enough disk space");
 		} else if (errno != 0) {
-			mail_storage_set_critical(ctx->ibox->box.storage,
-				"write(%s) failed: %m", ctx->ibox->path);
+			mail_storage_set_critical(&ctx->mbox->storage->storage,
+				"write(%s) failed: %m", ctx->mbox->path);
 		}
 
 		ctx->files = ctx->files->next;
@@ -308,13 +308,13 @@
 
 	i_assert(ctx->output == NULL);
 
-	sync_ctx = maildir_sync_index_begin(ctx->ibox);
+	sync_ctx = maildir_sync_index_begin(ctx->mbox);
 	if (sync_ctx == NULL) {
 		maildir_save_commit_abort(ctx, ctx->files);
 		return -1;
 	}
 
-	ret = maildir_uidlist_lock(ctx->ibox->uidlist);
+	ret = maildir_uidlist_lock(ctx->mbox->uidlist);
 	if (ret <= 0) {
 		/* error or timeout - our transaction is broken */
 		maildir_sync_index_abort(sync_ctx);
@@ -327,14 +327,14 @@
 		return -1;
 	}
 
-	first_uid = maildir_uidlist_get_next_uid(ctx->ibox->uidlist);
+	first_uid = maildir_uidlist_get_next_uid(ctx->mbox->uidlist);
 	mail_index_append_assign_uids(ctx->trans, first_uid, &last_uid);
 
 	flags = MAILDIR_UIDLIST_REC_FLAG_NEW_DIR |
 		MAILDIR_UIDLIST_REC_FLAG_RECENT;
 
 	/* move them into new/ */
-	ctx->sync_ctx = maildir_uidlist_sync_init(ctx->ibox->uidlist, TRUE);
+	ctx->sync_ctx = maildir_uidlist_sync_init(ctx->mbox->uidlist, TRUE);
 	for (mf = ctx->files; mf != NULL; mf = mf->next) {
 		fname = mf->dest != NULL ? mf->dest : mf->basename;
 		if (maildir_file_move(ctx, mf->basename, mf->dest) < 0 ||

Index: maildir-storage.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-storage.c,v
retrieving revision 1.95
retrieving revision 1.96
diff -u -d -r1.95 -r1.96
--- maildir-storage.c	3 Apr 2005 11:36:16 -0000	1.95
+++ maildir-storage.c	8 Apr 2005 13:13:47 -0000	1.96
@@ -391,14 +391,16 @@
 
 static int maildir_is_recent(struct index_mailbox *ibox, uint32_t uid)
 {
-	return maildir_uidlist_is_recent(ibox->uidlist, uid);
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)ibox;
+
+	return maildir_uidlist_is_recent(mbox->uidlist, uid);
 }
 
 static struct mailbox *
 maildir_open(struct index_storage *storage, const char *name,
 	     enum mailbox_open_flags flags)
 {
-	struct index_mailbox *ibox;
+	struct maildir_mailbox *mbox;
 	struct mail_index *index;
 	const char *path, *index_dir, *control_dir;
 	struct stat st;
@@ -418,32 +420,33 @@
 		mail_index_set_permissions(index, st.st_mode & 0666, st.st_gid);
 
 	pool = pool_alloconly_create("mailbox", 256);
-	ibox = p_new(pool, struct index_mailbox, 1);
-	ibox->box = maildir_mailbox;
-	ibox->box.pool = pool;
-	ibox->storage = storage;
+	mbox = p_new(pool, struct maildir_mailbox, 1);
+	mbox->ibox.box = maildir_mailbox;
+	mbox->ibox.box.pool = pool;
+	mbox->ibox.storage = storage;
+	mbox->ibox.mail_vfuncs = &maildir_mail_vfuncs;
+	mbox->ibox.is_recent = maildir_is_recent;
 
-	if (index_storage_mailbox_init(ibox, index, name, flags) < 0) {
+	if (index_storage_mailbox_init(&mbox->ibox, index, name, flags) < 0) {
 		/* the memory was already freed */
 		return NULL;
 	}
 
-	ibox->path = p_strdup(pool, path);
-	ibox->control_dir = p_strdup(pool, control_dir);
+	mbox->storage = storage;
+	mbox->path = p_strdup(pool, path);
+	mbox->control_dir = p_strdup(pool, control_dir);
 
-	ibox->mail_vfuncs = &maildir_mail_vfuncs;
-	ibox->uidlist = maildir_uidlist_init(ibox);
-	ibox->is_recent = maildir_is_recent;
+	mbox->uidlist = maildir_uidlist_init(mbox);
 
 	if (!shared)
-		ibox->mail_create_mode = 0600;
+		mbox->mail_create_mode = 0600;
 	else {
-		ibox->mail_create_mode = st.st_mode & 0666;
-		ibox->private_flags_mask = MAIL_SEEN;
+		mbox->mail_create_mode = st.st_mode & 0666;
+		mbox->private_flags_mask = MAIL_SEEN;
 	}
 
 
-	return &ibox->box;
+	return &mbox->ibox.box;
 }
 
 static struct mailbox *
@@ -811,7 +814,7 @@
 
 static int maildir_storage_close(struct mailbox *box)
 {
-	struct index_mailbox *ibox = (struct index_mailbox *)box;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
 	int ret = 0;
 
 	/*FIXME:if (!maildir_try_flush_dirty_flags(ibox->index, TRUE)) {
@@ -819,7 +822,7 @@
 		ret = -1;
 	}*/
 
-	maildir_uidlist_deinit(ibox->uidlist);
+	maildir_uidlist_deinit(mbox->uidlist);
         index_storage_mailbox_free(box);
 	return ret;
 }
@@ -828,21 +831,21 @@
 maildir_notify_changes(struct mailbox *box, unsigned int min_interval,
 		       mailbox_notify_callback_t *callback, void *context)
 {
-	struct index_mailbox *ibox = (struct index_mailbox *)box;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
 
-	ibox->min_notify_interval = min_interval;
-	ibox->notify_callback = callback;
-	ibox->notify_context = context;
+	mbox->ibox.min_notify_interval = min_interval;
+	mbox->ibox.notify_callback = callback;
+	mbox->ibox.notify_context = context;
 
 	if (callback == NULL) {
-		index_mailbox_check_remove_all(ibox);
+		index_mailbox_check_remove_all(&mbox->ibox);
 		return;
 	}
 
-	index_mailbox_check_add(ibox,
-		t_strconcat(ibox->storage->dir, "/new", NULL), TRUE);
-	index_mailbox_check_add(ibox,
-		t_strconcat(ibox->storage->dir, "/cur", NULL), TRUE);
+	index_mailbox_check_add(&mbox->ibox,
+		t_strconcat(mbox->storage->dir, "/new", NULL), TRUE);
+	index_mailbox_check_add(&mbox->ibox,
+		t_strconcat(mbox->storage->dir, "/cur", NULL), TRUE);
 }
 
 struct mail_storage maildir_storage = {

Index: maildir-storage.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-storage.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- maildir-storage.h	15 Mar 2005 19:01:52 -0000	1.35
+++ maildir-storage.h	8 Apr 2005 13:13:47 -0000	1.36
@@ -14,6 +14,23 @@
 struct maildir_save_context;
 struct maildir_copy_context;
 
+struct maildir_mailbox {
+	struct index_mailbox ibox;
+	struct index_storage *storage;
+
+	const char *path, *control_dir;
+
+	/* maildir sync: */
+	struct maildir_uidlist *uidlist;
+	time_t last_new_mtime, last_cur_mtime, last_new_sync_time;
+	time_t dirty_cur_time;
+
+        mode_t mail_create_mode;
+	unsigned int private_flags_mask;
+
+	unsigned int syncing_commit:1;
+};
+
 struct maildir_transaction_context {
 	struct index_transaction_context ictx;
 	struct maildir_save_context *save_ctx;
@@ -23,13 +40,13 @@
 extern struct mail_vfuncs maildir_mail_vfuncs;
 
 /* Return -1 = error, 0 = file not found, 1 = ok */
-typedef int maildir_file_do_func(struct index_mailbox *ibox,
+typedef int maildir_file_do_func(struct maildir_mailbox *mbox,
 				 const char *path, void *context);
 
-int maildir_file_do(struct index_mailbox *ibox, uint32_t seq,
+int maildir_file_do(struct maildir_mailbox *mbox, uint32_t seq,
 		    maildir_file_do_func *func, void *context);
 const char *maildir_generate_tmp_filename(const struct timeval *tv);
-int maildir_create_tmp(struct index_mailbox *ibox, const char *dir,
+int maildir_create_tmp(struct maildir_mailbox *mbox, const char *dir,
 		       mode_t mode, const char **fname_r);
 
 struct mailbox_list_context *
@@ -42,10 +59,10 @@
 
 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_storage_sync_force(struct maildir_mailbox *mbox);
 
 struct maildir_index_sync_context *
-maildir_sync_index_begin(struct index_mailbox *ibox);
+maildir_sync_index_begin(struct maildir_mailbox *mbox);
 void maildir_sync_index_abort(struct maildir_index_sync_context *sync_ctx);
 int maildir_sync_index_finish(struct maildir_index_sync_context *sync_ctx,
 			      int partial);
@@ -78,7 +95,7 @@
 
 const char *maildir_get_path(struct index_storage *storage, const char *name);
 
-int maildir_sync_last_commit(struct index_mailbox *ibox);
+int maildir_sync_last_commit(struct maildir_mailbox *mbox);
 
 int maildir_filename_get_flags(const char *fname, pool_t pool,
 			       enum mail_flags *flags_r,

Index: maildir-sync.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-sync.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- maildir-sync.c	14 Mar 2005 20:48:26 -0000	1.50
+++ maildir-sync.c	8 Apr 2005 13:13:47 -0000	1.51
@@ -189,7 +189,7 @@
 #define MAILDIR_FILENAME_FLAG_FOUND 128
 
 struct maildir_sync_context {
-        struct index_mailbox *ibox;
+        struct maildir_mailbox *mbox;
 	const char *new_dir, *cur_dir;
 	int partial;
 
@@ -198,7 +198,7 @@
 };
 
 struct maildir_index_sync_context {
-        struct index_mailbox *ibox;
+        struct maildir_mailbox *mbox;
 	struct mail_index_view *view;
 	struct mail_index_sync_ctx *sync_ctx;
 	struct mail_index_transaction *trans;
@@ -208,22 +208,22 @@
 	int dirty_state;
 };
 
-static int maildir_expunge(struct index_mailbox *ibox, const char *path,
+static int maildir_expunge(struct maildir_mailbox *mbox, const char *path,
 			   void *context __attr_unused__)
 {
 	if (unlink(path) == 0) {
-		ibox->dirty_cur_time = ioloop_time;
+		mbox->dirty_cur_time = ioloop_time;
 		return 1;
 	}
 	if (errno == ENOENT)
 		return 0;
 
-	mail_storage_set_critical(ibox->box.storage,
+	mail_storage_set_critical(&mbox->storage->storage,
 				  "unlink(%s) failed: %m", path);
 	return -1;
 }
 
-static int maildir_sync_flags(struct index_mailbox *ibox, const char *path,
+static int maildir_sync_flags(struct maildir_mailbox *mbox, const char *path,
 			      void *context)
 {
         struct maildir_index_sync_context *ctx = context;
@@ -244,7 +244,7 @@
 	if (rename(path, newpath) == 0) {
 		if ((flags8 & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0)
 			ctx->dirty_state = -1;
-		ibox->dirty_cur_time = ioloop_time;
+		mbox->dirty_cur_time = ioloop_time;
 		return 1;
 	}
 	if (errno == ENOENT)
@@ -257,12 +257,12 @@
 		return 1;
 	}
 
-	mail_storage_set_critical(ibox->box.storage,
+	mail_storage_set_critical(&mbox->storage->storage,
 				  "rename(%s, %s) failed: %m", path, newpath);
 	return -1;
 }
 
-static int maildir_sync_record(struct index_mailbox *ibox,
+static int maildir_sync_record(struct maildir_mailbox *mbox,
                                struct maildir_index_sync_context *ctx)
 {
 	struct mail_index_sync_rec *sync_rec = &ctx->sync_rec;
@@ -286,7 +286,7 @@
 		for (seq = seq1; seq <= seq2; seq++) {
 			if (mail_index_lookup_uid(view, seq, &uid) < 0)
 				return -1;
-			if (maildir_file_do(ibox, uid, maildir_expunge,
+			if (maildir_file_do(mbox, uid, maildir_expunge,
 					    NULL) < 0)
 				return -1;
 		}
@@ -303,7 +303,7 @@
 		for (ctx->seq = seq1; ctx->seq <= seq2; ctx->seq++) {
 			if (mail_index_lookup_uid(view, ctx->seq, &uid) < 0)
 				return -1;
-			if (maildir_file_do(ibox, uid,
+			if (maildir_file_do(mbox, uid,
 					    maildir_sync_flags, ctx) < 0)
 				return -1;
 			if (ctx->dirty_state < 0) {
@@ -324,29 +324,30 @@
 	return 0;
 }
 
-int maildir_sync_last_commit(struct index_mailbox *ibox)
+int maildir_sync_last_commit(struct maildir_mailbox *mbox)
 {
 	struct maildir_index_sync_context ctx;
 	uint32_t seq;
 	uoff_t offset;
 	int ret;
 
-	if (ibox->commit_log_file_seq == 0)
+	if (mbox->ibox.commit_log_file_seq == 0)
 		return 0;
 
 	memset(&ctx, 0, sizeof(ctx));
-	ctx.ibox = ibox;
+	ctx.mbox = mbox;
 
-        ibox->syncing_commit = TRUE;
-	ret = mail_index_sync_begin(ibox->index, &ctx.sync_ctx, &ctx.view,
-				    ibox->commit_log_file_seq,
-				    ibox->commit_log_file_offset, FALSE, FALSE);
+        mbox->syncing_commit = TRUE;
+	ret = mail_index_sync_begin(mbox->ibox.index, &ctx.sync_ctx, &ctx.view,
+				    mbox->ibox.commit_log_file_seq,
+				    mbox->ibox.commit_log_file_offset,
+				    FALSE, FALSE);
 	if (ret > 0) {
 		ctx.trans = mail_index_transaction_begin(ctx.view, FALSE, TRUE);
 
 		while ((ret = mail_index_sync_next(ctx.sync_ctx,
 						   &ctx.sync_rec)) > 0) {
-			if (maildir_sync_record(ibox, &ctx) < 0) {
+			if (maildir_sync_record(mbox, &ctx) < 0) {
 				ret = -1;
 				break;
 			}
@@ -356,26 +357,26 @@
 		if (mail_index_sync_commit(ctx.sync_ctx) < 0)
 			ret = -1;
 	}
-        ibox->syncing_commit = FALSE;
+        mbox->syncing_commit = FALSE;
 
 	if (ret == 0) {
-		ibox->commit_log_file_seq = 0;
-		ibox->commit_log_file_offset = 0;
+		mbox->ibox.commit_log_file_seq = 0;
+		mbox->ibox.commit_log_file_offset = 0;
 	} else {
-		mail_storage_set_index_error(ibox);
+		mail_storage_set_index_error(&mbox->ibox);
 	}
 	return ret;
 }
 
 static struct maildir_sync_context *
-maildir_sync_context_new(struct index_mailbox *ibox)
+maildir_sync_context_new(struct maildir_mailbox *mbox)
 {
         struct maildir_sync_context *ctx;
 
 	ctx = t_new(struct maildir_sync_context, 1);
-	ctx->ibox = ibox;
-	ctx->new_dir = t_strconcat(ibox->path, "/new", NULL);
-	ctx->cur_dir = t_strconcat(ibox->path, "/cur", NULL);
+	ctx->mbox = mbox;
+	ctx->new_dir = t_strconcat(mbox->path, "/new", NULL);
+	ctx->cur_dir = t_strconcat(mbox->path, "/cur", NULL);
 	return ctx;
 }
 
@@ -387,7 +388,7 @@
 		maildir_sync_index_abort(ctx->index_sync_ctx);
 }
 
-static int maildir_fix_duplicate(struct index_mailbox *ibox, const char *dir,
+static int maildir_fix_duplicate(struct maildir_mailbox *mbox, const char *dir,
 				 const char *old_fname)
 {
 	const char *new_fname, *old_path, *new_path;
@@ -397,13 +398,13 @@
 
 	old_path = t_strconcat(dir, "/", old_fname, NULL);
 	new_fname = maildir_generate_tmp_filename(&ioloop_timeval);
-	new_path = t_strconcat(ibox->path, "/new/", new_fname, NULL);
+	new_path = t_strconcat(mbox->path, "/new/", new_fname, NULL);
 
 	if (rename(old_path, new_path) == 0) {
 		i_warning("Fixed duplicate in %s: %s -> %s",
-			  ibox->path, old_fname, new_fname);
+			  mbox->path, old_fname, new_fname);
 	} else if (errno != ENOENT) {
-		mail_storage_set_critical(ibox->box.storage,
+		mail_storage_set_critical(&mbox->storage->storage,
 			"rename(%s, %s) failed: %m", old_path, new_path);
 		ret = -1;
 	}
@@ -414,7 +415,7 @@
 
 static int maildir_scan_dir(struct maildir_sync_context *ctx, int new_dir)
 {
-	struct mail_storage *storage = ctx->ibox->box.storage;
+	struct mail_storage *storage = &ctx->mbox->storage->storage;
 	const char *dir;
 	DIR *dirp;
 	string_t *src, *dest;
@@ -434,8 +435,8 @@
 	src = t_str_new(1024);
 	dest = t_str_new(1024);
 
-	move_new = new_dir && !mailbox_is_readonly(&ctx->ibox->box) &&
-		!ctx->ibox->keep_recent;
+	move_new = new_dir && !mailbox_is_readonly(&ctx->mbox->ibox.box) &&
+		!ctx->mbox->ibox.keep_recent;
 	while ((dp = readdir(dirp)) != NULL) {
 		if (dp->d_name[0] == '.')
 			continue;
@@ -446,9 +447,9 @@
 			/* new file and we couldn't lock uidlist, check this
 			   later in next sync. */
 			if (new_dir)
-				ctx->ibox->last_new_mtime = 0;
+				ctx->mbox->last_new_mtime = 0;
 			else
-				ctx->ibox->dirty_cur_time = ioloop_time;
+				ctx->mbox->dirty_cur_time = ioloop_time;
 			continue;
 		}
 		if (ret < 0)
@@ -464,7 +465,7 @@
 				str_append(dest, ":2,");
 			if (rename(str_c(src), str_c(dest)) == 0) {
 				/* we moved it - it's \Recent for us */
-                                ctx->ibox->dirty_cur_time = ioloop_time;
+                                ctx->mbox->dirty_cur_time = ioloop_time;
 				flags |= MAILDIR_UIDLIST_REC_FLAG_MOVED |
 					MAILDIR_UIDLIST_REC_FLAG_RECENT;
 			} else if (ENOTFOUND(errno)) {
@@ -494,7 +495,7 @@
 				break;
 
 			/* possibly duplicate - try fixing it */
-			if (maildir_fix_duplicate(ctx->ibox,
+			if (maildir_fix_duplicate(ctx->mbox,
 						  dir, dp->d_name) < 0) {
 				ret = -1;
 				break;
@@ -514,21 +515,21 @@
 static int maildir_sync_quick_check(struct maildir_sync_context *ctx,
 				    int *new_changed_r, int *cur_changed_r)
 {
-	struct index_mailbox *ibox = ctx->ibox;
+	struct maildir_mailbox *mbox = ctx->mbox;
 	struct stat st;
 	time_t new_mtime, cur_mtime;
 
 	*new_changed_r = *cur_changed_r = FALSE;
 
 	if (stat(ctx->new_dir, &st) < 0) {
-		mail_storage_set_critical(ibox->box.storage,
+		mail_storage_set_critical(&mbox->storage->storage,
 					  "stat(%s) failed: %m", ctx->new_dir);
 		return -1;
 	}
 	new_mtime = st.st_mtime;
 
 	if (stat(ctx->cur_dir, &st) < 0) {
-		mail_storage_set_critical(ibox->box.storage,
+		mail_storage_set_critical(&mbox->storage->storage,
 					  "stat(%s) failed: %m", ctx->cur_dir);
 		return -1;
 	}
@@ -536,33 +537,34 @@
 
 	/* cur stamp is kept in index, we don't have to sync if
 	   someone else has done it and updated the index. */
-	ibox->last_cur_mtime = mail_index_get_header(ibox->view)->sync_stamp;
-	if (ibox->dirty_cur_time == 0 && cur_mtime != ibox->last_cur_mtime) {
+	mbox->last_cur_mtime =
+		mail_index_get_header(mbox->ibox.view)->sync_stamp;
+	if (mbox->dirty_cur_time == 0 && cur_mtime != mbox->last_cur_mtime) {
 		/* check if the index has been updated.. */
-		if (mail_index_refresh(ibox->index) < 0) {
-			mail_storage_set_index_error(ibox);
+		if (mail_index_refresh(mbox->ibox.index) < 0) {
+			mail_storage_set_index_error(&mbox->ibox);
 			return -1;
 		}
 
-		ibox->last_cur_mtime =
-			mail_index_get_header(ibox->view)->sync_stamp;
+		mbox->last_cur_mtime =
+			mail_index_get_header(mbox->ibox.view)->sync_stamp;
 	}
 
-	if (new_mtime != ibox->last_new_mtime ||
-	    new_mtime >= ibox->last_new_sync_time - MAILDIR_SYNC_SECS) {
+	if (new_mtime != mbox->last_new_mtime ||
+	    new_mtime >= mbox->last_new_sync_time - MAILDIR_SYNC_SECS) {
 		*new_changed_r = TRUE;
-		ibox->last_new_mtime = new_mtime;
-		ibox->last_new_sync_time = ioloop_time;
+		mbox->last_new_mtime = new_mtime;
+		mbox->last_new_sync_time = ioloop_time;
 	}
 
-	if (cur_mtime != ibox->last_cur_mtime ||
-	    (ibox->dirty_cur_time != 0 &&
-	     ioloop_time - ibox->dirty_cur_time > MAILDIR_SYNC_SECS)) {
+	if (cur_mtime != mbox->last_cur_mtime ||
+	    (mbox->dirty_cur_time != 0 &&
+	     ioloop_time - mbox->dirty_cur_time > MAILDIR_SYNC_SECS)) {
 		/* cur/ changed, or delayed cur/ check */
 		*cur_changed_r = TRUE;
-		ibox->last_cur_mtime = cur_mtime;
+		mbox->last_cur_mtime = cur_mtime;
 
-		ibox->dirty_cur_time =
+		mbox->dirty_cur_time =
 			cur_mtime >= ioloop_time - MAILDIR_SYNC_SECS ?
 			cur_mtime : 0;
 	}
@@ -571,17 +573,17 @@
 }
 
 struct maildir_index_sync_context *
-maildir_sync_index_begin(struct index_mailbox *ibox)
+maildir_sync_index_begin(struct maildir_mailbox *mbox)
 {
 	struct maildir_index_sync_context *sync_ctx;
 
 	sync_ctx = i_new(struct maildir_index_sync_context, 1);
-	sync_ctx->ibox = ibox;
+	sync_ctx->mbox = mbox;
 
-	if (mail_index_sync_begin(ibox->index, &sync_ctx->sync_ctx,
+	if (mail_index_sync_begin(mbox->ibox.index, &sync_ctx->sync_ctx,
 				  &sync_ctx->view, (uint32_t)-1, (uoff_t)-1,
 				  FALSE, FALSE) <= 0) {
-		mail_storage_set_index_error(ibox);
+		mail_storage_set_index_error(&mbox->ibox);
 		return NULL;
 	}
 	return sync_ctx;
@@ -596,7 +598,7 @@
 int maildir_sync_index_finish(struct maildir_index_sync_context *sync_ctx,
 			      int partial)
 {
-	struct index_mailbox *ibox = sync_ctx->ibox;
+	struct maildir_mailbox *mbox = sync_ctx->mbox;
 	struct mail_index_view *view = sync_ctx->view;
 	struct maildir_uidlist_iter_ctx *iter;
 	struct mail_index_transaction *trans;
@@ -612,15 +614,15 @@
 	int ret;
 
 	hdr = mail_index_get_header(view);
-	uid_validity = maildir_uidlist_get_uid_validity(ibox->uidlist);
+	uid_validity = maildir_uidlist_get_uid_validity(mbox->uidlist);
 	if (uid_validity != hdr->uid_validity &&
 	    uid_validity != 0 && hdr->uid_validity != 0) {
 		/* uidvalidity changed and mailbox isn't being initialized,
 		   index must be rebuilt */
-		mail_storage_set_critical(ibox->box.storage,
+		mail_storage_set_critical(&mbox->storage->storage,
 			"Maildir %s sync: UIDVALIDITY changed (%u -> %u)",
-			ibox->path, hdr->uid_validity, uid_validity);
-		mail_index_mark_corrupted(ibox->index);
+			mbox->path, hdr->uid_validity, uid_validity);
+		mail_index_mark_corrupted(mbox->ibox.index);
                 maildir_sync_index_abort(sync_ctx);
 		return -1;
 	}
@@ -631,7 +633,7 @@
 	keyword_pool = pool_alloconly_create("maildir keywords", 128);
 
 	seq = 0;
-	iter = maildir_uidlist_iter_init(ibox->uidlist);
+	iter = maildir_uidlist_iter_init(mbox->uidlist);
 	while (maildir_uidlist_iter_next(iter, &uid, &uflags, &filename)) {
 		p_clear(keyword_pool);
 		maildir_filename_get_flags(filename, keyword_pool,
@@ -666,18 +668,19 @@
 				if ((uflags &
 				     MAILDIR_UIDLIST_REC_FLAG_RACING) != 0) {
 					mail_storage_set_critical(
-						ibox->box.storage,
+						&mbox->storage->storage,
 						"Maildir %s sync: "
 						"UID < next_uid "
 						"(%u < %u, file = %s)",
-						ibox->path, uid, hdr->next_uid,
+						mbox->path, uid, hdr->next_uid,
 						filename);
-					mail_index_mark_corrupted(ibox->index);
+					mail_index_mark_corrupted(
+						mbox->ibox.index);
 					ret = -1;
 					break;
 				}
-				ibox->dirty_cur_time = ioloop_time;
-				maildir_uidlist_add_flags(ibox->uidlist,
+				mbox->dirty_cur_time = ioloop_time;
+				maildir_uidlist_add_flags(mbox->uidlist,
 					filename,
 					MAILDIR_UIDLIST_REC_FLAG_RACING);
 
@@ -716,18 +719,19 @@
 				continue;
 			}
 			if ((uflags & MAILDIR_UIDLIST_REC_FLAG_RACING) != 0) {
-				mail_storage_set_critical(ibox->box.storage,
+				mail_storage_set_critical(
+					&mbox->storage->storage,
 					"Maildir %s sync: "
 					"UID inserted in the middle of mailbox "
 					"(%u > %u, file = %s)",
-					ibox->path, rec->uid, uid, filename);
-				mail_index_mark_corrupted(ibox->index);
+					mbox->path, rec->uid, uid, filename);
+				mail_index_mark_corrupted(mbox->ibox.index);
 				ret = -1;
 				break;
 			}
 
-			ibox->dirty_cur_time = ioloop_time;
-			maildir_uidlist_add_flags(ibox->uidlist, filename,
+			mbox->dirty_cur_time = ioloop_time;
+			maildir_uidlist_add_flags(mbox->uidlist, filename,
 				MAILDIR_UIDLIST_REC_FLAG_RACING);
 
 			seq--;
@@ -735,8 +739,8 @@
 		}
 
 		if ((rec->flags & MAIL_RECENT) != 0) {
-			index_mailbox_set_recent(ibox, seq);
-			if (ibox->keep_recent) {
+			index_mailbox_set_recent(&mbox->ibox, seq);
+			if (mbox->ibox.keep_recent) {
 				flags |= MAIL_RECENT;
 			} else {
 				mail_index_update_flags(trans, seq,
@@ -781,19 +785,19 @@
 	}
 
 	/* now, sync the index */
-        ibox->syncing_commit = TRUE;
+        mbox->syncing_commit = TRUE;
 	while ((ret = mail_index_sync_next(sync_ctx->sync_ctx,
 					   &sync_ctx->sync_rec)) > 0) {
-		if (maildir_sync_record(ibox, sync_ctx) < 0) {
+		if (maildir_sync_record(mbox, sync_ctx) < 0) {
 			ret = -1;
 			break;
 		}
 	}
-        ibox->syncing_commit = FALSE;
+        mbox->syncing_commit = FALSE;
 
-	if (ibox->dirty_cur_time == 0 &&
-	    ibox->last_cur_mtime != (time_t)hdr->sync_stamp) {
-		uint32_t sync_stamp = ibox->last_cur_mtime;
+	if (mbox->dirty_cur_time == 0 &&
+	    mbox->last_cur_mtime != (time_t)hdr->sync_stamp) {
+		uint32_t sync_stamp = mbox->last_cur_mtime;
 
 		mail_index_update_header(trans,
 			offsetof(struct mail_index_header, sync_stamp),
@@ -802,16 +806,16 @@
 
 	if (hdr->uid_validity == 0) {
 		/* get the initial uidvalidity */
-		if (maildir_uidlist_update(ibox->uidlist) < 0)
+		if (maildir_uidlist_update(mbox->uidlist) < 0)
 			ret = -1;
-		uid_validity = maildir_uidlist_get_uid_validity(ibox->uidlist);
+		uid_validity = maildir_uidlist_get_uid_validity(mbox->uidlist);
 		if (uid_validity == 0) {
 			uid_validity = ioloop_time;
-			maildir_uidlist_set_uid_validity(ibox->uidlist,
+			maildir_uidlist_set_uid_validity(mbox->uidlist,
 							 uid_validity);
 		}
 	} else if (uid_validity == 0) {
-		maildir_uidlist_set_uid_validity(ibox->uidlist,
+		maildir_uidlist_set_uid_validity(mbox->uidlist,
 						 hdr->uid_validity);
 	}
 
@@ -821,7 +825,7 @@
 			&uid_validity, sizeof(uid_validity));
 	}
 
-	next_uid = maildir_uidlist_get_next_uid(ibox->uidlist);
+	next_uid = maildir_uidlist_get_next_uid(mbox->uidlist);
 	if (next_uid != 0 && hdr->next_uid != next_uid) {
 		mail_index_update_header(trans,
 			offsetof(struct mail_index_header, next_uid),
@@ -838,18 +842,18 @@
 		if (mail_index_transaction_commit(trans, &seq, &offset) < 0)
 			ret = -1;
 		else if (seq != 0) {
-			ibox->commit_log_file_seq = seq;
-			ibox->commit_log_file_offset = offset;
+			mbox->ibox.commit_log_file_seq = seq;
+			mbox->ibox.commit_log_file_offset = offset;
 		}
 		if (mail_index_sync_commit(sync_ctx->sync_ctx) < 0)
 			ret = -1;
 	}
 
 	if (ret == 0) {
-		ibox->commit_log_file_seq = 0;
-		ibox->commit_log_file_offset = 0;
+		mbox->ibox.commit_log_file_seq = 0;
+		mbox->ibox.commit_log_file_offset = 0;
 	} else {
-		mail_storage_set_index_error(ibox);
+		mail_storage_set_index_error(&mbox->ibox);
 	}
 
 	i_free(sync_ctx);
@@ -915,13 +919,13 @@
 	   problem rarely happens except under high amount of modifications.
 	*/
 
-	if (!ctx->ibox->syncing_commit) {
-		ctx->index_sync_ctx = maildir_sync_index_begin(ctx->ibox);
+	if (!ctx->mbox->syncing_commit) {
+		ctx->index_sync_ctx = maildir_sync_index_begin(ctx->mbox);
 		if (ctx->index_sync_ctx == NULL)
 			return -1;
 	}
 
-	if ((ret = maildir_uidlist_lock(ctx->ibox->uidlist)) <= 0) {
+	if ((ret = maildir_uidlist_lock(ctx->mbox->uidlist)) <= 0) {
 		/* failure / timeout. if forced is TRUE, we could still go
 		   forward and check only for renamed files, but is it worth
 		   the trouble? .. */
@@ -930,7 +934,7 @@
 
 	ctx->partial = !cur_changed;
 	ctx->uidlist_sync_ctx =
-		maildir_uidlist_sync_init(ctx->ibox->uidlist, ctx->partial);
+		maildir_uidlist_sync_init(ctx->mbox->uidlist, ctx->partial);
 
 	if (maildir_scan_dir(ctx, TRUE) < 0)
 		return -1;
@@ -941,7 +945,7 @@
 
 	/* finish uidlist syncing, but keep it still locked */
 	maildir_uidlist_sync_finish(ctx->uidlist_sync_ctx);
-	if (!ctx->ibox->syncing_commit) {
+	if (!ctx->mbox->syncing_commit) {
 		if (maildir_sync_index_finish(ctx->index_sync_ctx,
 					      ctx->partial) < 0) {
 			ctx->index_sync_ctx = NULL;
@@ -956,12 +960,12 @@
 	return ret;
 }
 
-int maildir_storage_sync_force(struct index_mailbox *ibox)
+int maildir_storage_sync_force(struct maildir_mailbox *mbox)
 {
         struct maildir_sync_context *ctx;
 	int ret;
 
-	ctx = maildir_sync_context_new(ibox);
+	ctx = maildir_sync_context_new(mbox);
 	ret = maildir_sync_context(ctx, TRUE);
 	maildir_sync_deinit(ctx);
 	return ret;
@@ -970,15 +974,16 @@
 struct mailbox_sync_context *
 maildir_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags)
 {
-	struct index_mailbox *ibox = (struct index_mailbox *)box;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
 	struct maildir_sync_context *ctx;
 	int ret = 0;
 
 	if ((flags & MAILBOX_SYNC_FLAG_FAST) == 0 ||
-	    ibox->sync_last_check + MAILBOX_FULL_SYNC_INTERVAL <= ioloop_time) {
-		ibox->sync_last_check = ioloop_time;
+	    mbox->ibox.sync_last_check + MAILBOX_FULL_SYNC_INTERVAL <=
+	    ioloop_time) {
+		mbox->ibox.sync_last_check = ioloop_time;
 
-		ctx = maildir_sync_context_new(ibox);
+		ctx = maildir_sync_context_new(mbox);
 		ret = maildir_sync_context(ctx, FALSE);
 		maildir_sync_deinit(ctx);
 	}

Index: maildir-transaction.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-transaction.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- maildir-transaction.c	15 Mar 2005 19:01:52 -0000	1.7
+++ maildir-transaction.c	8 Apr 2005 13:13:47 -0000	1.8
@@ -7,11 +7,11 @@
 maildir_transaction_begin(struct mailbox *box,
 			  enum mailbox_transaction_flags flags)
 {
-	struct index_mailbox *ibox = (struct index_mailbox *)box;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
 	struct maildir_transaction_context *t;
 
 	t = i_new(struct maildir_transaction_context, 1);
-	index_transaction_init(&t->ictx, ibox, flags);
+	index_transaction_init(&t->ictx, &mbox->ibox, flags);
 	return &t->ictx.mailbox_ctx;
 }
 
@@ -20,7 +20,7 @@
 {
 	struct maildir_transaction_context *t =
 		(struct maildir_transaction_context *)_t;
-	struct index_mailbox *ibox = t->ictx.ibox;
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)t->ictx.ibox;
 	struct maildir_save_context *save_ctx;
 	int ret = 0;
 
@@ -48,7 +48,7 @@
 		maildir_transaction_save_commit_post(save_ctx);
 	}
 
-	return ret < 0 ? -1 : maildir_sync_last_commit(ibox);
+	return ret < 0 ? -1 : maildir_sync_last_commit(mbox);
 }
 
 void maildir_transaction_rollback(struct mailbox_transaction_context *_t)

Index: maildir-uidlist.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-uidlist.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- maildir-uidlist.c	31 Jan 2005 18:52:36 -0000	1.35
+++ maildir-uidlist.c	8 Apr 2005 13:13:47 -0000	1.36
@@ -29,7 +29,7 @@
 };
 
 struct maildir_uidlist {
-	struct index_mailbox *ibox;
+	struct maildir_mailbox *mbox;
 	char *fname;
 	int lock_fd;
 
@@ -78,9 +78,9 @@
 	if (UIDLIST_IS_LOCKED(uidlist))
 		return 1;
 
-	path = t_strconcat(uidlist->ibox->control_dir,
+	path = t_strconcat(uidlist->mbox->control_dir,
 			   "/" MAILDIR_UIDLIST_NAME, NULL);
-        old_mask = umask(0777 & ~uidlist->ibox->mail_create_mode);
+        old_mask = umask(0777 & ~uidlist->mbox->mail_create_mode);
 	fd = file_dotlock_open(&uidlist->dotlock_settings, path,
 			       nonblock ? DOTLOCK_CREATE_FLAG_NONBLOCK : 0,
 			       &uidlist->dotlock);
@@ -88,7 +88,7 @@
 	if (fd == -1) {
 		if (errno == EAGAIN)
 			return 0;
-		mail_storage_set_critical(uidlist->ibox->box.storage,
+		mail_storage_set_critical(&uidlist->mbox->storage->storage,
 			"file_dotlock_open(%s) failed: %m", path);
 		return -1;
 	}
@@ -120,14 +120,14 @@
 	uidlist->lock_fd = -1;
 }
 
-struct maildir_uidlist *maildir_uidlist_init(struct index_mailbox *ibox)
+struct maildir_uidlist *maildir_uidlist_init(struct maildir_mailbox *mbox)
 {
 	struct maildir_uidlist *uidlist;
 
 	uidlist = i_new(struct maildir_uidlist, 1);
-	uidlist->ibox = ibox;
+	uidlist->mbox = mbox;
 	uidlist->fname =
-		i_strconcat(ibox->control_dir, "/" MAILDIR_UIDLIST_NAME, NULL);
+		i_strconcat(mbox->control_dir, "/" MAILDIR_UIDLIST_NAME, NULL);
 	uidlist->lock_fd = -1;
 	uidlist->record_buf = buffer_create_dynamic(default_pool, 512);
 	uidlist->files = hash_create(default_pool, default_pool, 4096,
@@ -139,7 +139,7 @@
 	uidlist->dotlock_settings.immediate_stale_timeout =
 		UIDLIST_LOCK_STALE_TIMEOUT;
 	uidlist->dotlock_settings.temp_prefix =
-		uidlist->ibox->storage->temp_prefix;
+		uidlist->mbox->storage->temp_prefix;
 
 	return uidlist;
 }
@@ -179,12 +179,12 @@
 
 	if (uid == 0 || *line != ' ') {
 		/* invalid file */
-                mail_storage_set_critical(uidlist->ibox->box.storage,
+                mail_storage_set_critical(&uidlist->mbox->storage->storage,
 			"Invalid data in file %s", uidlist->fname);
 		return 0;
 	}
 	if (uid <= uidlist->prev_read_uid) {
-                mail_storage_set_critical(uidlist->ibox->box.storage,
+                mail_storage_set_critical(&uidlist->mbox->storage->storage,
 			"UIDs not ordered in file %s (%u > %u)",
 			uidlist->fname, uid, uidlist->prev_read_uid);
 		return 0;
@@ -198,7 +198,7 @@
         uidlist->last_seen_uid = uid;
 
 	if (uid >= uidlist->next_uid) {
-                mail_storage_set_critical(uidlist->ibox->box.storage,
+                mail_storage_set_critical(&uidlist->mbox->storage->storage,
 			"UID larger than next_uid in file %s (%u >= %u)",
 			uidlist->fname, uid, uidlist->next_uid);
 		return 0;
@@ -213,7 +213,7 @@
 	}
 
 	if (hash_lookup_full(uidlist->files, line, NULL, NULL)) {
-                mail_storage_set_critical(uidlist->ibox->box.storage,
+                mail_storage_set_critical(&uidlist->mbox->storage->storage,
 			"Duplicate file in uidlist file %s: %s",
 			uidlist->fname, line);
 		return 0;
@@ -230,7 +230,7 @@
 
 int maildir_uidlist_update(struct maildir_uidlist *uidlist)
 {
-	struct mail_storage *storage = uidlist->ibox->box.storage;
+	struct mail_storage *storage = &uidlist->mbox->storage->storage;
 	const char *line;
 	unsigned int uid_validity, next_uid;
 	struct istream *input;
@@ -403,7 +403,7 @@
 		/* we haven't synced yet, trust index */
 		const struct mail_index_header *hdr;
 
-		hdr = mail_index_get_header(uidlist->ibox->view);
+		hdr = mail_index_get_header(uidlist->mbox->ibox.view);
 		return hdr->recent_messages_count;
 	}
 
@@ -443,7 +443,7 @@
 static int maildir_uidlist_rewrite_fd(struct maildir_uidlist *uidlist,
 				      const char *temp_path)
 {
-	struct mail_storage *storage = uidlist->ibox->box.storage;
+	struct mail_storage *storage = &uidlist->mbox->storage->storage;
 	struct maildir_uidlist_iter_ctx *iter;
 	struct utimbuf ut;
 	string_t *str;
@@ -461,7 +461,7 @@
 	str_printfa(str, "%u %u %u\n", uidlist->version,
 		    uidlist->uid_validity, uidlist->next_uid);
 
-	iter = maildir_uidlist_iter_init(uidlist->ibox->uidlist);
+	iter = maildir_uidlist_iter_init(uidlist->mbox->uidlist);
 	while (maildir_uidlist_iter_next(iter, &uid, &flags, &filename)) {
 		/* avoid overflowing str buffer so we don't eat more memory
 		   than we need. */
@@ -513,22 +513,22 @@
 
 static int maildir_uidlist_rewrite(struct maildir_uidlist *uidlist)
 {
-	struct index_mailbox *ibox = uidlist->ibox;
+	struct maildir_mailbox *mbox = uidlist->mbox;
 	const char *temp_path, *db_path;
 	int ret;
 
 	i_assert(UIDLIST_IS_LOCKED(uidlist));
 
-	temp_path = t_strconcat(ibox->control_dir,
+	temp_path = t_strconcat(mbox->control_dir,
 				"/" MAILDIR_UIDLIST_NAME ".lock", NULL);
 	ret = maildir_uidlist_rewrite_fd(uidlist, temp_path);
 
 	if (ret == 0) {
-		db_path = t_strconcat(ibox->control_dir,
+		db_path = t_strconcat(mbox->control_dir,
 				      "/" MAILDIR_UIDLIST_NAME, NULL);
 
 		if (file_dotlock_replace(&uidlist->dotlock, 0) <= 0) {
-			mail_storage_set_critical(ibox->box.storage,
+			mail_storage_set_critical(&mbox->storage->storage,
 				"file_dotlock_replace(%s) failed: %m", db_path);
 			(void)unlink(temp_path);
 			ret = -1;

Index: maildir-uidlist.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-uidlist.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- maildir-uidlist.h	11 Jul 2004 21:04:46 -0000	1.12
+++ maildir-uidlist.h	8 Apr 2005 13:13:47 -0000	1.13
@@ -15,7 +15,7 @@
 int maildir_uidlist_try_lock(struct maildir_uidlist *uidlist);
 void maildir_uidlist_unlock(struct maildir_uidlist *uidlist);
 
-struct maildir_uidlist *maildir_uidlist_init(struct index_mailbox *ibox);
+struct maildir_uidlist *maildir_uidlist_init(struct maildir_mailbox *mbox);
 void maildir_uidlist_deinit(struct maildir_uidlist *uidlist);
 
 /* Returns -1 if error, 0 if file is broken or lost, 1 if ok. */

Index: maildir-util.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-util.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- maildir-util.c	26 Dec 2004 09:12:43 -0000	1.9
+++ maildir-util.c	8 Apr 2005 13:13:47 -0000	1.10
@@ -11,53 +11,53 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 
-static int maildir_file_do_try(struct index_mailbox *ibox, uint32_t uid,
+static int maildir_file_do_try(struct maildir_mailbox *mbox, uint32_t uid,
 			       maildir_file_do_func *func, void *context)
 {
 	const char *fname, *path;
         enum maildir_uidlist_rec_flag flags;
 	int ret;
 
-	fname = maildir_uidlist_lookup(ibox->uidlist, uid, &flags);
+	fname = maildir_uidlist_lookup(mbox->uidlist, uid, &flags);
 	if (fname == NULL)
 		return -2; /* expunged */
 
 	t_push();
 	if ((flags & MAILDIR_UIDLIST_REC_FLAG_NEW_DIR) != 0) {
 		/* probably in new/ dir */
-		path = t_strconcat(ibox->path, "/new/", fname, NULL);
-		ret = func(ibox, path, context);
+		path = t_strconcat(mbox->path, "/new/", fname, NULL);
+		ret = func(mbox, path, context);
 		if (ret != 0) {
 			t_pop();
 			return ret;
 		}
 	}
 
-	path = t_strconcat(ibox->path, "/cur/", fname, NULL);
-	ret = func(ibox, path, context);
+	path = t_strconcat(mbox->path, "/cur/", fname, NULL);
+	ret = func(mbox, path, context);
 	t_pop();
 	return ret;
 }
 
-int maildir_file_do(struct index_mailbox *ibox, uint32_t uid,
+int maildir_file_do(struct maildir_mailbox *mbox, uint32_t uid,
 		    maildir_file_do_func *func, void *context)
 {
 	int i, ret;
 
-	ret = maildir_file_do_try(ibox, uid, func, context);
+	ret = maildir_file_do_try(mbox, uid, func, context);
 	for (i = 0; i < 10 && ret == 0; i++) {
 		/* file is either renamed or deleted. sync the maildir and
 		   see which one. if file appears to be renamed constantly,
 		   don't try to open it more than 10 times. */
-		if (maildir_storage_sync_force(ibox) < 0)
+		if (maildir_storage_sync_force(mbox) < 0)
 			return -1;
 
-		ret = maildir_file_do_try(ibox, uid, func, context);
+		ret = maildir_file_do_try(mbox, uid, func, context);
 	}
 
 	if (i == 10) {
-		mail_storage_set_critical(ibox->box.storage,
-			"maildir_file_do(%s) racing", ibox->path);
+		mail_storage_set_critical(&mbox->storage->storage,
+			"maildir_file_do(%s) racing", mbox->path);
 	}
 
 	return ret == -2 ? 0 : ret;
@@ -209,7 +209,7 @@
 	}
 }
 
-int maildir_create_tmp(struct index_mailbox *ibox, const char *dir,
+int maildir_create_tmp(struct maildir_mailbox *mbox, const char *dir,
 		       mode_t mode, const char **fname_r)
 {
 	const char *path, *tmp_fname;
@@ -244,10 +244,10 @@
 	*fname_r = t_strdup(path);
 	if (fd == -1) {
 		if (ENOSPACE(errno)) {
-			mail_storage_set_error(ibox->box.storage,
+			mail_storage_set_error(&mbox->storage->storage,
 					       "Not enough disk space");
 		} else {
-			mail_storage_set_critical(ibox->box.storage,
+			mail_storage_set_critical(&mbox->storage->storage,
 						  "open(%s) failed: %m", path);
 		}
 	}



More information about the dovecot-cvs mailing list