Mercurial > dovecot > original-hg > dovecot-1.2
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