view src/lib-storage/mail-copy.c @ 3641:3de464cb604f HEAD

Added flags and keywords parameters to mailbox_copy() in case they're wanted to be changed while copying.
author Timo Sirainen <tss@iki.fi>
date Fri, 07 Oct 2005 12:34:04 +0300
parents 923ff19873d4
children 928229f8b3e6
line wrap: on
line source

/* Copyright (C) 2004 Timo Sirainen */

#include "lib.h"
#include "istream.h"
#include "mail-storage.h"
#include "mail-copy.h"

int mail_storage_copy(struct mailbox_transaction_context *t, struct mail *mail,
		      enum mail_flags flags, struct mail_keywords *keywords,
		      struct mail *dest_mail)
{
	struct mail_save_context *ctx;
	struct istream *input;
	const char *from_envelope;

	input = mail_get_stream(mail, NULL, NULL);
	if (input == NULL)
		return -1;

	from_envelope = mail_get_special(mail, MAIL_FETCH_FROM_ENVELOPE);

	ctx = mailbox_save_init(t, flags, keywords,
				mail_get_received_date(mail),
				0, from_envelope, input, dest_mail != NULL);

	while (i_stream_read(input) != -1) {
		if (mailbox_save_continue(ctx) < 0)
			break;
	}

	if (input->stream_errno != 0) {
		mailbox_save_cancel(ctx);
		return -1;
	}

	return mailbox_save_finish(ctx, dest_mail);
}