From: Timo Sirainen Date: Sun, 2 Oct 2011 17:06:58 +0000 (+0300) Subject: lib-storage: mailbox_get_metadata() no longer always opens mailbox. X-Git-Tag: 2.1.beta1~83 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=206ed2f6fa3a6fb291498627b2da626581c07a18;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: mailbox_get_metadata() no longer always opens mailbox. --- diff --git a/src/lib-storage/index/dbox-multi/mdbox-storage.c b/src/lib-storage/index/dbox-multi/mdbox-storage.c index d783d932e5..73606b08bc 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-storage.c +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c @@ -330,11 +330,13 @@ mdbox_mailbox_get_metadata(struct mailbox *box, { struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)box; + if (index_mailbox_get_metadata(box, items, metadata_r) < 0) + return -1; if ((items & MAILBOX_METADATA_GUID) != 0) { if (mdbox_mailbox_get_guid(mbox, metadata_r->guid) < 0) return -1; } - return index_mailbox_get_metadata(box, items, metadata_r); + return 0; } static int diff --git a/src/lib-storage/index/dbox-single/sdbox-storage.c b/src/lib-storage/index/dbox-single/sdbox-storage.c index c2d391f440..bc57af6c34 100644 --- a/src/lib-storage/index/dbox-single/sdbox-storage.c +++ b/src/lib-storage/index/dbox-single/sdbox-storage.c @@ -271,11 +271,13 @@ sdbox_mailbox_get_metadata(struct mailbox *box, { struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; + if (index_mailbox_get_metadata(box, items, metadata_r) < 0) + return -1; if ((items & MAILBOX_METADATA_GUID) != 0) { memcpy(metadata_r->guid, mbox->mailbox_guid, sizeof(metadata_r->guid)); } - return index_mailbox_get_metadata(box, items, metadata_r); + return 0; } static int diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index 19014f1c7e..e0122290c7 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -604,12 +604,14 @@ static int imapc_mailbox_get_metadata(struct mailbox *box, enum mailbox_metadata_items items, struct mailbox_metadata *metadata_r) { + if (index_mailbox_get_metadata(box, items, metadata_r) < 0) + return -1; if ((items & MAILBOX_METADATA_GUID) != 0) { /* a bit ugly way to do this, but better than nothing for now. FIXME: if indexes are enabled, keep this there. */ mail_generate_guid_128_hash(box->name, metadata_r->guid); } - return index_mailbox_get_metadata(box, items, metadata_r); + return 0; } static void imapc_idle_timeout(struct imapc_mailbox *mbox) diff --git a/src/lib-storage/index/index-status.c b/src/lib-storage/index/index-status.c index bf1ddbf40c..48ad258d3f 100644 --- a/src/lib-storage/index/index-status.c +++ b/src/lib-storage/index/index-status.c @@ -263,6 +263,11 @@ int index_mailbox_get_metadata(struct mailbox *box, enum mailbox_metadata_items items, struct mailbox_metadata *metadata_r) { + if (!box->opened) { + if (mailbox_open(box) < 0) + return -1; + } + if ((items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0) { if (get_metadata_virtual_size(box, metadata_r) < 0) return -1; diff --git a/src/lib-storage/index/maildir/maildir-storage.c b/src/lib-storage/index/maildir/maildir-storage.c index 0dda84b475..e1424171aa 100644 --- a/src/lib-storage/index/maildir/maildir-storage.c +++ b/src/lib-storage/index/maildir/maildir-storage.c @@ -480,12 +480,15 @@ maildir_mailbox_get_metadata(struct mailbox *box, { struct maildir_mailbox *mbox = (struct maildir_mailbox *)box; + if (index_mailbox_get_metadata(box, items, metadata_r) < 0) + return -1; + if ((items & MAILBOX_METADATA_GUID) != 0) { if (maildir_uidlist_get_mailbox_guid(mbox->uidlist, metadata_r->guid) < 0) return -1; } - return index_mailbox_get_metadata(box, items, metadata_r); + return 0; } static void maildir_mailbox_close(struct mailbox *box) diff --git a/src/lib-storage/index/mbox/mbox-storage.c b/src/lib-storage/index/mbox/mbox-storage.c index 727ffffa88..003bca97a9 100644 --- a/src/lib-storage/index/mbox/mbox-storage.c +++ b/src/lib-storage/index/mbox/mbox-storage.c @@ -628,11 +628,13 @@ mbox_mailbox_get_metadata(struct mailbox *box, { struct mbox_mailbox *mbox = (struct mbox_mailbox *)box; + if (index_mailbox_get_metadata(box, items, metadata_r) < 0) + return -1; if ((items & MAILBOX_METADATA_GUID) != 0) { if (mbox_mailbox_get_guid(mbox, metadata_r->guid) < 0) return -1; } - return index_mailbox_get_metadata(box, items, metadata_r); + return 0; } static void mbox_notify_changes(struct mailbox *box) diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 997ea33be4..b3e52cc4c6 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -1214,10 +1214,6 @@ int mailbox_get_metadata(struct mailbox *box, enum mailbox_metadata_items items, { memset(metadata_r, 0, sizeof(*metadata_r)); - if (!box->opened) { - if (mailbox_open(box) < 0) - return -1; - } if (box->v.get_metadata(box, items, metadata_r) < 0) return -1; diff --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index 20191e8fc6..bdd17fbd7a 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -363,12 +363,14 @@ virtual_mailbox_get_metadata(struct mailbox *box, enum mailbox_metadata_items items, struct mailbox_metadata *metadata_r) { + if (index_mailbox_get_metadata(box, items, metadata_r) < 0) + return -1; if ((items & MAILBOX_METADATA_GUID) != 0) { mail_storage_set_error(box->storage, MAIL_ERROR_NOTPOSSIBLE, "Virtual mailboxes have no GUIDs"); return -1; } - return index_mailbox_get_metadata(box, items, metadata_r); + return 0; } static void