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)
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. */
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");
}
}
{
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 */