]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: When renaming a mailbox, make sure any unnecessary directories get deleted.
authorTimo Sirainen <tss@iki.fi>
Thu, 1 Jul 2010 16:19:41 +0000 (17:19 +0100)
committerTimo Sirainen <tss@iki.fi>
Thu, 1 Jul 2010 16:19:41 +0000 (17:19 +0100)
--HG--
branch : HEAD

src/lib-storage/list/mailbox-list-delete.c
src/lib-storage/list/mailbox-list-delete.h
src/lib-storage/list/mailbox-list-fs.c

index db2772bd18c46b0c0669dc7c759e6ccaaf034a08..4d027385703336bb263f69facbf0b54a01a0b939 100644 (file)
@@ -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;
index edc05096d56b074cf76b22a3860b1158f8518c0c..38d5a59a8c49672cca59158b499fe1a4f240550c 100644 (file)
@@ -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
index f1eda3e73fa3ea223d4ac8f929f7f5c1b42264a6..a30386f56d69dd070fb1252456372128f31be6b3 100644 (file)
@@ -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;
 }