From: Timo Sirainen Date: Sun, 20 Jul 2008 20:47:32 +0000 (+0300) Subject: mailbox.save_init() API now takes ** pointer to dest_mail, so multiple X-Git-Tag: 1.2.alpha1~123 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cf942dce0253075911a96cff323b5f30eb654ae0;p=thirdparty%2Fdovecot%2Fcore.git mailbox.save_init() API now takes ** pointer to dest_mail, so multiple plugins can safely specify it. ctx->dest_mail also gets updated then. --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/cydir/cydir-save.c b/src/lib-storage/index/cydir/cydir-save.c index 55a072c8d5..67873d921f 100644 --- a/src/lib-storage/index/cydir/cydir-save.c +++ b/src/lib-storage/index/cydir/cydir-save.c @@ -61,7 +61,7 @@ int cydir_save_init(struct mailbox_transaction_context *_t, 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_transaction_context *_t, 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; diff --git a/src/lib-storage/index/cydir/cydir-storage.h b/src/lib-storage/index/cydir/cydir-storage.h index a90bc05e80..dad1039ae3 100644 --- a/src/lib-storage/index/cydir/cydir-storage.h +++ b/src/lib-storage/index/cydir/cydir-storage.h @@ -37,7 +37,7 @@ int cydir_save_init(struct mailbox_transaction_context *_t, 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 --git a/src/lib-storage/index/dbox/dbox-save.c b/src/lib-storage/index/dbox/dbox-save.c index c6fa9d4c1e..69dd41e890 100644 --- a/src/lib-storage/index/dbox/dbox-save.c +++ b/src/lib-storage/index/dbox/dbox-save.c @@ -65,7 +65,7 @@ int dbox_save_init(struct mailbox_transaction_context *_t, 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_transaction_context *_t, 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); diff --git a/src/lib-storage/index/dbox/dbox-storage.h b/src/lib-storage/index/dbox/dbox-storage.h index b038f6f5f2..96889b1d91 100644 --- a/src/lib-storage/index/dbox/dbox-storage.h +++ b/src/lib-storage/index/dbox/dbox-storage.h @@ -86,7 +86,7 @@ int dbox_save_init(struct mailbox_transaction_context *_t, 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 --git a/src/lib-storage/index/maildir/maildir-save.c b/src/lib-storage/index/maildir/maildir-save.c index bf5d80287f..95a3c1bb61 100644 --- a/src/lib-storage/index/maildir/maildir-save.c +++ b/src/lib-storage/index/maildir/maildir-save.c @@ -350,7 +350,7 @@ int maildir_save_init(struct mailbox_transaction_context *_t, 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_transaction_context *_t, 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 --git a/src/lib-storage/index/maildir/maildir-storage.h b/src/lib-storage/index/maildir/maildir-storage.h index 8f03b4ee73..c66dd38926 100644 --- a/src/lib-storage/index/maildir/maildir-storage.h +++ b/src/lib-storage/index/maildir/maildir-storage.h @@ -130,7 +130,8 @@ int maildir_save_init(struct mailbox_transaction_context *_t, 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 --git a/src/lib-storage/index/mbox/mbox-save.c b/src/lib-storage/index/mbox/mbox-save.c index c1817da9c6..7573cf2c1d 100644 --- a/src/lib-storage/index/mbox/mbox-save.c +++ b/src/lib-storage/index/mbox/mbox-save.c @@ -428,7 +428,7 @@ int mbox_save_init(struct mailbox_transaction_context *_t, 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_transaction_context *_t, 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_transaction_context *_t, 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); diff --git a/src/lib-storage/index/mbox/mbox-storage.h b/src/lib-storage/index/mbox/mbox-storage.h index afa0c6fff3..7749a5b2a2 100644 --- a/src/lib-storage/index/mbox/mbox-storage.h +++ b/src/lib-storage/index/mbox/mbox-storage.h @@ -77,7 +77,7 @@ int mbox_save_init(struct mailbox_transaction_context *_t, 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 --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index c29524ca1e..3d23e87d7b 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -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 --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 309d65bb76..f7011308b6 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -791,7 +791,7 @@ int mailbox_save_init(struct mailbox_transaction_context *t, } 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 --git a/src/plugins/acl/acl-mailbox.c b/src/plugins/acl/acl-mailbox.c index 3c5c831aee..bde7f42da5 100644 --- a/src/plugins/acl/acl-mailbox.c +++ b/src/plugins/acl/acl-mailbox.c @@ -250,7 +250,7 @@ acl_save_init(struct mailbox_transaction_context *t, 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 --git a/src/plugins/quota/quota-storage.c b/src/plugins/quota/quota-storage.c index 9957d122ab..2b561d8811 100644 --- a/src/plugins/quota/quota-storage.c +++ b/src/plugins/quota/quota-storage.c @@ -191,7 +191,7 @@ quota_save_init(struct mailbox_transaction_context *t, 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_transaction_context *t, } } - 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_transaction_context *t, 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 --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index 5e1c4318cc..590e56b8bf 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -467,7 +467,7 @@ virtual_save_init(struct mailbox_transaction_context *_t, 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,