changeset 3911:3a2fe49912f3 HEAD

Fixed mail_index_move_to_memory() to work better and made it public
author Timo Sirainen <tss@iki.fi>
date Thu, 19 Jan 2006 01:04:15 +0200
parents 3b0f9be42126
children fc0b638330a4
files src/lib-index/mail-index-private.h src/lib-index/mail-index.c src/lib-index/mail-index.h
diffstat 3 files changed, 24 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-index-private.h	Thu Jan 19 01:03:43 2006 +0200
+++ b/src/lib-index/mail-index-private.h	Thu Jan 19 01:04:15 2006 +0200
@@ -256,7 +256,6 @@
 void mail_index_view_transaction_unref(struct mail_index_view *view);
 
 void mail_index_set_inconsistent(struct mail_index *index);
-int mail_index_move_to_memory(struct mail_index *index);
 
 int mail_index_set_error(struct mail_index *index, const char *fmt, ...)
 	__attr_format__(2, 3);
--- a/src/lib-index/mail-index.c	Thu Jan 19 01:03:43 2006 +0200
+++ b/src/lib-index/mail-index.c	Thu Jan 19 01:04:15 2006 +0200
@@ -1695,8 +1695,28 @@
 
 int mail_index_move_to_memory(struct mail_index *index)
 {
+	struct mail_index_map *map;
+	int ret = 0;
+
+	/* set the index as being into memory */
 	i_free_and_null(index->dir);
-	return mail_transaction_log_move_to_memory(index->log);
+
+	/* move index map to memory */
+	map = mail_index_map_clone(index->map, index->map->hdr.record_size);
+	mail_index_unmap(index, &index->map);
+	index->map = map;
+	index->hdr = &map->hdr;
+
+	/* move transaction log to memory */
+	if (mail_transaction_log_move_to_memory(index->log) < 0)
+		ret = -1;
+
+	/* close the index file. */
+	if (close(index->fd) < 0)
+		mail_index_set_syscall_error(index, "close()");
+	index->fd = -1;
+
+	return ret;
 }
 
 void mail_index_mark_corrupted(struct mail_index *index)
--- a/src/lib-index/mail-index.h	Thu Jan 19 01:03:43 2006 +0200
+++ b/src/lib-index/mail-index.h	Thu Jan 19 01:04:15 2006 +0200
@@ -159,6 +159,9 @@
 		    enum mail_index_lock_method lock_method);
 void mail_index_close(struct mail_index *index);
 
+/* Move the index into memory. Returns 0 if ok, -1 if error occurred. */
+int mail_index_move_to_memory(struct mail_index *index);
+
 struct mail_cache *mail_index_get_cache(struct mail_index *index);
 
 /* Refresh index so mail_index_lookup*() will return latest values. Note that