From: Timo Sirainen Date: Sat, 15 Nov 2008 16:43:54 +0000 (+0200) Subject: Fixed dbox to work with Maildir++ layout. X-Git-Tag: 1.2.alpha4~90 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bbd0a870f8639767e4e4011d2aedadac08d5c66f;p=thirdparty%2Fdovecot%2Fcore.git Fixed dbox to work with Maildir++ layout. --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/dbox/dbox-storage.c b/src/lib-storage/index/dbox/dbox-storage.c index 6751beecf8..bb54bb894a 100644 --- a/src/lib-storage/index/dbox/dbox-storage.c +++ b/src/lib-storage/index/dbox/dbox-storage.c @@ -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, diff --git a/src/lib-storage/list/mailbox-list-fs.c b/src/lib-storage/list/mailbox-list-fs.c index ba7cdd0063..fc70f5e77f 100644 --- a/src/lib-storage/list/mailbox-list-fs.c +++ b/src/lib-storage/list/mailbox-list-fs.c @@ -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, { diff --git a/src/lib-storage/list/mailbox-list-maildir.c b/src/lib-storage/list/mailbox-list-maildir.c index 6bd9437c80..852280982c 100644 --- a/src/lib-storage/list/mailbox-list-maildir.c +++ b/src/lib-storage/list/mailbox-list-maildir.c @@ -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, { diff --git a/src/lib-storage/mailbox-list-private.h b/src/lib-storage/mailbox-list-private.h index 0f043ddaa3..6f15cbdca7 100644 --- a/src/lib-storage/mailbox-list-private.h +++ b/src/lib-storage/mailbox-list-private.h @@ -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; diff --git a/src/lib-storage/mailbox-list.c b/src/lib-storage/mailbox-list.c index 24fab1aa48..c0e49303e6 100644 --- a/src/lib-storage/mailbox-list.c +++ b/src/lib-storage/mailbox-list.c @@ -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; diff --git a/src/lib-storage/mailbox-list.h b/src/lib-storage/mailbox-list.h index 771e4440ca..0fe18ac6c9 100644 --- a/src/lib-storage/mailbox-list.h +++ b/src/lib-storage/mailbox-list.h @@ -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,