From: Timo Sirainen Date: Thu, 1 Jul 2010 16:19:41 +0000 (+0100) Subject: lib-storage: When renaming a mailbox, make sure any unnecessary directories get deleted. X-Git-Tag: 2.0.rc1~39 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ae1a57954535642c09c3b8aee184736ddbb06cdf;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: When renaming a mailbox, make sure any unnecessary directories get deleted. --HG-- branch : HEAD --- diff --git a/src/lib-storage/list/mailbox-list-delete.c b/src/lib-storage/list/mailbox-list-delete.c index db2772bd18..4d02738570 100644 --- a/src/lib-storage/list/mailbox-list-delete.c +++ b/src/lib-storage/list/mailbox-list-delete.c @@ -234,9 +234,8 @@ int mailbox_list_delete_mailbox_nonrecursive(struct mailbox_list *list, 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; diff --git a/src/lib-storage/list/mailbox-list-delete.h b/src/lib-storage/list/mailbox-list-delete.h index edc05096d5..38d5a59a8c 100644 --- a/src/lib-storage/list/mailbox-list-delete.h +++ b/src/lib-storage/list/mailbox-list-delete.h @@ -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 @@ int mailbox_list_delete_mailbox_nonrecursive(struct mailbox_list *list, 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 diff --git a/src/lib-storage/list/mailbox-list-fs.c b/src/lib-storage/list/mailbox-list-fs.c index f1eda3e73f..a30386f56d 100644 --- a/src/lib-storage/list/mailbox-list-fs.c +++ b/src/lib-storage/list/mailbox-list-fs.c @@ -460,6 +460,9 @@ static int rename_dir(struct mailbox_list *oldlist, const char *oldname, "rmdir(%s) failed: %m", oldpath); } } + + /* avoid leaving empty directories lying around */ + mailbox_list_delete_until_root(oldlist, oldpath, type); return 0; }