Mercurial > dovecot > core-2.2
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; }