diff src/lib-storage/index/maildir/maildir-sync.c @ 3279:b698ae839a18 HEAD

Moved mbox/maildir-specific variables from struct index_mailbox to mbox_mailbox and maildir_mailbox.
author Timo Sirainen <tss@iki.fi>
date Fri, 08 Apr 2005 16:13:45 +0300
parents 391a1064872e
children 2c72492dfd91
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-sync.c	Fri Apr 08 15:14:41 2005 +0300
+++ b/src/lib-storage/index/maildir/maildir-sync.c	Fri Apr 08 16:13:45 2005 +0300
@@ -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);
 	}