changeset 11679:f4b809b83a13 HEAD

lib-storage: When renaming a mailbox, make sure any unnecessary directories get deleted.
author Timo Sirainen <tss@iki.fi>
date Thu, 01 Jul 2010 17:19:41 +0100
parents 636fb64394a5
children 49b226835cd2
files src/lib-storage/list/mailbox-list-delete.c src/lib-storage/list/mailbox-list-delete.h src/lib-storage/list/mailbox-list-fs.c
diffstat 3 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-delete.c	Thu Jul 01 17:18:49 2010 +0100
+++ b/src/lib-storage/list/mailbox-list-delete.c	Thu Jul 01 17:19:41 2010 +0100
@@ -234,9 +234,8 @@
 	return 0;
 }
 
-static void
-mailbox_list_delete_until_root(struct mailbox_list *list, const char *path,
-			       enum mailbox_list_path_type type)
+void mailbox_list_delete_until_root(struct mailbox_list *list, const char *path,
+				    enum mailbox_list_path_type type)
 {
 	const char *root_dir, *p;
 	unsigned int len;
--- a/src/lib-storage/list/mailbox-list-delete.h	Thu Jul 01 17:18:49 2010 +0100
+++ b/src/lib-storage/list/mailbox-list-delete.h	Thu Jul 01 17:19:41 2010 +0100
@@ -1,6 +1,8 @@
 #ifndef MAILBOX_LIST_DELETE_H
 #define MAILBOX_LIST_DELETE_H
 
+enum mailbox_list_path_type;
+
 int mailbox_list_delete_maildir_via_trash(struct mailbox_list *list,
 					  const char *name,
 					  const char *trash_dir);
@@ -11,4 +13,7 @@
 					     bool rmdir_path);
 void mailbox_list_delete_finish(struct mailbox_list *list, const char *name);
 
+void mailbox_list_delete_until_root(struct mailbox_list *list, const char *path,
+				    enum mailbox_list_path_type type);
+
 #endif
--- a/src/lib-storage/list/mailbox-list-fs.c	Thu Jul 01 17:18:49 2010 +0100
+++ b/src/lib-storage/list/mailbox-list-fs.c	Thu Jul 01 17:19:41 2010 +0100
@@ -460,6 +460,9 @@
 				"rmdir(%s) failed: %m", oldpath);
 		}
 	}
+
+	/* avoid leaving empty directories lying around */
+	mailbox_list_delete_until_root(oldlist, oldpath, type);
 	return 0;
 }