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