dovecot: Split mailbox_list_init() to _alloc() and _init(). _ini...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Aug 9 22:27:02 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/0c9b6ff6fb0b
changeset: 6256:0c9b6ff6fb0b
user: Timo Sirainen <tss at iki.fi>
date: Thu Aug 09 22:25:14 2007 +0300
description:
Split mailbox_list_init() to _alloc() and _init(). _init() is called only
after storage backend has overridden the wanted functions, so plugins can
override them.
diffstat:
6 files changed, 40 insertions(+), 31 deletions(-)
src/lib-storage/index/cydir/cydir-storage.c | 8 ++++---
src/lib-storage/index/dbox/dbox-storage.c | 8 ++++---
src/lib-storage/index/maildir/maildir-storage.c | 8 ++++---
src/lib-storage/index/mbox/mbox-storage.c | 10 +++++---
src/lib-storage/mailbox-list.c | 26 +++++++++++------------
src/lib-storage/mailbox-list.h | 11 +++++----
diffs (188 lines):
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/index/cydir/cydir-storage.c
--- a/src/lib-storage/index/cydir/cydir-storage.c Thu Aug 09 22:09:00 2007 +0300
+++ b/src/lib-storage/index/cydir/cydir-storage.c Thu Aug 09 22:25:14 2007 +0300
@@ -132,9 +132,7 @@ static int cydir_create(struct mail_stor
}
}
- if (mailbox_list_init(_storage->ns, "fs", &list_set,
- mail_storage_get_list_flags(_storage->flags),
- &_storage->list, error_r) < 0)
+ if (mailbox_list_alloc("fs", &_storage->list, error_r) < 0)
return -1;
storage->list_module_ctx.super = _storage->list->v;
_storage->list->v.iter_is_mailbox = cydir_list_iter_is_mailbox;
@@ -142,6 +140,10 @@ static int cydir_create(struct mail_stor
MODULE_CONTEXT_SET_FULL(_storage->list, cydir_mailbox_list_module,
storage, &storage->list_module_ctx);
+
+ /* finish list init after we've overridden vfuncs */
+ mailbox_list_init(_storage->list, _storage->ns, &list_set,
+ mail_storage_get_list_flags(_storage->flags));
return 0;
}
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/index/dbox/dbox-storage.c
--- a/src/lib-storage/index/dbox/dbox-storage.c Thu Aug 09 22:09:00 2007 +0300
+++ b/src/lib-storage/index/dbox/dbox-storage.c Thu Aug 09 22:25:14 2007 +0300
@@ -213,9 +213,7 @@ static int dbox_create(struct mail_stora
}
}
- if (mailbox_list_init(_storage->ns, "fs", &list_set,
- mail_storage_get_list_flags(_storage->flags),
- &list, error_r) < 0)
+ if (mailbox_list_alloc("fs", &list, error_r) < 0)
return -1;
_storage->list = list;
@@ -227,6 +225,10 @@ static int dbox_create(struct mail_stora
MODULE_CONTEXT_SET_FULL(list, dbox_mailbox_list_module,
storage, &storage->list_module_ctx);
+
+ /* finish list init after we've overridden vfuncs */
+ mailbox_list_init(list, _storage->ns, &list_set,
+ mail_storage_get_list_flags(_storage->flags));
storage->uidlist_dotlock_set = default_uidlist_dotlock_set;
storage->file_dotlock_set = default_file_dotlock_set;
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/index/maildir/maildir-storage.c
--- a/src/lib-storage/index/maildir/maildir-storage.c Thu Aug 09 22:09:00 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-storage.c Thu Aug 09 22:25:14 2007 +0300
@@ -252,9 +252,7 @@ maildir_create(struct mail_storage *_sto
}
}
- if (mailbox_list_init(_storage->ns, layout, &list_set,
- mail_storage_get_list_flags(flags),
- &list, error_r) < 0)
+ if (mailbox_list_alloc(layout, &list, error_r) < 0)
return -1;
_storage->list = list;
@@ -274,6 +272,10 @@ maildir_create(struct mail_storage *_sto
MODULE_CONTEXT_SET_FULL(list, maildir_mailbox_list_module,
storage, &storage->list_module_ctx);
+
+ /* finish list init after we've overridden vfuncs */
+ mailbox_list_init(list, _storage->ns, &list_set,
+ mail_storage_get_list_flags(flags));
storage->copy_with_hardlinks =
getenv("MAILDIR_COPY_WITH_HARDLINKS") != NULL;
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/index/mbox/mbox-storage.c
--- a/src/lib-storage/index/mbox/mbox-storage.c Thu Aug 09 22:09:00 2007 +0300
+++ b/src/lib-storage/index/mbox/mbox-storage.c Thu Aug 09 22:25:14 2007 +0300
@@ -432,10 +432,7 @@ static int mbox_create(struct mail_stora
list_set.mail_storage_flags = &_storage->flags;
list_set.lock_method = &_storage->lock_method;
- if (mailbox_list_init(_storage->ns, layout, &list_set,
- mail_storage_get_list_flags(_storage->flags) |
- MAILBOX_LIST_FLAG_MAILBOX_FILES,
- &_storage->list, error_r) < 0)
+ if (mailbox_list_alloc(layout, &_storage->list, error_r) < 0)
return -1;
storage->list_module_ctx.super = _storage->list->v;
@@ -445,6 +442,11 @@ static int mbox_create(struct mail_stora
}
_storage->list->v.iter_is_mailbox = mbox_list_iter_is_mailbox;
_storage->list->v.delete_mailbox = mbox_list_delete_mailbox;
+
+ /* finish list init after we've overridden vfuncs */
+ mailbox_list_init(_storage->list, _storage->ns, &list_set,
+ mail_storage_get_list_flags(_storage->flags) |
+ MAILBOX_LIST_FLAG_MAILBOX_FILES);
MODULE_CONTEXT_SET_FULL(_storage->list, mbox_mailbox_list_module,
storage, &storage->list_module_ctx);
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/mailbox-list.c
--- a/src/lib-storage/mailbox-list.c Thu Aug 09 22:09:00 2007 +0300
+++ b/src/lib-storage/mailbox-list.c Thu Aug 09 22:25:14 2007 +0300
@@ -76,10 +76,8 @@ void mailbox_list_unregister(const struc
array_free(&mailbox_list_drivers);
}
-int mailbox_list_init(struct mail_namespace *ns, const char *driver,
- const struct mailbox_list_settings *set,
- enum mailbox_list_flags flags,
- struct mailbox_list **list_r, const char **error_r)
+int mailbox_list_alloc(const char *driver, struct mailbox_list **list_r,
+ const char **error_r)
{
const struct mailbox_list *const *class_p;
struct mailbox_list *list;
@@ -91,12 +89,19 @@ int mailbox_list_init(struct mail_namesp
return -1;
}
+ class_p = array_idx(&mailbox_list_drivers, idx);
+ list = *list_r = (*class_p)->v.alloc();
+ array_create(&list->module_contexts, list->pool, sizeof(void *), 5);
+ return 0;
+}
+
+void mailbox_list_init(struct mailbox_list *list, struct mail_namespace *ns,
+ const struct mailbox_list_settings *set,
+ enum mailbox_list_flags flags)
+{
i_assert(set->root_dir == NULL || *set->root_dir != '\0');
i_assert(set->subscription_fname == NULL ||
*set->subscription_fname != '\0');
-
- class_p = array_idx(&mailbox_list_drivers, idx);
- list = (*class_p)->v.alloc();
list->ns = ns;
list->flags = flags;
@@ -134,7 +139,7 @@ int mailbox_list_init(struct mail_namesp
if ((flags & MAILBOX_LIST_FLAG_DEBUG) != 0) {
i_info("%s: root=%s, index=%s, control=%s, inbox=%s",
- driver, list->set.root_dir,
+ list->name, list->set.root_dir,
list->set.index_dir == NULL ? "" : list->set.index_dir,
list->set.control_dir == NULL ?
"" : list->set.control_dir,
@@ -142,16 +147,11 @@ int mailbox_list_init(struct mail_namesp
"" : list->set.inbox_path);
}
- array_create(&list->module_contexts, list->pool, sizeof(void *), 5);
-
if (hook_mailbox_list_created != NULL)
hook_mailbox_list_created(list);
list->set.mail_storage_flags = NULL;
list->set.lock_method = NULL;
-
- *list_r = list;
- return 0;
}
void mailbox_list_deinit(struct mailbox_list *list)
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/mailbox-list.h
--- a/src/lib-storage/mailbox-list.h Thu Aug 09 22:09:00 2007 +0300
+++ b/src/lib-storage/mailbox-list.h Thu Aug 09 22:25:14 2007 +0300
@@ -115,11 +115,12 @@ void mailbox_list_register(const struct
void mailbox_list_register(const struct mailbox_list *list);
void mailbox_list_unregister(const struct mailbox_list *list);
-/* Returns 0 if ok, -1 if initialization failed. */
-int mailbox_list_init(struct mail_namespace *ns, const char *driver,
- const struct mailbox_list_settings *set,
- enum mailbox_list_flags flags,
- struct mailbox_list **list_r, const char **error_r);
+/* Returns 0 if ok, -1 if driver was unknown. */
+int mailbox_list_alloc(const char *driver, struct mailbox_list **list_r,
+ const char **error_r);
+void mailbox_list_init(struct mailbox_list *list, struct mail_namespace *ns,
+ const struct mailbox_list_settings *set,
+ enum mailbox_list_flags flags);
void mailbox_list_deinit(struct mailbox_list *list);
const char *mailbox_list_get_driver_name(struct mailbox_list *list);
More information about the dovecot-cvs
mailing list