struct event *event = event_create(list->list.event);
if (mailbox_list_create(list_set.layout, event, list->list.ns,
- &list_set, MAILBOX_LIST_FLAG_SECONDARY,
+ &list_set, list->list.mail_set,
+ MAILBOX_LIST_FLAG_SECONDARY,
&list->index_list, &error) < 0) {
e_error(list->list.event,
"imapc: Couldn't create %s mailbox list: %s",
event_set_ptr(event, SETTINGS_EVENT_FILTER_NAME,
(void *)storage_class->name);
event_add_str(event, "namespace", ns->set->name);
- if (mailbox_list_create(list_set->layout, event, ns, list_set,
- list_flags, &list, error_r) < 0) {
- *error_r = t_strdup_printf("Mailbox list driver %s: %s",
- list_set->layout, *error_r);
+
+ const struct mail_storage_settings *mail_set;
+ if (settings_get(event, &mail_storage_setting_parser_info, 0,
+ &mail_set, error_r) < 0) {
event_unref(&event);
return -1;
}
+
+ int ret = mailbox_list_create(list_set->layout, event, ns, list_set,
+ mail_set, list_flags, &list, error_r);
+ if (ret < 0) {
+ *error_r = t_strdup_printf("Mailbox list driver %s: %s",
+ list_set->layout, *error_r);
+ }
+ settings_free(mail_set);
event_unref(&event);
- return 0;
+ return ret;
}
static int
int mailbox_list_create(const char *driver, struct event *event,
struct mail_namespace *ns,
const struct mailbox_list_settings *set,
+ const struct mail_storage_settings *mail_set,
enum mailbox_list_flags flags,
struct mailbox_list **list_r, const char **error_r)
{
const struct mailbox_list *class;
- const struct mail_storage_settings *mail_set;
struct mailbox_list *list;
i_assert(ns->list == NULL ||
return -1;
}
- if (settings_get(event, &mail_storage_setting_parser_info, 0,
- &mail_set, error_r) < 0)
- return -1;
-
i_assert(set->root_dir == NULL || *set->root_dir != '\0' ||
(class->props & MAILBOX_LIST_PROP_NO_ROOT) != 0);
struct mail_namespace;
struct mail_storage;
struct mailbox_list;
+struct mail_storage_settings;
enum mailbox_list_properties {
/* maildir_name must always be empty */
int mailbox_list_create(const char *driver, struct event *event,
struct mail_namespace *ns,
const struct mailbox_list_settings *set,
+ const struct mail_storage_settings *mail_set,
enum mailbox_list_flags flags,
struct mailbox_list **list_r, const char **error_r);
void mailbox_list_destroy(struct mailbox_list **list);