]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mail-storage - Change mail_get_save_date() to return 1 when result is...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Thu, 19 Mar 2020 00:04:53 +0000 (01:04 +0100)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Sun, 5 Apr 2020 21:31:34 +0000 (21:31 +0000)
15 files changed:
src/lib-storage/index/cydir/cydir-mail.c
src/lib-storage/index/dbox-common/dbox-mail.c
src/lib-storage/index/dbox-multi/mdbox-mail.c
src/lib-storage/index/imapc/imapc-mail.c
src/lib-storage/index/index-mail.c
src/lib-storage/index/index-status.c
src/lib-storage/index/maildir/maildir-mail.c
src/lib-storage/index/mbox/mbox-mail.c
src/lib-storage/index/pop3c/pop3c-mail.c
src/lib-storage/index/raw/raw-mail.c
src/lib-storage/list/mailbox-list-index-status.c
src/lib-storage/mail-autoexpunge.c
src/lib-storage/mail-storage.h
src/plugins/expire/expire-plugin.c
src/plugins/virtual/virtual-mail.c

index 08132bb9e8985d9235f6239d448b8d16338e6459..5dddbf8433426dcb596b8d3a5a5cd057b07d5e53 100644 (file)
@@ -63,15 +63,15 @@ static int cydir_mail_get_save_date(struct mail *_mail, time_t *date_r)
        struct index_mail_data *data = &mail->data;
        struct stat st;
 
-       if (index_mail_get_save_date(_mail, date_r) == 0)
-               return 0;
+       if (index_mail_get_save_date(_mail, date_r) > 0)
+               return 1;
 
        if (cydir_mail_stat(_mail, &st) < 0)
                return -1;
 
        data->save_date = st.st_ctime;
        *date_r = data->save_date;
-       return 0;
+       return 1;
 }
 
 static int cydir_mail_get_physical_size(struct mail *_mail, uoff_t *size_r)
index cea046456ed16113905bc4012fcc0b0dbf12f231..25b6d3b43896fec4f1008add51995226db347e61 100644 (file)
@@ -146,8 +146,8 @@ int dbox_mail_get_save_date(struct mail *_mail, time_t *date_r)
        struct stat st;
        uoff_t offset;
 
-       if (index_mail_get_save_date(_mail, date_r) == 0)
-               return 0;
+       if (index_mail_get_save_date(_mail, date_r) > 0)
+               return 1;
 
        if (storage->v.mail_open(mail, &offset, &file) < 0)
                return -1;
@@ -159,7 +159,7 @@ int dbox_mail_get_save_date(struct mail *_mail, time_t *date_r)
                return -1;
        }
        *date_r = data->save_date = st.st_ctime;
-       return 0;
+       return 1;
 }
 
 static int
index 1b48f4fedfa4804b8c6cb442bbfa8f816164255d..071a30804b81500f411d04a8c472068557990ecb 100644 (file)
@@ -162,7 +162,7 @@ static int mdbox_mail_get_save_date(struct mail *mail, time_t *date_r)
        }
 
        *date_r = dbox_rec->save_date;
-       return 0;
+       return 1;
 }
 
 static int
index 9cc0ea27603b39f2a8665fa9ec0d8b1cc2ba1f88..414327f264077c1e5b8a2515058643990d8426cc 100644 (file)
@@ -145,7 +145,9 @@ static int imapc_mail_get_save_date(struct mail *_mail, time_t *date_r)
 
        if (data->save_date == (time_t)-1) {
                /* FIXME: we could use a value stored in cache */
-               return imapc_mail_get_received_date(_mail, date_r);
+               if (imapc_mail_get_received_date(_mail, date_r) < 0)
+                       return -1;
+               return 0;
        }
        *date_r = data->save_date;
        return 0;
index 26d22311f9b129b1e65cd2d1f50256fc5e5f962f..f0fc37573aa34ccd79b431b8647a2779d136642c 100644 (file)
@@ -388,7 +388,7 @@ int index_mail_get_save_date(struct mail *_mail, time_t *date_r)
        }
 
        *date_r = data->save_date;
-       return *date_r == (time_t)-1 ? -1 : 0;
+       return *date_r == (time_t)-1 ? -1 : 1;
 }
 
 static int index_mail_cache_sent_date(struct index_mail *mail)
