mail_namespace_destroy(ns);
return -1;
}
- mail_user_add_namespace(user, ns);
_storage->ns->flags |= NAMESPACE_FLAG_USABLE;
-
*_name = mail_namespace_fix_sep(ns, name);
*ns_r = ns;
+
+ mail_user_add_namespace(user, &ns);
return 0;
}
}
return -1;
}
- mail_user_add_namespace(user, namespaces);
+ mail_user_add_namespace(user, &namespaces);
if (hook_mail_namespaces_created != NULL) {
T_BEGIN {
user->home_looked_up = TRUE;
}
-void mail_user_add_namespace(struct mail_user *user, struct mail_namespace *ns)
+void mail_user_add_namespace(struct mail_user *user,
+ struct mail_namespace **namespaces)
{
- struct mail_namespace **tmp, *next;
+ struct mail_namespace **tmp, *next, *ns = *namespaces;
for (; ns != NULL; ns = next) {
next = ns->next;
ns->next = *tmp;
*tmp = ns;
}
+ *namespaces = user->namespaces;
}
void mail_user_drop_useless_namespaces(struct mail_user *user)
has no home directory) or -1 if lookup failed. */
int mail_user_get_home(struct mail_user *user, const char **home_r);
-/* Add a new namespace to user's namespaces. */
-void mail_user_add_namespace(struct mail_user *user, struct mail_namespace *ns);
+/* Add more namespaces to user's namespaces. The ->next pointers may be
+ changed, so the namespaces pointer will be updated to user->namespaces. */
+void mail_user_add_namespace(struct mail_user *user,
+ struct mail_namespace **namespaces);
/* Drop autocreated shared namespaces that don't have any "usable" mailboxes. */
void mail_user_drop_useless_namespaces(struct mail_user *user);