]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Use mailbox_list_delete_finish_ret() for fs & maildir++ layout
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 27 Jun 2017 13:37:16 +0000 (16:37 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 3 Jul 2017 12:22:18 +0000 (15:22 +0300)
Fixes a problem where e.g. index directory existed but mail root didn't,
and the mailbox couldn't be fully deleted. This was especially a problem
with ITERINDEX enabled.

src/lib-storage/list/mailbox-list-fs.c
src/lib-storage/list/mailbox-list-maildir.c

index 1dd5a34f70db215576db619e73dde8bee38cceb3..6ab2b052a3df669ece2c2a2f8cda7a3b134589c5 100644 (file)
@@ -265,9 +265,8 @@ static int fs_list_delete_mailbox(struct mailbox_list *list, const char *name)
                ret = fs_list_delete_maildir(list, name);
        }
 
-       if (ret == 0 || (list->props & MAILBOX_LIST_PROP_AUTOCREATE_DIRS) != 0)
-               mailbox_list_delete_finish(list, name);
-       return ret;
+       i_assert(ret <= 0);
+       return mailbox_list_delete_finish_ret(list, name, ret == 0);
 }
 
 static int fs_list_rmdir(struct mailbox_list *list, const char *name,
index d61404ece92066bf00971646f4207e17fcc80445..589e63cc679e04e15737525b38bfe2fdcd4154ff 100644 (file)
@@ -250,9 +250,8 @@ maildir_list_delete_mailbox(struct mailbox_list *list, const char *name)
                ret = maildir_list_delete_maildir(list, name);
        }
 
-       if (ret == 0 || (list->props & MAILBOX_LIST_PROP_AUTOCREATE_DIRS) != 0)
-               mailbox_list_delete_finish(list, name);
-       return ret;
+       i_assert(ret <= 0);
+       return mailbox_list_delete_finish_ret(list, name, ret == 0);
 }
 
 static int maildir_list_delete_dir(struct mailbox_list *list, const char *name)