Mercurial > dovecot > original-hg > dovecot-1.2
view src/lib-index/mail-index-update-cache.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 | fb2bb2d2b4a5 |
children | ea958a5b9de1 |
line wrap: on
line source
/* Copyright (C) 2002 Timo Sirainen */ #include "lib.h" #include "iobuffer.h" #include "mail-index.h" #include <unistd.h> static int cache_record(MailIndex *index, MailIndexRecord *rec, MailField cache_fields) { MailIndexUpdate *update; IOBuffer *inbuf; int failed; inbuf = index->open_mail(index, rec); if (inbuf == NULL) return FALSE; cache_fields &= ~rec->cached_fields; update = index->update_begin(index, rec); mail_index_update_headers(update, inbuf, cache_fields, NULL, NULL); failed = !index->update_end(update); io_buffer_destroy(inbuf); return !failed; } int mail_index_update_cache(MailIndex *index) { MailIndexRecord *rec; MailField cache_fields; if (!index->set_lock(index, MAIL_LOCK_EXCLUSIVE)) return FALSE; /* make sure the index is ok before doing this */ if (!index->fsck(index)) return FALSE; cache_fields = index->header->cache_fields; rec = index->lookup(index, 1); while (rec != NULL) { if ((rec->cached_fields & cache_fields) != cache_fields) { if (!cache_record(index, rec, cache_fields)) return FALSE; } rec = index->next(index, rec); } index->header->flags &= ~MAIL_INDEX_FLAG_CACHE_FIELDS; return TRUE; }