dovecot: Split mailbox_list_init() to _alloc() and _init(). _ini...

dovecot at dovecot.org dovecot at dovecot.org
Thu Aug 9 22:27:02 EEST 2007


details:   http://hg.dovecot.org/dovecot/rev/0c9b6ff6fb0b
changeset: 6256:0c9b6ff6fb0b
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Aug 09 22:25:14 2007 +0300
description:
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.

diffstat:

6 files changed, 40 insertions(+), 31 deletions(-)
src/lib-storage/index/cydir/cydir-storage.c     |    8 ++++---
src/lib-storage/index/dbox/dbox-storage.c       |    8 ++++---
src/lib-storage/index/maildir/maildir-storage.c |    8 ++++---
src/lib-storage/index/mbox/mbox-storage.c       |   10 +++++---
src/lib-storage/mailbox-list.c                  |   26 +++++++++++------------
src/lib-storage/mailbox-list.h                  |   11 +++++----

diffs (188 lines):

diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/index/cydir/cydir-storage.c
--- 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 @@ static int cydir_create(struct mail_stor
 		}
 	}
 
-	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 @@ static int cydir_create(struct mail_stor
 
 	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;
 }
 
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/index/dbox/dbox-storage.c
--- 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 @@ static int dbox_create(struct mail_stora
 		}
 	}
 
-	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;
@@ -227,6 +225,10 @@ static int dbox_create(struct mail_stora
 
 	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;
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/index/maildir/maildir-storage.c
--- 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 @@ maildir_create(struct mail_storage *_sto
 		}
 	}
 
-	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;
@@ -274,6 +272,10 @@ maildir_create(struct mail_storage *_sto
 
 	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;
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/index/mbox/mbox-storage.c
--- 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 @@ static int mbox_create(struct mail_stora
 	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;
@@ -445,6 +442,11 @@ static int mbox_create(struct mail_stora
 	}
 	_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);
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/mailbox-list.c
--- 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 @@ void mailbox_list_unregister(const struc
 		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,12 +89,19 @@ int mailbox_list_init(struct mail_namesp
 		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;
@@ -134,7 +139,7 @@ int mailbox_list_init(struct mail_namesp
 
 	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 @@ int mailbox_list_init(struct mail_namesp
 		       "" : 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)
diff -r 4c48e42412ef -r 0c9b6ff6fb0b src/lib-storage/mailbox-list.h
--- 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 
 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);


More information about the dovecot-cvs mailing list