changeset 5470:402796d50c3e HEAD

Moved some common code to mailbox-list.c
author Timo Sirainen <tss@iki.fi>
date Fri, 30 Mar 2007 22:30:37 +0300
parents 35a54122b396
children 7df495c556ff
files src/lib-storage/list/mailbox-list-fs.c src/lib-storage/list/mailbox-list-maildir.c src/lib-storage/mailbox-list.c
diffstat 3 files changed, 27 insertions(+), 49 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-fs.c	Fri Mar 30 22:08:11 2007 +0300
+++ b/src/lib-storage/list/mailbox-list-fs.c	Fri Mar 30 22:30:37 2007 +0300
@@ -143,8 +143,6 @@
 	struct fs_mailbox_list *list = (struct fs_mailbox_list *)_list;
 	const struct mailbox_list_settings *set = &_list->set;
 
-	mailbox_list_clear_error(&list->list);
-
 	if (name == NULL) {
 		/* return root directories */
 		switch (type) {
@@ -210,13 +208,6 @@
 	struct stat st;
 	const char *path;
 
-	mailbox_list_clear_error(&list->list);
-
-	if (!mailbox_list_is_valid_existing_name(_list, name)) {
-		*status = MAILBOX_NAME_INVALID;
-		return 0;
-	}
-
 	path = mailbox_list_get_path(_list, name,
 				     MAILBOX_LIST_PATH_TYPE_MAILBOX);
 
@@ -269,8 +260,6 @@
 	struct fs_mailbox_list *list = (struct fs_mailbox_list *)_list;
 	const char *path;
 
-	mailbox_list_clear_error(&list->list);
-
 	path = t_strconcat(_list->set.control_dir != NULL ?
 			   _list->set.control_dir : _list->set.root_dir,
 			   "/", _list->set.subscription_fname, NULL);
@@ -303,12 +292,6 @@
 	const char *oldpath, *newpath, *old_indexdir, *new_indexdir, *p;
 	struct stat st;
 
-	if (!mailbox_list_is_valid_existing_name(list, oldname) ||
-	    !mailbox_list_is_valid_create_name(list, newname)) {
-		mailbox_list_set_error(list, "Invalid mailbox name");
-		return -1;
-	}
-
 	oldpath = mailbox_list_get_path(list, oldname,
 					MAILBOX_LIST_PATH_TYPE_MAILBOX);
 	newpath = mailbox_list_get_path(list, newname,
--- a/src/lib-storage/list/mailbox-list-maildir.c	Fri Mar 30 22:08:11 2007 +0300
+++ b/src/lib-storage/list/mailbox-list-maildir.c	Fri Mar 30 22:30:37 2007 +0300
@@ -142,8 +142,6 @@
 	struct maildir_mailbox_list *list =
 		(struct maildir_mailbox_list *)_list;
 
-	mailbox_list_clear_error(&list->list);
-
 	if (name == NULL) {
 		/* return root directories */
 		switch (type) {
@@ -201,18 +199,9 @@
 				     const char *name,
 				     enum mailbox_name_status *status)
 {
-	struct maildir_mailbox_list *list =
-		(struct maildir_mailbox_list *)_list;
 	struct stat st;
 	const char *path;
 
-	mailbox_list_clear_error(&list->list);
-
-	if (!mailbox_list_is_valid_existing_name(_list, name)) {
-		*status = MAILBOX_NAME_INVALID;
-		return 0;
-	}
-
 	path = mailbox_list_get_path(_list, name,
 				     MAILBOX_LIST_PATH_TYPE_MAILBOX);
 
@@ -244,17 +233,6 @@
 	return list->temp_prefix;
 }
 
-static const char *
-maildir_list_join_refmask(struct mailbox_list *_list __attr_unused__,
-			  const char *ref, const char *mask)
-{
-	if (*ref != '\0') {
-		/* merge reference and mask */
-		mask = t_strconcat(ref, mask, NULL);
-	}
-	return mask;
-}
-
 static int maildir_list_set_subscribed(struct mailbox_list *_list,
 				       const char *name, bool set)
 {
@@ -262,8 +240,6 @@
 		(struct maildir_mailbox_list *)_list;
 	const char *path;
 
-	mailbox_list_clear_error(&list->list);
-
 	path = t_strconcat(_list->set.control_dir != NULL ?
 			   _list->set.control_dir : _list->set.root_dir,
 			   "/", _list->set.subscription_fname, NULL);
@@ -388,12 +364,6 @@
 	int ret;
         bool found;
 
-	if (!mailbox_list_is_valid_existing_name(list, oldname) ||
-	    !mailbox_list_is_valid_create_name(list, newname)) {
-		mailbox_list_set_error(list, "Invalid mailbox name");
-		return -1;
-	}
-
 	/* NOTE: it's possible to rename a nonexisting mailbox which has
 	   children. In that case we should ignore the rename() error. */
 	oldpath = mailbox_list_get_path(list, oldname,
@@ -444,7 +414,7 @@
 		maildir_list_get_path,
 		maildir_list_get_mailbox_name_status,
 		maildir_list_get_temp_prefix,
-		maildir_list_join_refmask,
+		NULL,
 		maildir_list_iter_init,
 		maildir_list_iter_next,
 		maildir_list_iter_deinit,
--- a/src/lib-storage/mailbox-list.c	Fri Mar 30 22:08:11 2007 +0300
+++ b/src/lib-storage/mailbox-list.c	Fri Mar 30 22:30:37 2007 +0300
@@ -183,6 +183,8 @@
 const char *mailbox_list_get_path(struct mailbox_list *list, const char *name,
 				  enum mailbox_list_path_type type)
 {
+	mailbox_list_clear_error(list);
+
 	return list->v.get_path(list, name, type);
 }
 
@@ -194,13 +196,28 @@
 const char *mailbox_list_join_refmask(struct mailbox_list *list,
 				      const char *ref, const char *mask)
 {
-	return list->v.join_refmask(list, ref, mask);
+	if (list->v.join_refmask != NULL)
+		return list->v.join_refmask(list, ref, mask);
+
+	/* the default implementation: */
+	if (*ref != '\0') {
+		/* merge reference and mask */
+		mask = t_strconcat(ref, mask, NULL);
+	}
+	return mask;
 }
 
 int mailbox_list_get_mailbox_name_status(struct mailbox_list *list,
 					 const char *name,
 					 enum mailbox_name_status *status)
 {
+	mailbox_list_clear_error(list);
+
+	if (!mailbox_list_is_valid_existing_name(list, name)) {
+		*status = MAILBOX_NAME_INVALID;
+		return 0;
+	}
+
 	return list->v.get_mailbox_name_status(list, name, status);
 }
 
@@ -229,6 +246,8 @@
 int mailbox_list_set_subscribed(struct mailbox_list *list,
 				const char *name, bool set)
 {
+	mailbox_list_clear_error(list);
+
 	return list->v.set_subscribed(list, name, set);
 }
 
@@ -240,6 +259,12 @@
 int mailbox_list_rename_mailbox(struct mailbox_list *list,
 				const char *oldname, const char *newname)
 {
+	if (!mailbox_list_is_valid_existing_name(list, oldname) ||
+	    !mailbox_list_is_valid_create_name(list, newname)) {
+		mailbox_list_set_error(list, "Invalid mailbox name");
+		return -1;
+	}
+
 	return list->v.rename_mailbox(list, oldname, newname);
 }