]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
mailbox.save_init() API now takes ** pointer to dest_mail, so multiple
authorTimo Sirainen <tss@iki.fi>
Sun, 20 Jul 2008 20:47:32 +0000 (23:47 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 20 Jul 2008 20:47:32 +0000 (23:47 +0300)
plugins can safely specify it. ctx->dest_mail also gets updated then.

--HG--
branch : HEAD

13 files changed:
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

index 55a072c8d5809b85841db48e305e24216ba97b2e..67873d921f7ce77cb0d23889e1d25778e4072b0f 100644 (file)
@@ -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;
index a90bc05e80d289b0e371518cbec0a9ee38abcccc..dad1039ae3d333964cec7096b30905c2f4d54e72 100644 (file)
@@ -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);
index c6fa9d4c1e09e325c9639a17ef4be6bd3f565b92..69dd41e8905fe86e4d1ba595e474755c61e837c9 100644 (file)
@@ -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);
index b038f6f5f2945656ebd6c443b4f30885e2f9925a..96889b1d913c7746bf68a91e6a10a6132c5eea35 100644 (file)
@@ -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);
index bf5d80287fdcc7fd540f7fe694dc8840932339b1..95a3c1bb611c387cc0993ea4726fa6774a16bcd2 100644 (file)
@@ -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)
index 8f03b4ee73edaadf01c38c3a56a81d2a1b59dd72..c66dd38926cd57f91be231bd69a2aa1e0ad61007 100644 (file)
@@ -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);
index c1817da9c617ed3c5ff98027f8354fe153609c92..7573cf2c1d08bd9286adf3729b7c868d2cb7cf51 100644 (file)
@@ -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);
index afa0c6fff3fb66a6ca20d0ce4f72c41236b86f97..7749a5b2a2005d23182a38a32c33acc3a020348c 100644 (file)
@@ -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);
index c29524ca1e7f078e82cf746827b677a0e87f7adc..3d23e87d7bce3b86de04fc98a4d3d663371e733a 100644 (file)
@@ -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);
index 309d65bb76a31258355e625d293c2d40f1dce85a..f7011308b6a13579081eb024836d74cb08b5c28f 100644 (file)
@@ -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;
index 3c5c831aee6eb80e939c79a52e81759daa91ea25..bde7f42da5d120052867b013d3061296f3e5cd78 100644 (file)
@@ -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);
 
index 9957d122ab4074041339f6e11139714899e5629e..2b561d8811adf5a7713e24a2d8e5feca86676096 100644 (file)
@@ -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)
index 5e1c4318ccb0437f8c9d26cb0604e5134354789f..590e56b8bf66460738d6db8106faf2c002d37471 100644 (file)
@@ -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,