changeset 8038:dc280df713f4 HEAD

mailbox.save_init() API now takes ** pointer to dest_mail, so multiple plugins can safely specify it. ctx->dest_mail also gets updated then.
author Timo Sirainen <tss@iki.fi>
date Sun, 20 Jul 2008 23:47:32 +0300
parents ab1c170b1559
children ccf59801b63c
files src/lib-storage/index/cydir/cydir-save.c src/lib-storage/index/cydir/cydir-storage.h src/lib-storage/index/dbox/dbox-save.c src/lib-storage/index/dbox/dbox-storage.h src/lib-storage/index/maildir/maildir-save.c src/lib-storage/index/maildir/maildir-storage.h src/lib-storage/index/mbox/mbox-save.c src/lib-storage/index/mbox/mbox-storage.h src/lib-storage/mail-storage-private.h src/lib-storage/mail-storage.c src/plugins/acl/acl-mailbox.c src/plugins/quota/quota-storage.c src/plugins/virtual/virtual-storage.c
diffstat 13 files changed, 32 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/cydir/cydir-save.c	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/lib-storage/index/cydir/cydir-save.c	Sun Jul 20 23:47:32 2008 +0300
@@ -61,7 +61,7 @@
 		    enum mail_flags flags, struct mail_keywords *keywords,
 		    time_t received_date, int timezone_offset ATTR_UNUSED,
 		    const char *from_envelope ATTR_UNUSED,
-		    struct istream *input, struct mail *dest_mail,
+		    struct istream *input, struct mail **dest_mail,
 		    struct mail_save_context **ctx_r)
 {
 	struct cydir_transaction_context *t =
@@ -109,18 +109,18 @@
 					   MODIFY_REPLACE, keywords);
 	}
 
-	if (dest_mail == NULL) {
+	if (*dest_mail == NULL) {
 		if (ctx->mail == NULL)
 			ctx->mail = mail_alloc(_t, 0, NULL);
-		dest_mail = ctx->mail;
+		*dest_mail = ctx->mail;
 	}
-	mail_set_seq(dest_mail, ctx->seq);
+	mail_set_seq(*dest_mail, ctx->seq);
 
 	crlf_input = i_stream_create_crlf(input);
-	ctx->input = index_mail_cache_parse_init(dest_mail, crlf_input);
+	ctx->input = index_mail_cache_parse_init(*dest_mail, crlf_input);
 	i_stream_unref(&crlf_input);
 
-	ctx->cur_dest_mail = dest_mail;
+	ctx->cur_dest_mail = *dest_mail;
 	ctx->cur_received_date = received_date;
 
 	*ctx_r = &ctx->ctx;
--- a/src/lib-storage/index/cydir/cydir-storage.h	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/lib-storage/index/cydir/cydir-storage.h	Sun Jul 20 23:47:32 2008 +0300
@@ -37,7 +37,7 @@
 		    enum mail_flags flags, struct mail_keywords *keywords,
 		    time_t received_date, int timezone_offset,
 		    const char *from_envelope, struct istream *input,
-		    struct mail *dest_mail, struct mail_save_context **ctx_r);
+		    struct mail **dest_mail, struct mail_save_context **ctx_r);
 int cydir_save_continue(struct mail_save_context *ctx);
 int cydir_save_finish(struct mail_save_context *ctx);
 void cydir_save_cancel(struct mail_save_context *ctx);
--- a/src/lib-storage/index/dbox/dbox-save.c	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/lib-storage/index/dbox/dbox-save.c	Sun Jul 20 23:47:32 2008 +0300
@@ -65,7 +65,7 @@
 		   enum mail_flags flags, struct mail_keywords *keywords,
 		   time_t received_date, int timezone_offset ATTR_UNUSED,
 		   const char *from_envelope ATTR_UNUSED,
-		   struct istream *input, struct mail *dest_mail,
+		   struct istream *input, struct mail **dest_mail,
 		   struct mail_save_context **ctx_r)
 {
 	struct dbox_transaction_context *t =
@@ -110,17 +110,17 @@
 					   MODIFY_REPLACE, keywords);
 	}
 
