maildir-copy.c revision 1c890e28803578f778c85450172a388879bd4823
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (C) 2002-2004 Timo Sirainen */
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainenstatic int do_hardlink(struct maildir_mailbox *mbox, const char *path,
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen mail_storage_set_error(STORAGE(mbox->storage),
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen "Not enough disk space");
942302b0247403645394d848b3c620ead262a2a5Timo Sirainen mail_storage_set_critical(STORAGE(mbox->storage),
942302b0247403645394d848b3c620ead262a2a5Timo Sirainen "link(%s, %s) failed: %m",
942302b0247403645394d848b3c620ead262a2a5Timo Sirainenstatic int maildir_copy_hardlink(struct mail *mail,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen struct index_mail *imail = (struct index_mail *)mail;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen struct maildir_mailbox *mbox = (struct maildir_mailbox *)imail->ibox;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const char *const *keywords;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen array_t ARRAY_DEFINE(keywords_arr, const char *);
c93ff0433cc3d348116f75a64f9988fedb86fd18Timo Sirainen unsigned int count;
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen dest_fname = maildir_generate_tmp_filename(&ioloop_timeval);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen ARRAY_CREATE(&keywords_arr, pool_datastack_create(),
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen const char *, count);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen dest_fname = maildir_filename_set_flags(NULL, // FIXME: !!!
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen t_strconcat(ctx->mbox->path, "/new/", dest_fname, NULL);
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen if (maildir_file_do(mbox, imail->mail.mail.uid,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenmaildir_copy_init(struct maildir_mailbox *mbox)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen pool = pool_alloconly_create("maildir_copy_context", 2048);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen ctx = p_new(pool, struct maildir_copy_context, 1);
c93ff0433cc3d348116f75a64f9988fedb86fd18Timo Sirainen ctx->hardlink = FALSE; //FIXME:broken! getenv("MAILDIR_COPY_WITH_HARDLINKS") != NULL;
c93ff0433cc3d348116f75a64f9988fedb86fd18Timo Sirainenint maildir_transaction_copy_commit(struct maildir_copy_context *ctx)
c93ff0433cc3d348116f75a64f9988fedb86fd18Timo Sirainenvoid maildir_transaction_copy_rollback(struct maildir_copy_context *ctx)
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen for (rb = ctx->rollbacks; rb != NULL; rb = rb->next) {
755aea84bbe2b15ed7fe991f6462a93333ff571fTimo Sirainenint maildir_copy(struct mailbox_transaction_context *_t, struct mail *mail,
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen struct maildir_mailbox *mbox = (struct maildir_mailbox *)t->ictx.ibox;
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen mail->box->storage == STORAGE(ctx->mbox->storage)) {
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen // FIXME: handle dest_mail
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen /* non-fatal hardlinking failure, try the slow way */