index 1a2fff8aee9af7dc41438d45d0dca0bc2ebdc045..41887945891cbb2cf2385ea90416e58134449bf3 100644 (file)
@@ -281,7 +281,7 @@ index_mailbox_get_first_save_date(struct mailbox *box,
        mail = mail_alloc(t, 0, NULL);
        for (seq = 1; seq <= hdr->messages_count; seq++) {
                mail_set_seq(mail, seq);
-               if (mail_get_save_date(mail, &metadata_r->first_save_date) == 0) {
+               if (mail_get_save_date(mail, &metadata_r->first_save_date) >= 0) {
                        ret = 0;
                        break;
                }
index c21215faba1ed939577dc32a327e673b19526f91..24197706fe90f44c2abd4e4c10159a54b08e5297 100644 (file)
@@ -170,14 +170,14 @@ static int maildir_mail_get_save_date(struct mail *_mail, time_t *date_r)
        struct index_mail_data *data = &mail->data;
        struct stat st;
 
-       if (index_mail_get_save_date(_mail, date_r) == 0)
-               return 0;
+       if (index_mail_get_save_date(_mail, date_r) > 0)
+               return 1;
 
        if (maildir_mail_stat(_mail, &st) < 0)
                return -1;
 
        *date_r = data->save_date = st.st_ctime;
-       return 0;
+       return 1;
 }
 
 static int
index 0b183a8ce1e340129578e567ca4e844f9185e5c8..0614970a9019112694eca482f33f3963a36ec4d3 100644 (file)
@@ -135,7 +135,7 @@ static int mbox_mail_get_save_date(struct mail *_mail, time_t *date_r)
        struct index_mail *mail = INDEX_MAIL(_mail);
        struct index_mail_data *data = &mail->data;
 
-       if (index_mail_get_save_date(_mail, date_r) == 0)
+       if (index_mail_get_save_date(_mail, date_r) > 0)
                return 0;
 
        /* no way to know this. save the current time into cache and use
index 8e845eaa7d7c09ad66fc5c144eef573c638b10f6..eb39a8cda8ebdd5c93097992e32c03f39498bcd0 100644 (file)
@@ -60,7 +60,9 @@ static int pop3c_mail_get_save_date(struct mail *_mail, time_t *date_r)
 
        if (data->save_date == (time_t)-1) {
                /* FIXME: we could use a value stored in cache */
-               return pop3c_mail_get_received_date(_mail, date_r);
+               if (pop3c_mail_get_received_date(_mail, date_r) < 0)
+                       return -1;
+               return 0;
        }
        *date_r = data->save_date;
        return 0;
index 64b33a91aacef8c601c6cb906dd74a87a95e727c..2c473fef1b7cd7876f73199080f21cc70aaa7ee7 100644 (file)
@@ -60,7 +60,7 @@ static int raw_mail_get_save_date(struct mail *_mail, time_t *date_r)
        }
 
        *date_r = mail->data.save_date = mbox->ctime;
-       return 0;
+       return 1;
 }
 
 static int raw_mail_get_physical_size(struct mail *_mail, uoff_t *size_r)
index 45f079bd534e3d05c84d5e0f8f5c57a4e5a25177..33cd49f9b0551e320b6b63b22451db251ebfbae5 100644 (file)
@@ -488,7 +488,7 @@ index_list_update_first_saved(struct mailbox *box,
                messages_count = mail_index_view_get_messages_count(box->view);
                for (seq = 1; seq <= messages_count; seq++) {
                        mail_set_seq(mail, seq);
-                       if (mail_get_save_date(mail, &save_date) == 0) {
+                       if (mail_get_save_date(mail, &save_date) >= 0) {
                                first_saved.uid = mail->uid;
                                first_saved.timestamp = save_date;
                                break;
index 47920ceaf34902e5715b18f54f46f16a5a22f593..a38af80f9df8fb18c5210b9f9bd660c77e0dd803 100644 (file)
@@ -86,7 +86,7 @@ mailbox_autoexpunge_batch(struct mailbox *box,
                        /* only max_mails is used. nothing further to do. */
                        done = TRUE;
                        break;
-               } else if (mail_get_save_date(mail, &timestamp) == 0) {
+               } else if (mail_get_save_date(mail, &timestamp) >= 0) {
                        if (I_MAX(last_rename_stamp, timestamp) > expire_time) {
                                done = TRUE;
                                break;
index 328abd9dd6afba6f5ec4f3c7bcd66daeefc57049..501a815317cd5babd65c55fe5ee048722b311c56 100644 (file)
@@ -895,8 +895,9 @@ int mail_get_parts(struct mail *mail, struct message_part **parts_r);
 int mail_get_date(struct mail *mail, time_t *date_r, int *timezone_r);
 /* Get the time when the mail was received (IMAP INTERNALDATE). */
 int mail_get_received_date(struct mail *mail, time_t *date_r);
-/* Get the time when the mail was saved into this mailbox. This time may not
-   always be entirely reliable. */
+/* Get the time when the mail was saved into this mailbox. This returns -1 on
+   error, 0 if a real save date is not supported and a fall-back date is used,
+   and 1 when a save date was successfully retrieved. */
 int mail_get_save_date(struct mail *mail, time_t *date_r);
 
 /* Get the space used by the mail as seen by the reader. Linefeeds are always
index 6dd713b8293b0bef9b7282cddefb576137b01300..0a245ad517b8780fe299ff914a9c5ee20827cbff 100644 (file)
@@ -196,7 +196,7 @@ static void first_nonexpunged_timestamp(struct mailbox_transaction_context *t,
        for (seq = 2; seq <= hdr->messages_count; seq++) {
                if (!mail_index_is_expunged(view, seq)) {
                        mail_set_seq(mail, seq);
-                       if (mail_get_save_date(mail, stamp_r) == 0)
+                       if (mail_get_save_date(mail, stamp_r) >= 0)
                                break;
                }
        }
index 3ee67cf7040ff248fdc2ecf01b3307e563d27f8a..38dde49e8bbe2cc420213cfd1438c7c1fd917272 100644 (file)
@@ -349,14 +349,14 @@ static int virtual_mail_get_save_date(struct mail *mail, time_t *date_r)
 {
        struct virtual_mail *vmail = (struct virtual_mail *)mail;
        struct mail *backend_mail;
+       int ret;
 
        if (backend_mail_get(vmail, &backend_mail) < 0)
                return -1;
-       if (mail_get_save_date(backend_mail, date_r) < 0) {
+       ret = mail_get_save_date(backend_mail, date_r);
+       if (ret < 0)
                virtual_box_copy_error(mail->box, backend_mail->box);
-               return -1;
-       }
-       return 0;
+       return ret;
 }
 
 static int virtual_mail_get_virtual_mail_size(struct mail *mail, uoff_t *size_r)