dovecot-2.2: maildir: Fixed looking up physical size for a mail ...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Mar 18 14:49:41 UTC 2014
details: http://hg.dovecot.org/dovecot-2.2/rev/30fb6e95b110
changeset: 17162:30fb6e95b110
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 d7e09442b666 -r 30fb6e95b110 src/lib-storage/index/maildir/maildir-mail.c
--- a/src/lib-storage/index/maildir/maildir-mail.c Tue Mar 18 14:39:15 2014 +0200
+++ b/src/lib-storage/index/maildir/maildir-mail.c Tue Mar 18 16:49:10 2014 +0200
@@ -288,6 +288,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 d7e09442b666 -r 30fb6e95b110 src/lib-storage/index/maildir/maildir-save.c
--- a/src/lib-storage/index/maildir/maildir-save.c Tue Mar 18 14:39:15 2014 +0200
+++ b/src/lib-storage/index/maildir/maildir-save.c Tue Mar 18 16:49:10 2014 +0200
@@ -304,8 +304,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;
@@ -320,6 +321,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 d7e09442b666 -r 30fb6e95b110 src/lib-storage/index/maildir/maildir-storage.h
--- a/src/lib-storage/index/maildir/maildir-storage.h Tue Mar 18 14:39:15 2014 +0200
+++ b/src/lib-storage/index/maildir/maildir-storage.h Tue Mar 18 16:49:10 2014 +0200
@@ -126,6 +126,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