dovecot-1.2: mailbox.save_init() API now takes ** pointer to des...

dovecot at dovecot.org dovecot at dovecot.org
Sun Jul 20 23:47:36 EEST 2008


details:   http://hg.dovecot.org/dovecot-1.2/rev/dc280df713f4
changeset: 8038:dc280df713f4
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Jul 20 23:47:32 2008 +0300
description:
mailbox.save_init() API now takes ** pointer to dest_mail, so multiple
plugins can safely specify it. ctx->dest_mail also gets updated then.

diffstat:

13 files changed, 36 insertions(+), 37 deletions(-)
src/lib-storage/index/cydir/cydir-save.c        |   14 +++++++-------
src/lib-storage/index/cydir/cydir-storage.h     |    2 +-
src/lib-storage/index/dbox/dbox-save.c          |   16 ++++++++--------
src/lib-storage/index/dbox/dbox-storage.h       |    2 +-
src/lib-storage/index/maildir/maildir-save.c    |    4 ++--
src/lib-storage/index/maildir/maildir-storage.h |    3 ++-
src/lib-storage/index/mbox/mbox-save.c          |   12 ++++++------
src/lib-storage/index/mbox/mbox-storage.h       |    2 +-
src/lib-storage/mail-storage-private.h          |    2 +-
src/lib-storage/mail-storage.c                  |    2 +-
src/plugins/acl/acl-mailbox.c                   |    2 +-
src/plugins/quota/quota-storage.c               |   10 ++++------
src/plugins/virtual/virtual-storage.c           |    2 +-

diffs (275 lines):

diff -r ab1c170b1559 -r dc280df713f4 src/lib-storage/index/cydir/cydir-save.c
--- 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 @@ int cydir_save_init(struct mailbox_trans
 		    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 @@ int cydir_save_init(struct mailbox_trans
 					   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;
-	}
-	mail_set_seq(dest_mail, ctx->seq);
+		*dest_mail = ctx->mail;
+	}
+	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;
diff -r ab1c170b1559 -r dc280df713f4 src/lib-storage/index/cydir/cydir-storage.h
--- 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 @@ int cydir_save_init(struct mailbox_trans
 		    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);
diff -r ab1c170b1559 -r dc280df713f4 src/lib-storage/index/dbox/dbox-save.c
--- 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 @@ int dbox_save_init(struct mailbox_transa
 		   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 @@ int dbox_save_init(struct mailbox_transa
 					   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;
-	}
-	mail_set_seq(dest_mail, ctx->seq);
-
-	ctx->cur_dest_mail = dest_mail;
+		*dest_mail = ctx->mail;
+	}
+	mail_set_seq(*dest_mail, ctx->seq);
+
+	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);
diff -r ab1c170b1559 -r dc280df713f4 src/lib-storage/index/dbox/dbox-storage.h
--- 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 @@ int dbox_save_init(struct mailbox_transa
 		   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);
diff -r ab1c170b1559 -r dc280df713f4 src/lib-storage/index/maildir/maildir-save.c
--- 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 @@ int maildir_save_init(struct mailbox_tra
 		      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 @@ int maildir_save_init(struct mailbox_tra
 				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)
diff -r ab1c170b1559 -r dc280df713f4 src/lib-storage/index/maildir/maildir-storage.h
--- 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 @@ int maildir_save_init(struct mailbox_tra
 		      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);
diff -r ab1c170b1559 -r dc280df713f4 src/lib-storage/index/mbox/mbox-save.c
--- 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 @@ int mbox_save_init(struct mailbox_transa
 		   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 @@ int mbox_save_init(struct mailbox_transa
 	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 @@ int mbox_save_init(struct mailbox_transa
 		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;
-		}
-		mail_set_seq(dest_mail, ctx->seq);
+			*dest_mail = ctx->mail;
+		}
+		mail_set_seq(*dest_mail, ctx->seq);
 	}
 	mbox_save_append_flag_headers(ctx->headers, save_flags);
 	mbox_save_append_keyword_headers(ctx, keywords);
diff -r ab1c170b1559 -r dc280df713f4 src/lib-storage/index/mbox/mbox-storage.h
--- 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 @@ int mbox_save_init(struct mailbox_transa
 		   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);
diff -r ab1c170b1559 -r dc280df713f4 src/lib-storage/mail-storage-private.h
--- 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 mailbox_vfuncs {
 			 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);
diff -r ab1c170b1559 -r dc280df713f4 src/lib-storage/mail-storage.c
--- 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 @@ int mailbox_save_init(struct mailbox_tra
 	}
 	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;
diff -r ab1c170b1559 -r dc280df713f4 src/plugins/acl/acl-mailbox.c
--- 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 @@ acl_save_init(struct mailbox_transaction
 	      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);
 
diff -r ab1c170b1559 -r dc280df713f4 src/plugins/quota/quota-storage.c
--- 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 @@ quota_save_init(struct mailbox_transacti
 		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 @@ quota_save_init(struct mailbox_transacti
 		}
 	}
 
-	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 @@ quota_save_init(struct mailbox_transacti
 
 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)
diff -r ab1c170b1559 -r dc280df713f4 src/plugins/virtual/virtual-storage.c
--- 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 @@ virtual_save_init(struct mailbox_transac
 		  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,


More information about the dovecot-cvs mailing list