]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Added mail_index_open_or_create().
authorTimo Sirainen <tss@iki.fi>
Wed, 11 Mar 2009 22:12:45 +0000 (18:12 -0400)
committerTimo Sirainen <tss@iki.fi>
Wed, 11 Mar 2009 22:12:45 +0000 (18:12 -0400)
--HG--
branch : HEAD

src/lib-index/mail-index.c
src/lib-index/mail-index.h
src/lib-storage/index/index-storage.c
src/lib-storage/list/index-mailbox-list.c

index 514901c1c72f8acf946d00ad61fb1a0c60857d0b..ae847a626290db966a5e3408d9d7d96499d594ba 100644 (file)
@@ -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)
index 073fb6e92f75521ee7f1d93b5a6e05eb946d182d..4112d1361270676a4d7737e84b56f391c9f8844a 100644 (file)
@@ -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. */
index 407ce3f3345dd9f0c5c50611d8c47181df27526e..efaa26debbef0666c2cac64bfbde0f7f1c12bbca 100644 (file)
@@ -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");
                }
        }
index 483c5790fbf6a511757ef342c2ea332c4d72a011..657f00b66518fb120b96a3128aaac44d33d3ec93 100644 (file)
@@ -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 */