changeset 3628:571336db01f4 HEAD

Added MAILBOX_OPEN_NO_INDEX_FILES flag and made streamed mboxes by default also indexed.
author Timo Sirainen <tss@iki.fi>
date Fri, 30 Sep 2005 21:55:00 +0300
parents c0e35566dd14
children e05a1af4bbc7
files src/lib-storage/index/maildir/maildir-storage.c src/lib-storage/index/mbox/mbox-lock.c src/lib-storage/index/mbox/mbox-storage.c src/lib-storage/mail-storage.h
diffstat 4 files changed, 40 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-storage.c	Fri Sep 30 21:46:30 2005 +0300
+++ b/src/lib-storage/index/maildir/maildir-storage.c	Fri Sep 30 21:55:00 2005 +0300
@@ -417,7 +417,12 @@
 	index_dir = maildir_get_index_path(istorage, name);
 	control_dir = maildir_get_control_path(storage, name);
 
-	index = index_storage_alloc(index_dir, path, MAILDIR_INDEX_PREFIX);
+	if ((flags & MAILBOX_OPEN_NO_INDEX_FILES) != 0)
+		index = mail_index_alloc(NULL, NULL);
+	else {
+		index = index_storage_alloc(index_dir, path,
+					    MAILDIR_INDEX_PREFIX);
+	}
 
 	/* for shared mailboxes get the create mode from the
 	   permissions of dovecot-shared file. */
--- a/src/lib-storage/index/mbox/mbox-lock.c	Fri Sep 30 21:46:30 2005 +0300
+++ b/src/lib-storage/index/mbox/mbox-lock.c	Fri Sep 30 21:55:00 2005 +0300
@@ -297,9 +297,6 @@
 			return -1;
 		}
 
-		if (max_wait_time == 0)
-			return 0;
-
 		now = time(NULL);
 		if (now >= max_wait_time)
 			return 0;
@@ -341,9 +338,6 @@
 			return -1;
 		}
 
-		if (max_wait_time == 0)
-			return 0;
-
 		now = time(NULL);
 		if (now >= max_wait_time)
 			return 0;
@@ -381,11 +375,16 @@
 	fl.l_start = 0;
 	fl.l_len = 0;
 
-	if (max_wait_time == 0)
+	if (max_wait_time == 0) {
+		i_assert(lock_type == F_UNLCK);
 		wait_type = F_SETLK;
-	else {
+	} else {
 		wait_type = F_SETLKW;
-		alarm(I_MIN(max_wait_time, 5));
+		now = time(NULL);
+		if (now >= max_wait_time)
+			alarm(1);
+		else
+			alarm(I_MIN(max_wait_time - now, 5));
 	}
 
 	while (fcntl(ctx->mbox->mbox_fd, wait_type, &fl) < 0) {
@@ -396,7 +395,7 @@
 		}
 
 		now = time(NULL);
-		if (max_wait_time != 0 && now >= max_wait_time) {
+		if (now >= max_wait_time) {
 			alarm(0);
 			return 0;
 		}
--- a/src/lib-storage/index/mbox/mbox-storage.c	Fri Sep 30 21:46:30 2005 +0300
+++ b/src/lib-storage/index/mbox/mbox-storage.c	Fri Sep 30 21:55:00 2005 +0300
@@ -541,7 +541,13 @@
 		index_dir = mbox_get_index_dir(istorage, name);
 	}
 
-	index = index_storage_alloc(index_dir, path, MBOX_INDEX_PREFIX);
+	if ((flags & MAILBOX_OPEN_NO_INDEX_FILES) != 0)
+		index = mail_index_alloc(NULL, NULL);
+	else {
+		index = index_storage_alloc(index_dir, path,
+					    MBOX_INDEX_PREFIX);
+	}
+
 	mbox = mbox_alloc(storage, index, name, flags);
 	if (mbox == NULL)
 		return NULL;
@@ -564,12 +570,26 @@
 mbox_mailbox_open_stream(struct mbox_storage *storage, const char *name,
 			 struct istream *input, enum mailbox_open_flags flags)
 {
+	struct index_storage *istorage = INDEX_STORAGE(storage);
 	struct mail_index *index;
 	struct mbox_mailbox *mbox;
+	const char *path, *index_dir;
 
 	flags |= MAILBOX_OPEN_READONLY;
 
-	index = mail_index_alloc(NULL, NULL);
+	if ((flags & MAILBOX_OPEN_NO_INDEX_FILES) != 0)
+		index = mail_index_alloc(NULL, NULL);
+	else {
+		path = mbox_get_path(istorage, name);
+		index_dir = mbox_get_index_dir(istorage, name);
+
+		/* make sure the required directories are also there */
+		if (create_mbox_index_dirs(istorage, name) < 0)
+			return NULL;
+
+		index = index_storage_alloc(index_dir, path, MBOX_INDEX_PREFIX);
+	}
+
 	mbox = mbox_alloc(storage, index, name, flags);
 	if (mbox == NULL)
 		return NULL;
--- a/src/lib-storage/mail-storage.h	Fri Sep 30 21:46:30 2005 +0300
+++ b/src/lib-storage/mail-storage.h	Fri Sep 30 21:55:00 2005 +0300
@@ -37,7 +37,9 @@
 	   (eg. when opening mailbox just for STATUS). */
 	MAILBOX_OPEN_FAST		= 0x02,
 	/* Don't reset MAIL_RECENT flags when syncing */
-	MAILBOX_OPEN_KEEP_RECENT	= 0x04
+	MAILBOX_OPEN_KEEP_RECENT	= 0x04,
+	/* Don't create index files for the mailbox */
+	MAILBOX_OPEN_NO_INDEX_FILES	= 0x08
 };
 
 enum mailbox_list_flags {