]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mailbox_get_metadata() no longer always opens mailbox.
authorTimo Sirainen <tss@iki.fi>
Sun, 2 Oct 2011 17:06:58 +0000 (20:06 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 2 Oct 2011 17:06:58 +0000 (20:06 +0300)
src/lib-storage/index/dbox-multi/mdbox-storage.c
src/lib-storage/index/dbox-single/sdbox-storage.c
src/lib-storage/index/imapc/imapc-storage.c
src/lib-storage/index/index-status.c
src/lib-storage/index/maildir/maildir-storage.c
src/lib-storage/index/mbox/mbox-storage.c
src/lib-storage/mail-storage.c
src/plugins/virtual/virtual-storage.c

index d783d932e53cb083a05a7b53011dfac4c3bc5c28..73606b08bc9c197f4ad3723dbad4fef885770941 100644 (file)
@@ -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
index c2d391f440cb0a9d5f74a16cff2fa6389cb9aa97..bc57af6c342cc32133f3ea58cf19f075656b5583 100644 (file)
@@ -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
index 19014f1c7e8859b64b223e799411f7dd94847355..e0122290c76a8bc3853a179cc68bb650d2688f97 100644 (file)
@@ -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)
index bf1ddbf40ce2ab99994d145b511ff0687c7dd3d0..48ad258d3f82b03add8676cfd8d45479d417fb87 100644 (file)
@@ -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;
index 0dda84b4753d7c5492154ffd14e348b0bc23b663..e1424171aacb04122d115e0ae70454e04919fb1f 100644 (file)
@@ -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)
index 727ffffa88d37b3156426a58330684db7b4a8a5b..003bca97a9c2ba984a90952999490dd999a40304 100644 (file)
@@ -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)
index 997ea33be48f3bd94c4620944b917690ea1c352d..b3e52cc4c644f69d3c850c100a9a73efe211d069 100644 (file)
@@ -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;
 
index 20191e8fc6a7787c300d54cf6624efa5fcd8dfcb..bdd17fbd7a4ea089187474f2e56decd61482cff7 100644 (file)
@@ -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