From: Timo Sirainen Date: Fri, 6 Jan 2012 13:22:52 +0000 (+0200) Subject: lib-storage: Added mailbox_save_using_mail() X-Git-Tag: 2.1.rc2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=00aaafa8619b4e6aaf23f15d30c36f06ccb820bc;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Added mailbox_save_using_mail() --- diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index 72152bcc83..c506d84958 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -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 { diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index f2ece13ad0..29b4a69b8c 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -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); diff --git a/src/lib-storage/mail-storage.h b/src/lib-storage/mail-storage.h index 9bf156691b..c80883d86e 100644 --- a/src/lib-storage/mail-storage.h +++ b/src/lib-storage/mail-storage.h @@ -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,