]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Added mailbox_save_using_mail()
authorTimo Sirainen <tss@iki.fi>
Fri, 6 Jan 2012 13:22:52 +0000 (15:22 +0200)
committerTimo Sirainen <tss@iki.fi>
Fri, 6 Jan 2012 13:22:52 +0000 (15:22 +0200)
src/lib-storage/mail-storage-private.h
src/lib-storage/mail-storage.c
src/lib-storage/mail-storage.h

index 72152bcc834860303f9931e9fc318649c7eb01a3..c506d84958356b8cdf7d18d2a7e9f4b7198ccb22 100644 (file)
@@ -449,6 +449,8 @@ struct mail_save_context {
 
        /* mail was copied using saving */
        unsigned int copying_via_save:1;
+       /* mail is being saved, not copied */
+       unsigned int saving:1;
 };
 
 struct mailbox_sync_context {
index f2ece13ad0d2af6b7e994282f3229f82fab24eb2..29b4a69b8c7c4b22b4d8b8e02c17a72563bf9207 100644 (file)
@@ -1613,6 +1613,7 @@ int mailbox_save_begin(struct mail_save_context **ctx, struct istream *input)
                return -1;
        }
 
+       (*ctx)->saving = TRUE;
        if (box->v.save_begin == NULL) {
                mail_storage_set_error(box->storage, MAIL_ERROR_NOTPOSSIBLE,
                                       "Saving messages not supported");
@@ -1685,6 +1686,12 @@ int mailbox_copy(struct mail_save_context **_ctx, struct mail *mail)
        return ret;
 }
 
+int mailbox_save_using_mail(struct mail_save_context **ctx, struct mail *mail)
+{
+       (*ctx)->saving = TRUE;
+       return mailbox_copy(ctx, mail);
+}
+
 bool mailbox_is_inconsistent(struct mailbox *box)
 {
        return box->mailbox_deleted || box->v.is_inconsistent(box);
index 9bf156691b299a2a117e86bc06db6d9fb97d8183..c80883d86e9a10f8638822de678744f7be2435d7 100644 (file)
@@ -666,6 +666,10 @@ mailbox_save_get_transaction(struct mail_save_context *ctx);
 /* Copy the given message. You'll need to specify the flags etc. using the
    mailbox_save_*() functions. */
 int mailbox_copy(struct mail_save_context **ctx, struct mail *mail);
+/* Same as mailbox_copy(), but treat the message as if it's being saved,
+   not copied. (For example: New mail delivered to multiple maildirs, with
+   each mails being hard link copies.) */
+int mailbox_save_using_mail(struct mail_save_context **ctx, struct mail *mail);
 
 struct mail *mail_alloc(struct mailbox_transaction_context *t,
                        enum mail_fetch_field wanted_fields,