Mercurial > dovecot > core-2.2
changeset 12785:395af848ec10
lib-storage: Allow creating a secondary mailbox_list for a namespace.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 10 Mar 2011 18:31:28 +0200 |
parents | 5086e1504e28 |
children | 934c529052eb |
files | src/lib-storage/mail-storage.c src/lib-storage/mailbox-list.c src/lib-storage/mailbox-list.h |
diffstat | 3 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mail-storage.c Thu Mar 10 18:29:59 2011 +0200 +++ b/src/lib-storage/mail-storage.c Thu Mar 10 18:31:28 2011 +0200 @@ -280,6 +280,7 @@ enum mail_storage_flags flags, const char **error_r) { struct mail_storage *storage_class, *storage = NULL; + struct mailbox_list *list; struct mailbox_list_settings list_set; enum mailbox_list_flags list_flags = 0; const char *data = ns->set->location; @@ -326,7 +327,7 @@ if (mail_storage_is_mailbox_file(storage_class)) list_flags |= MAILBOX_LIST_FLAG_MAILBOX_FILES; if (mailbox_list_create(list_set.layout, ns, &list_set, - list_flags, error_r) < 0) { + list_flags, &list, error_r) < 0) { *error_r = t_strdup_printf("Mailbox list driver %s: %s", list_set.layout, *error_r); return -1;
--- a/src/lib-storage/mailbox-list.c Thu Mar 10 18:29:59 2011 +0200 +++ b/src/lib-storage/mailbox-list.c Thu Mar 10 18:31:28 2011 +0200 @@ -111,13 +111,15 @@ int mailbox_list_create(const char *driver, struct mail_namespace *ns, const struct mailbox_list_settings *set, - enum mailbox_list_flags flags, const char **error_r) + enum mailbox_list_flags flags, + struct mailbox_list **list_r, const char **error_r) { const struct mailbox_list *const *class_p; struct mailbox_list *list; unsigned int idx; - i_assert(ns->list == NULL); + i_assert(ns->list == NULL || + (flags & MAILBOX_LIST_FLAG_SECONDARY) != 0); i_assert(set->subscription_fname == NULL || *set->subscription_fname != '\0'); @@ -193,7 +195,10 @@ list->set.inbox_path == NULL ? "" : list->set.inbox_path); } - mail_namespace_finish_list_init(ns, list); + if ((flags & MAILBOX_LIST_FLAG_SECONDARY) == 0) + mail_namespace_finish_list_init(ns, list); + + *list_r = list; hook_mailbox_list_created(list); return 0;
--- a/src/lib-storage/mailbox-list.h Thu Mar 10 18:29:59 2011 +0200 +++ b/src/lib-storage/mailbox-list.h Thu Mar 10 18:31:28 2011 +0200 @@ -29,7 +29,10 @@ enum mailbox_list_flags { /* Mailboxes are files, not directories. */ - MAILBOX_LIST_FLAG_MAILBOX_FILES = 0x01 + MAILBOX_LIST_FLAG_MAILBOX_FILES = 0x01, + /* Namespace already has a mailbox list, don't assign this + mailbox list to it. */ + MAILBOX_LIST_FLAG_SECONDARY = 0x02 }; enum mailbox_info_flags { @@ -151,7 +154,8 @@ /* Returns 0 if ok, -1 if driver was unknown. */ int mailbox_list_create(const char *driver, struct mail_namespace *ns, const struct mailbox_list_settings *set, - enum mailbox_list_flags flags, const char **error_r); + enum mailbox_list_flags flags, + struct mailbox_list **list_r, const char **error_r); void mailbox_list_destroy(struct mailbox_list **list); const char *