-	if (dest_mail == NULL) {
+	if (*dest_mail == NULL) {
 		if (ctx->mail == NULL)
 			ctx->mail = mail_alloc(_t, 0, NULL);
-		dest_mail = ctx->mail;
+		*dest_mail = ctx->mail;
 	}
-	mail_set_seq(dest_mail, ctx->seq);
+	mail_set_seq(*dest_mail, ctx->seq);
 
-	ctx->cur_dest_mail = dest_mail;
+	ctx->cur_dest_mail = *dest_mail;
 
 	crlf_input = i_stream_create_lf(input);
-	ctx->input = index_mail_cache_parse_init(dest_mail, crlf_input);
+	ctx->input = index_mail_cache_parse_init(*dest_mail, crlf_input);
 	i_stream_unref(&crlf_input);
 
 	save_mail = array_append_space(&ctx->mails);
--- a/src/lib-storage/index/dbox/dbox-storage.h	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/lib-storage/index/dbox/dbox-storage.h	Sun Jul 20 23:47:32 2008 +0300
@@ -86,7 +86,7 @@
 		   enum mail_flags flags, struct mail_keywords *keywords,
 		   time_t received_date, int timezone_offset,
 		   const char *from_envelope, struct istream *input,
-		   struct mail *dest_mail, struct mail_save_context **ctx_r);
+		   struct mail **dest_mail, struct mail_save_context **ctx_r);
 int dbox_save_continue(struct mail_save_context *ctx);
 int dbox_save_finish(struct mail_save_context *ctx);
 void dbox_save_cancel(struct mail_save_context *ctx);
--- a/src/lib-storage/index/maildir/maildir-save.c	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/lib-storage/index/maildir/maildir-save.c	Sun Jul 20 23:47:32 2008 +0300
@@ -350,7 +350,7 @@
 		      enum mail_flags flags, struct mail_keywords *keywords,
 		      time_t received_date, int timezone_offset ATTR_UNUSED,
 		      const char *from_envelope ATTR_UNUSED,
-		      struct istream *input, struct mail *dest_mail,
+		      struct istream *input, struct mail **dest_mail,
 		      struct mail_save_context **ctx_r)
 {
 	struct maildir_transaction_context *t =
@@ -382,7 +382,7 @@
 				i_stream_create_crlf(input) :
 				i_stream_create_lf(input);
 
-			maildir_save_add(t, fname, flags, keywords, dest_mail);
+			maildir_save_add(t, fname, flags, keywords, *dest_mail);
 		}
 	} T_END;
 	if (ctx->failed)
--- a/src/lib-storage/index/maildir/maildir-storage.h	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/lib-storage/index/maildir/maildir-storage.h	Sun Jul 20 23:47:32 2008 +0300
@@ -130,7 +130,8 @@
 		      enum mail_flags flags, struct mail_keywords *keywords,
 		      time_t received_date, int timezone_offset,
 		      const char *from_envelope, struct istream *input,
-		      struct mail *dest_mail, struct mail_save_context **ctx_r);
+		      struct mail **dest_mail,
+		      struct mail_save_context **ctx_r);
 int maildir_save_continue(struct mail_save_context *ctx);
 int maildir_save_finish(struct mail_save_context *ctx);
 void maildir_save_cancel(struct mail_save_context *ctx);
--- a/src/lib-storage/index/mbox/mbox-save.c	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/lib-storage/index/mbox/mbox-save.c	Sun Jul 20 23:47:32 2008 +0300
@@ -428,7 +428,7 @@
 		   enum mail_flags flags, struct mail_keywords *keywords,
 		   time_t received_date, int timezone_offset ATTR_UNUSED,
 		   const char *from_envelope, struct istream *input,
-		   struct mail *dest_mail, struct mail_save_context **ctx_r)
+		   struct mail **dest_mail, struct mail_save_context **ctx_r)
 {
 	struct mbox_transaction_context *t =
 		(struct mbox_transaction_context *)_t;
@@ -456,7 +456,7 @@
 	ctx->failed = FALSE;
 	ctx->seq = 0;
 
-	if (mbox_save_init_file(ctx, t, dest_mail != NULL) < 0) {
+	if (mbox_save_init_file(ctx, t, *dest_mail != NULL) < 0) {
 		ctx->failed = TRUE;
 		return -1;
 	}
@@ -488,12 +488,12 @@
 		ctx->next_uid++;
 
 		/* parse and cache the mail headers as we read it */
-		if (dest_mail == NULL) {
+		if (*dest_mail == NULL) {
 			if (ctx->mail == NULL)
 				ctx->mail = mail_alloc(_t, 0, NULL);
-			dest_mail = ctx->mail;
+			*dest_mail = ctx->mail;
 		}
-		mail_set_seq(dest_mail, ctx->seq);
+		mail_set_seq(*dest_mail, ctx->seq);
 	}
 	mbox_save_append_flag_headers(ctx->headers, save_flags);
 	mbox_save_append_keyword_headers(ctx, keywords);
--- a/src/lib-storage/index/mbox/mbox-storage.h	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/lib-storage/index/mbox/mbox-storage.h	Sun Jul 20 23:47:32 2008 +0300
@@ -77,7 +77,7 @@
 		   enum mail_flags flags, struct mail_keywords *keywords,
 		   time_t received_date, int timezone_offset,
 		   const char *from_envelope, struct istream *input,
-		   struct mail *dest_mail, struct mail_save_context **ctx_r);
+		   struct mail **dest_mail, struct mail_save_context **ctx_r);
 int mbox_save_continue(struct mail_save_context *ctx);
 int mbox_save_finish(struct mail_save_context *ctx);
 void mbox_save_cancel(struct mail_save_context *ctx);
