dovecot-2.1: maildir: Fixed looking up physical size for a mail ...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Mar 18 16:23:29 UTC 2014
details: http://hg.dovecot.org/dovecot-2.1/rev/2799cc960c0d
changeset: 15013:2799cc960c0d
user: Timo Sirainen <tss at iki.fi>
date: Tue Mar 18 16:49:10 2014 +0200
description:
maildir: Fixed looking up physical size for a mail while it's being saved.
Based on patch by Teemu Huovila.
diffstat:
src/lib-storage/index/maildir/maildir-mail.c | 4 ++++
src/lib-storage/index/maildir/maildir-save.c | 23 +++++++++++++++++++++--
src/lib-storage/index/maildir/maildir-storage.h | 3 +++
3 files changed, 28 insertions(+), 2 deletions(-)
diffs (67 lines):
diff -r 79bae66e666c -r 2799cc960c0d src/lib-storage/index/maildir/maildir-mail.c
--- a/src/lib-storage/index/maildir/maildir-mail.c Tue Mar 11 13:24:09 2014 +0200
+++ b/src/lib-storage/index/maildir/maildir-mail.c Tue Mar 18 16:49:10 2014 +0200
@@ -289,6 +289,10 @@
if (maildir_mail_get_fname(mbox, _mail, &fname) <= 0)
return -1;
} else {
+ if (maildir_save_file_get_size(_mail->transaction, _mail->seq,
+ vsize, size_r) == 0)
+ return 1;
+
path = maildir_save_file_get_path(_mail->transaction,
_mail->seq);
fname = strrchr(path, '/');
diff -r 79bae66e666c -r 2799cc960c0d src/lib-storage/index/maildir/maildir-save.c
--- a/src/lib-storage/index/maildir/maildir-save.c Tue Mar 11 13:24:09 2014 +0200
+++ b/src/lib-storage/index/maildir/maildir-save.c Tue Mar 18 16:49:10 2014 +0200
@@ -302,8 +302,9 @@
return t_strdup_printf("%s/%s", dir, fname);
}
-const char *maildir_save_file_get_path(struct mailbox_transaction_context *t,
- uint32_t seq)
+
+static struct maildir_filename *
+maildir_save_get_mf(struct mailbox_transaction_context *t, uint32_t seq)
{
struct maildir_save_context *save_ctx =
(struct maildir_save_context *)t->save_ctx;
@@ -318,6 +319,24 @@
i_assert(mf != NULL);
seq--;
}
+ return mf;
+}
+
+int maildir_save_file_get_size(struct mailbox_transaction_context *t,
+ uint32_t seq, bool vsize, uoff_t *size_r)
+{
+ struct maildir_filename *mf = maildir_save_get_mf(t, seq);
+
+ *size_r = vsize ? mf->vsize : mf->size;
+ return *size_r == (uoff_t)-1 ? -1 : 0;
+}
+
+const char *maildir_save_file_get_path(struct mailbox_transaction_context *t,
+ uint32_t seq)
+{
+ struct maildir_save_context *save_ctx =
+ (struct maildir_save_context *)t->save_ctx;
+ struct maildir_filename *mf = maildir_save_get_mf(t, seq);
return maildir_mf_get_path(save_ctx, mf);
}
diff -r 79bae66e666c -r 2799cc960c0d src/lib-storage/index/maildir/maildir-storage.h
--- a/src/lib-storage/index/maildir/maildir-storage.h Tue Mar 11 13:24:09 2014 +0200
+++ b/src/lib-storage/index/maildir/maildir-storage.h Tue Mar 18 16:49:10 2014 +0200
@@ -132,6 +132,9 @@
const char *basename);
void maildir_save_set_sizes(struct maildir_filename *mf,
uoff_t size, uoff_t vsize);
+
+int maildir_save_file_get_size(struct mailbox_transaction_context *t,
+ uint32_t seq, bool vsize, uoff_t *size_r);
const char *maildir_save_file_get_path(struct mailbox_transaction_context *t,
uint32_t seq);
More information about the dovecot-cvs
mailing list