Mercurial > dovecot > original-hg > dovecot-1.2
changeset 6256:0c9b6ff6fb0b HEAD
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.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 09 Aug 2007 22:25:14 +0300 |
parents | 4c48e42412ef |
children | 2618805b3d94 |
files | src/lib-storage/index/cydir/cydir-storage.c src/lib-storage/index/dbox/dbox-storage.c src/lib-storage/index/maildir/maildir-storage.c src/lib-storage/index/mbox/mbox-storage.c src/lib-storage/mailbox-list.c src/lib-storage/mailbox-list.h |
diffstat | 6 files changed, 40 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ } } - 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 @@ 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; }
--- 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 @@ } } - 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; @@ -228,6 +226,10 @@ 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; storage->new_file_dotlock_set = default_new_file_dotlock_set;
--- 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 @@ } } - 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; @@ -275,6 +273,10 @@ 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; storage->copy_preserve_filename =
--- 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 @@ 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; @@ -446,6 +443,11 @@ _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); return 0;
--- 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 @@ 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,13 +89,20 @@ 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; list->cached_uid = (uid_t)-1; @@ -134,7 +139,7 @@ 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 @@ "" : 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)
--- 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 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);