Mercurial > dovecot > original-hg > dovecot-1.2
view src/lib-storage/index/index-copy.c @ 363:567e932cdc66 HEAD
Added autoclose_fd-flag for io_buffer_create_file() and
io_buffer_create_mmap().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 06 Oct 2002 06:09:36 +0300 |
parents | 276b7a53c264 |
children | ea958a5b9de1 |
line wrap: on
line source
/* Copyright (C) 2002 Timo Sirainen */ #include "lib.h" #include "iobuffer.h" #include "mail-custom-flags.h" #include "index-storage.h" #include "index-messageset.h" #include <unistd.h> typedef struct { Mailbox *dest; const char **custom_flags; } CopyContext; static int copy_func(MailIndex *index, MailIndexRecord *rec, unsigned int client_seq __attr_unused__, unsigned int idx_seq __attr_unused__, void *context) { CopyContext *ctx = context; IOBuffer *inbuf; int failed; inbuf = index->open_mail(index, rec); if (inbuf == NULL) return FALSE; /* save it in destination mailbox */ failed = !ctx->dest->save(ctx->dest, rec->msg_flags, ctx->custom_flags, rec->internal_date, inbuf, inbuf->size); io_buffer_destroy(inbuf); return !failed; } int index_storage_copy(Mailbox *box, Mailbox *destbox, const char *messageset, int uidset) { IndexMailbox *ibox = (IndexMailbox *) box; CopyContext ctx; int failed; if (destbox->readonly) { mail_storage_set_error(box->storage, "Destination mailbox is read-only"); return FALSE; } if (!ibox->index->sync(ibox->index)) return mail_storage_set_index_error(ibox); if (!ibox->index->set_lock(ibox->index, MAIL_LOCK_SHARED)) return mail_storage_set_index_error(ibox); ctx.custom_flags = mail_custom_flags_list_get(ibox->index->custom_flags); ctx.dest = destbox; failed = index_messageset_foreach(ibox, messageset, uidset, copy_func, &ctx) <= 0; mail_custom_flags_list_unref(ibox->index->custom_flags); if (!ibox->index->set_lock(ibox->index, MAIL_LOCK_UNLOCK)) return mail_storage_set_index_error(ibox); return !failed; }