]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dbox: Moved more mailbox creation code to dbox-common.
authorTimo Sirainen <tss@iki.fi>
Sat, 6 Feb 2010 21:41:33 +0000 (23:41 +0200)
committerTimo Sirainen <tss@iki.fi>
Sat, 6 Feb 2010 21:41:33 +0000 (23:41 +0200)
--HG--
branch : HEAD

src/lib-storage/index/dbox-common/dbox-storage.c
src/lib-storage/index/dbox-multi/mdbox-storage.c
src/lib-storage/index/dbox-single/sdbox-storage.c

index 221382a000d54948aa853f0b0e3195f57f7ad908..f74061143ed43951722477947e0000989a81e5a1 100644 (file)
@@ -75,10 +75,33 @@ dbox_cleanup_if_exists(struct mailbox_list *list, const char *path)
        return TRUE;
 }
 
-int dbox_mailbox_open(struct mailbox *box)
+static int dbox_mailbox_create_indexes(struct mailbox *box,
+                                      const struct mailbox_update *update)
 {
        struct dbox_storage *storage = (struct dbox_storage *)box->storage;
+       const char *origin;
+       mode_t mode;
+       gid_t gid;
+
+       mailbox_list_get_dir_permissions(box->list, NULL, &mode, &gid, &origin);
+       if (mkdir_parents_chgrp(box->path, mode, gid, origin) == 0) {
+               /* create indexes immediately with the dbox header */
+               if (index_storage_mailbox_open(box) < 0)
+                       return -1;
+               if (storage->v.mailbox_create_indexes(box, update) < 0)
+                       return -1;
+       } else if (errno != EEXIST) {
+               if (!mail_storage_set_error_from_errno(box->storage)) {
+                       mail_storage_set_critical(box->storage,
+                               "mkdir(%s) failed: %m", box->path);
+               }
+               return -1;
+       }
+       return 0;
+}
 
+int dbox_mailbox_open(struct mailbox *box)
+{
        if (box->input != NULL) {
                mail_storage_set_critical(box->storage,
                        "dbox doesn't support streamed mailboxes");
@@ -91,7 +114,7 @@ int dbox_mailbox_open(struct mailbox *box)
                if (strcmp(box->name, "INBOX") == 0 &&
                    (box->list->ns->flags & NAMESPACE_FLAG_INBOX) != 0) {
                        /* INBOX always exists, create it */
-                       if (storage->v.mailbox_create_indexes(box, NULL) < 0)
+                       if (dbox_mailbox_create_indexes(box, NULL) < 0)
                                return -1;
                        return box->opened ? 0 :
                                index_storage_mailbox_open(box);
@@ -134,7 +157,6 @@ dbox_get_alt_path(struct mailbox_list *list, const char *path)
 int dbox_mailbox_create(struct mailbox *box,
                        const struct mailbox_update *update, bool directory)
 {
-       struct dbox_storage *storage = (struct dbox_storage *)box->storage;
        const char *path, *alt_path, *origin;
        struct stat st;
 
@@ -176,7 +198,7 @@ int dbox_mailbox_create(struct mailbox *box,
                return -1;
        }
 
-       return storage->v.mailbox_create_indexes(box, update);
+       return dbox_mailbox_create_indexes(box, update);
 }
 
 int dbox_list_iter_is_mailbox(struct mailbox_list_iterate_context *ctx ATTR_UNUSED,
index 9b6be1c1ba348186a161488c0c0191de0ff0abb4..32c1c0d85f0bcee916b3a7495a86063887920cee 100644 (file)
@@ -245,29 +245,12 @@ static int mdbox_mailbox_create_indexes(struct mailbox *box,
                                        const struct mailbox_update *update)
 {
        struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)box;
-       const char *origin;
-       mode_t mode;
-       gid_t gid;
        int ret;
 
-       mailbox_list_get_dir_permissions(box->list, NULL, &mode, &gid, &origin);
-       if (mkdir_parents_chgrp(box->path, mode, gid, origin) == 0) {
-               /* create indexes immediately with the dbox header */
-               if (index_storage_mailbox_open(box) < 0)
-                       return -1;
-               mbox->creating = TRUE;
-               ret = mdbox_write_index_header(box, update);
-               mbox->creating = FALSE;
-               if (ret < 0)
-                       return -1;
-       } else if (errno != EEXIST) {
-               if (!mail_storage_set_error_from_errno(box->storage)) {
-                       mail_storage_set_critical(box->storage,
-                               "mkdir(%s) failed: %m", box->path);
-               }
-               return -1;
-       }
-       return 0;
+       mbox->creating = TRUE;
+       ret = mdbox_write_index_header(box, update);
+       mbox->creating = FALSE;
+       return ret;
 }
 
 static void mdbox_storage_get_status_guid(struct mailbox *box,
index d54b570d882e2276dded0a39514a31f5b253e4b2..ab0f5727a877d0f6013adef48e3c3edb321fc164 100644 (file)
@@ -183,29 +183,12 @@ static int sdbox_mailbox_create_indexes(struct mailbox *box,
                                        const struct mailbox_update *update)
 {
        struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box;
-       const char *origin;
-       mode_t mode;
-       gid_t gid;
        int ret;
 
-       mailbox_list_get_dir_permissions(box->list, NULL, &mode, &gid, &origin);
-       if (mkdir_parents_chgrp(box->path, mode, gid, origin) == 0) {
-               /* create indexes immediately with the dbox header */
-               if (index_storage_mailbox_open(box) < 0)
-                       return -1;
-               mbox->creating = TRUE;
-               ret = sdbox_write_index_header(box, update);
-               mbox->creating = FALSE;
-               if (ret < 0)
-                       return -1;
-       } else if (errno != EEXIST) {
-               if (!mail_storage_set_error_from_errno(box->storage)) {
-                       mail_storage_set_critical(box->storage,
-                               "mkdir(%s) failed: %m", box->path);
-               }
-               return -1;
-       }
-       return 0;
+       mbox->creating = TRUE;
+       ret = sdbox_write_index_header(box, update);
+       mbox->creating = FALSE;
+       return ret;
 }
 
 static void sdbox_storage_get_status_guid(struct mailbox *box,