maildir-update.c revision 0c0ed9c17252e16569e2c3d872e7296ba37067c2
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (C) 2002 Timo Sirainen */
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen#include "lib.h"
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen#include "ibuffer.h"
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen#include "maildir-index.h"
d6601a0bc4fd60e58bedbddf2481abd82cba76d7Timo Sirainen
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainenint maildir_record_update(MailIndex *index, MailIndexUpdate *update, int fd)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen IBuffer *inbuf;
abf015c9682f0f723db87a7c97bc284ef814818fTimo Sirainen MailDataField cache_fields;
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainen /* don't even bother opening the file if we're not going to do
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainen anything */
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainen cache_fields = index->header->cache_fields & ~DATA_FIELD_LOCATION;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen if (cache_fields == 0)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen return TRUE;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen t_push();
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen if (index->mail_read_mmaped) {
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen inbuf = i_buffer_create_mmap(fd, data_stack_pool,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen MAIL_MMAP_BLOCK_SIZE, 0, 0, FALSE);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen } else {
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen inbuf = i_buffer_create_file(fd, data_stack_pool,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen MAIL_READ_BLOCK_SIZE, FALSE);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen }
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen mail_index_update_headers(update, inbuf, cache_fields, NULL, NULL);
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen i_buffer_unref(inbuf);
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen t_pop();
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen return TRUE;
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen}
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen