From: Timo Sirainen Date: Wed, 11 Mar 2009 22:12:45 +0000 (-0400) Subject: Added mail_index_open_or_create(). X-Git-Tag: 2.0.alpha1~1038^2~47 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=41e6eb07b411ea58352ba9d2cc8cf340325d49f3;p=thirdparty%2Fdovecot%2Fcore.git Added mail_index_open_or_create(). --HG-- branch : HEAD --- diff --git a/src/lib-index/mail-index.c b/src/lib-index/mail-index.c index 514901c1c7..ae847a6262 100644 --- a/src/lib-index/mail-index.c +++ b/src/lib-index/mail-index.c @@ -437,6 +437,18 @@ int mail_index_open(struct mail_index *index, enum mail_index_open_flags flags, return 1; } +int mail_index_open_or_create(struct mail_index *index, + enum mail_index_open_flags flags, + enum file_lock_method lock_method) +{ + int ret; + + flags |= MAIL_INDEX_OPEN_FLAG_CREATE; + ret = mail_index_open(index, flags, lock_method); + i_assert(ret != 0); + return ret < 0 ? -1 : 0; +} + void mail_index_close_file(struct mail_index *index) { if (index->file_lock != NULL) diff --git a/src/lib-index/mail-index.h b/src/lib-index/mail-index.h index 073fb6e92f..4112d13612 100644 --- a/src/lib-index/mail-index.h +++ b/src/lib-index/mail-index.h @@ -187,8 +187,14 @@ void mail_index_set_fsync_types(struct mail_index *index, void mail_index_set_permissions(struct mail_index *index, mode_t mode, gid_t gid); +/* Open index. Returns 1 if ok, 0 if index doesn't exist and CREATE flags + wasn't given, -1 if error. */ int mail_index_open(struct mail_index *index, enum mail_index_open_flags flags, enum file_lock_method lock_method); +/* Open or create index. Returns 0 if ok, -1 if error. */ +int mail_index_open_or_create(struct mail_index *index, + enum mail_index_open_flags flags, + enum file_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. */ diff --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index 407ce3f334..efaa26debb 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -428,10 +428,9 @@ void index_storage_mailbox_open(struct index_mailbox *ibox) if (mail_index_move_to_memory(ibox->index) < 0) { /* try opening once more. it should be created directly into memory now. */ - index_flags |= MAIL_INDEX_OPEN_FLAG_CREATE; - ret = mail_index_open(ibox->index, index_flags, - storage->lock_method); - if (ret <= 0) + if (mail_index_open_or_create(ibox->index, + index_flags, + storage->lock_method) < 0) i_panic("in-memory index creation failed"); } } diff --git a/src/lib-storage/list/index-mailbox-list.c b/src/lib-storage/list/index-mailbox-list.c index 483c5790fb..657f00b665 100644 --- a/src/lib-storage/list/index-mailbox-list.c +++ b/src/lib-storage/list/index-mailbox-list.c @@ -456,26 +456,26 @@ static int index_mailbox_list_open_indexes(struct mailbox_list *list, { struct index_mailbox_list *ilist = INDEX_LIST_CONTEXT(list); const char *path; - enum mail_index_open_flags index_flags; + enum mail_index_open_flags index_flags = 0; enum mail_storage_flags storage_flags; int ret; /* FIXME: a bit ugly way to get the flags, but this will do for now.. */ - index_flags = MAIL_INDEX_OPEN_FLAG_CREATE; storage_flags = *list->set.mail_storage_flags; #ifndef MMAP_CONFLICTS_WRITE if ((storage_flags & MAIL_STORAGE_FLAG_MMAP_DISABLE) != 0) #endif index_flags |= MAIL_INDEX_OPEN_FLAG_MMAP_DISABLE; - if (mail_index_open(ilist->mail_index, index_flags, - *list->set.lock_method) < 0) { + if (mail_index_open_or_create(ilist->mail_index, index_flags, + *list->set.lock_method) < 0) { if (mail_index_move_to_memory(ilist->mail_index) < 0) { /* try opening once more. it should be created directly into memory now. */ - ret = mail_index_open(ilist->mail_index, index_flags, - *list->set.lock_method); - if (ret <= 0) { + ret = mail_index_open_or_create(ilist->mail_index, + index_flags, + *list->set.lock_method); + if (ret < 0) { /* everything failed. there's a bug in the code, but just work around it by disabling the index completely */