From: Timo Sirainen Date: Wed, 15 Nov 2023 21:20:15 +0000 (+0200) Subject: lib-storage: mail_storage_vfuncs.autodetect() - Change API to return root_path and... X-Git-Tag: 2.4.1~1226 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3e0c9209bee8f455818263d2a8ea98b983ff86fc;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: mail_storage_vfuncs.autodetect() - Change API to return root_path and inbox_path This will be necessary once mailbox_list_settings is removed. --- diff --git a/src/lib-storage/index/dbox-multi/mdbox-storage.c b/src/lib-storage/index/dbox-multi/mdbox-storage.c index ca367c5335..e5850d3d8e 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-storage.c +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c @@ -118,7 +118,9 @@ mdbox_storage_find_root_dir(const struct mail_namespace *ns) static bool mdbox_storage_autodetect(const struct mail_namespace *ns, struct mailbox_list_settings *set, - const struct mail_storage_settings *mail_set ATTR_UNUSED) + const struct mail_storage_settings *mail_set ATTR_UNUSED, + const char **root_path_r, + const char **inbox_path_r ATTR_UNUSED) { struct event *event = ns->user->event; struct stat st; @@ -146,7 +148,7 @@ mdbox_storage_autodetect(const struct mail_namespace *ns, return FALSE; } - set->root_dir = root_dir; + *root_path_r = root_dir; return TRUE; } diff --git a/src/lib-storage/index/dbox-single/sdbox-storage.c b/src/lib-storage/index/dbox-single/sdbox-storage.c index c8d23fb0c0..7597889c87 100644 --- a/src/lib-storage/index/dbox-single/sdbox-storage.c +++ b/src/lib-storage/index/dbox-single/sdbox-storage.c @@ -80,7 +80,9 @@ sdbox_storage_find_root_dir(const struct mail_namespace *ns) static bool sdbox_storage_autodetect(const struct mail_namespace *ns, struct mailbox_list_settings *set, - const struct mail_storage_settings *mail_set ATTR_UNUSED) + const struct mail_storage_settings *mail_set ATTR_UNUSED, + const char **root_path_r, + const char **inbox_path_r ATTR_UNUSED) { struct event *event = ns->user->event; struct stat st; @@ -110,7 +112,7 @@ sdbox_storage_autodetect(const struct mail_namespace *ns, return FALSE; } - set->root_dir = root_dir; + *root_path_r = root_dir; return TRUE; } diff --git a/src/lib-storage/index/maildir/maildir-storage.c b/src/lib-storage/index/maildir/maildir-storage.c index 73db6f3f84..f2f8635859 100644 --- a/src/lib-storage/index/maildir/maildir-storage.c +++ b/src/lib-storage/index/maildir/maildir-storage.c @@ -134,7 +134,9 @@ maildir_storage_find_root_dir(const struct mail_namespace *ns) static bool maildir_storage_autodetect(const struct mail_namespace *ns, struct mailbox_list_settings *set, - const struct mail_storage_settings *mail_set ATTR_UNUSED) + const struct mail_storage_settings *mail_set ATTR_UNUSED, + const char **root_path_r, + const char **inbox_path_r ATTR_UNUSED) { struct event *event = ns->user->event; struct stat st; @@ -161,7 +163,7 @@ maildir_storage_autodetect(const struct mail_namespace *ns, return FALSE; } - set->root_dir = root_dir; + *root_path_r = root_dir; return TRUE; } diff --git a/src/lib-storage/index/mbox/mbox-storage.c b/src/lib-storage/index/mbox/mbox-storage.c index ed572f132b..f3afc45842 100644 --- a/src/lib-storage/index/mbox/mbox-storage.c +++ b/src/lib-storage/index/mbox/mbox-storage.c @@ -329,7 +329,8 @@ mbox_storage_find_inbox_file(struct mail_user *user, struct event *event) static bool mbox_storage_autodetect(const struct mail_namespace *ns, struct mailbox_list_settings *set, - const struct mail_storage_settings *mail_set ATTR_UNUSED) + const struct mail_storage_settings *mail_set ATTR_UNUSED, + const char **root_path_r, const char **inbox_path_r) { struct event *event = ns->user->event; const char *root_dir, *inbox_path; @@ -356,8 +357,8 @@ mbox_storage_autodetect(const struct mail_namespace *ns, if (inbox_path == NULL) { inbox_path = mbox_storage_find_inbox_file(ns->user, event); } - set->root_dir = root_dir; - set->inbox_path = inbox_path; + *root_path_r = root_dir; + *inbox_path_r = inbox_path; return TRUE; } diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index 69af3b547e..41dfe67e13 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -61,9 +61,13 @@ struct mail_storage_vfuncs { void (*get_list_settings)(const struct mail_namespace *ns, struct mailbox_list_settings *set, const struct mail_storage_settings *mail_set); + /* Returns TRUE if mailbox path could be autodetected. root_path_r + must be returned in that case. inbox_path_r is NULL already when + calling, and means the default INBOX path is used. */ bool (*autodetect)(const struct mail_namespace *ns, struct mailbox_list_settings *set, - const struct mail_storage_settings *mail_set); + const struct mail_storage_settings *mail_set, + const char **root_path_r, const char **inbox_path_r); struct mailbox *(*mailbox_alloc)(struct mail_storage *storage, struct mailbox_list *list, diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index c01d83b596..1965e53fe6 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -144,13 +144,19 @@ mail_storage_autodetect(const struct mail_namespace *ns, const struct mail_storage_settings *mail_set) { struct mail_storage *const *classes; + const char *root_path, *inbox_path = NULL; unsigned int i, count; classes = array_get(&mail_storage_classes, &count); for (i = 0; i < count; i++) { if (classes[i]->v.autodetect != NULL) { - if (classes[i]->v.autodetect(ns, set, mail_set)) + if (classes[i]->v.autodetect(ns, set, mail_set, + &root_path, &inbox_path)) { + set->root_dir = root_path; + if (inbox_path != NULL) + set->inbox_path = inbox_path; return classes[i]; + } } } return NULL;