]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Fixed dbox to work with Maildir++ layout.
authorTimo Sirainen <tss@iki.fi>
Sat, 15 Nov 2008 16:43:54 +0000 (18:43 +0200)
committerTimo Sirainen <tss@iki.fi>
Sat, 15 Nov 2008 16:43:54 +0000 (18:43 +0200)
--HG--
branch : HEAD

src/lib-storage/index/dbox/dbox-storage.c
src/lib-storage/list/mailbox-list-fs.c
src/lib-storage/list/mailbox-list-maildir.c
src/lib-storage/mailbox-list-private.h
src/lib-storage/mailbox-list.c
src/lib-storage/mailbox-list.h

index 6751beecf8f5aa8866a767fea94fad6f746b92ad..bb54bb894aca06c18f7f3c090cc94ae0b41414ba 100644 (file)
@@ -463,6 +463,11 @@ dbox_list_delete_mailbox(struct mailbox_list *list, const char *name)
                        if (dbox_delete_nonrecursive(list, alt_path, name) < 0)
                                return -1;
                }
+               if (*list->set.maildir_name == '\0') {
+                       /* everything was in the one directory that was
+                          already deleted succesfully. */
+                       return 0;
+               }
                /* try to delete the directory also */
                deleted = TRUE;
                path = mailbox_list_get_path(list, name,
index ba7cdd00639a6d0a8bd7eddf16f458a69a819d74..fc70f5e77f18e3fe9d2a1c3622133a1b5b52f911 100644 (file)
@@ -356,6 +356,7 @@ static int fs_list_rename_mailbox(struct mailbox_list *list,
 struct mailbox_list fs_mailbox_list = {
        MEMBER(name) "fs",
        MEMBER(hierarchy_sep) '/',
+       MEMBER(props) 0,
        MEMBER(mailbox_name_max_length) PATH_MAX,
 
        {
index 6bd9437c8078d988f69de392c300dc788bcc61fc..852280982cac0b87bbcb4aa93e23027a9a57fc40 100644 (file)
@@ -438,6 +438,7 @@ static int maildir_list_rename_mailbox(struct mailbox_list *list,
 struct mailbox_list maildir_mailbox_list = {
        MEMBER(name) MAILBOX_LIST_NAME_MAILDIRPLUSPLUS,
        MEMBER(hierarchy_sep) '.',
+       MEMBER(props) MAILBOX_LIST_PROP_NO_MAILDIR_NAME,
        MEMBER(mailbox_name_max_length) PATH_MAX,
 
        {
@@ -464,6 +465,7 @@ struct mailbox_list maildir_mailbox_list = {
 struct mailbox_list imapdir_mailbox_list = {
        MEMBER(name) MAILBOX_LIST_NAME_IMAPDIR,
        MEMBER(hierarchy_sep) '.',
+       MEMBER(props) MAILBOX_LIST_PROP_NO_MAILDIR_NAME,
        MEMBER(mailbox_name_max_length) PATH_MAX,
 
        {
index 0f043ddaa33b85765077a0b172df4ced74611340..6f15cbdca7a9f23a997a268ac9e9803e63cbb1f7 100644 (file)
@@ -67,6 +67,7 @@ union mailbox_list_module_context {
 struct mailbox_list {
        const char *name;
        char hierarchy_sep;
+       enum mailbox_list_properties props;
        size_t mailbox_name_max_length;
 
        struct mailbox_list_vfuncs v;
index 24fab1aa48316ab2b64427e4da067789adaec04d..c0e49303e647fb59cc469632277876f09e404b49 100644 (file)
@@ -213,7 +213,9 @@ void mailbox_list_init(struct mailbox_list *list, struct mail_namespace *ns,
        list->set.inbox_path = p_strdup(list->pool, set->inbox_path);
        list->set.subscription_fname =
                p_strdup(list->pool, set->subscription_fname);
-       list->set.maildir_name = p_strdup(list->pool, set->maildir_name);
+       list->set.maildir_name =
+               (list->props & MAILBOX_LIST_PROP_NO_MAILDIR_NAME) != 0 ? "" :
+               p_strdup(list->pool, set->maildir_name);
 
        list->set.mail_storage_flags = set->mail_storage_flags;
        list->set.lock_method = set->lock_method;
index 771e4440ca3af28d9997d9f8f439528895e99510..0fe18ac6c9b09eaad8ed895f38eae6dcb27a867d 100644 (file)
@@ -7,6 +7,11 @@ struct mail_namespace;
 struct mailbox_list;
 struct mailbox_list_iterate_context;
 
+enum mailbox_list_properties {
+       /* maildir_name must always be empty */
+       MAILBOX_LIST_PROP_NO_MAILDIR_NAME       = 0x01
+};
+
 enum mailbox_list_flags {
        /* Print debugging information while initializing the driver */
        MAILBOX_LIST_FLAG_DEBUG                 = 0x01,