--- a/src/lib-storage/mail-storage-private.h	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/lib-storage/mail-storage-private.h	Sun Jul 20 23:47:32 2008 +0300
@@ -163,7 +163,7 @@
 			 struct mail_keywords *keywords,
 			 time_t received_date, int timezone_offset,
 			 const char *from_envelope, struct istream *input,
-			 struct mail *dest_mail,
+			 struct mail **dest_mail,
 			 struct mail_save_context **ctx_r);
 	int (*save_continue)(struct mail_save_context *ctx);
 	int (*save_finish)(struct mail_save_context *ctx);
--- a/src/lib-storage/mail-storage.c	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/lib-storage/mail-storage.c	Sun Jul 20 23:47:32 2008 +0300
@@ -791,7 +791,7 @@
 	}
 	if (t->box->v.save_init(t, flags, keywords,
 				received_date, timezone_offset,
-				from_envelope, input, dest_mail, ctx_r) < 0)
+				from_envelope, input, &dest_mail, ctx_r) < 0)
 		return -1;
 
 	(*ctx_r)->dest_mail = dest_mail;
--- a/src/plugins/acl/acl-mailbox.c	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/plugins/acl/acl-mailbox.c	Sun Jul 20 23:47:32 2008 +0300
@@ -250,7 +250,7 @@
 	      enum mail_flags flags, struct mail_keywords *keywords,
 	      time_t received_date, int timezone_offset,
 	      const char *from_envelope, struct istream *input,
-	      struct mail *dest_mail, struct mail_save_context **ctx_r)
+	      struct mail **dest_mail, struct mail_save_context **ctx_r)
 {
 	struct acl_mailbox *abox = ACL_CONTEXT(t->box);
 
--- a/src/plugins/quota/quota-storage.c	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/plugins/quota/quota-storage.c	Sun Jul 20 23:47:32 2008 +0300
@@ -191,7 +191,7 @@
 		enum mail_flags flags, struct mail_keywords *keywords,
 		time_t received_date, int timezone_offset,
 		const char *from_envelope, struct istream *input,
-		struct mail *dest_mail, struct mail_save_context **ctx_r)
+		struct mail **dest_mail, struct mail_save_context **ctx_r)
 {
 	struct quota_transaction_context *qt = QUOTA_CONTEXT(t);
 	struct quota_mailbox *qbox = QUOTA_CONTEXT(t->box);
@@ -224,13 +224,13 @@
 		}
 	}
 
-	if (dest_mail == NULL) {
+	if (*dest_mail == NULL) {
 		/* we always want to know the mail size */
 		if (qt->tmp_mail == NULL) {
 			qt->tmp_mail = mail_alloc(t, MAIL_FETCH_PHYSICAL_SIZE,
 						  NULL);
 		}
-		dest_mail = qt->tmp_mail;
+		*dest_mail = qt->tmp_mail;
 	}
 
 	return qbox->module_ctx.super.
@@ -241,15 +241,13 @@
 
 static int quota_save_finish(struct mail_save_context *ctx)
 {
-	struct quota_transaction_context *qt = QUOTA_CONTEXT(ctx->transaction);
 	struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->transaction->box);
 
 	if (qbox->module_ctx.super.save_finish(ctx) < 0)
 		return -1;
 
 	qbox->save_hack = TRUE;
-	return quota_check(ctx->transaction, ctx->dest_mail != NULL ?
-			   ctx->dest_mail : qt->tmp_mail);
+	return quota_check(ctx->transaction, ctx->dest_mail);
 }
 
 static void quota_mailbox_sync_finish(struct quota_mailbox *qbox)
--- a/src/plugins/virtual/virtual-storage.c	Sun Jul 20 23:20:19 2008 +0300
+++ b/src/plugins/virtual/virtual-storage.c	Sun Jul 20 23:47:32 2008 +0300
@@ -467,7 +467,7 @@
 		  int timezone_offset ATTR_UNUSED,
 		  const char *from_envelope ATTR_UNUSED,
 		  struct istream *input ATTR_UNUSED,
-		  struct mail *dest_mail ATTR_UNUSED,
+		  struct mail **dest_mail ATTR_UNUSED,
 		  struct mail_save_context **ctx_r)
 {
 	mail_storage_set_error(_t->box->storage, MAIL_ERROR_NOTPOSSIBLE,