Mercurial > dovecot > original-hg > dovecot-1.2
view src/lib-index/mbox/mbox-rebuild.c @ 953:411006be3c66 HEAD
Naming change for function typedefs.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 11 Jan 2003 21:55:56 +0200 |
parents | fd8888f6f037 |
children | 2ea9661542ee |
line wrap: on
line source
/* Copyright (C) 2002 Timo Sirainen */ #include "lib.h" #include "istream.h" #include "mbox-index.h" #include "mbox-lock.h" #include "mail-index-data.h" #include "mail-index-util.h" #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/mman.h> int mbox_index_rebuild(struct mail_index *index) { struct istream *input; struct stat st; int failed; i_assert(index->lock_type != MAIL_LOCK_SHARED); if (!mail_index_set_lock(index, MAIL_LOCK_EXCLUSIVE)) return FALSE; /* reset the header */ mail_index_init_header(index, index->header); index->mmap_used_length = index->header->used_file_size; /* require these fields */ index->header->cache_fields |= DATA_FIELD_LOCATION | DATA_FIELD_MESSAGEPART | DATA_FIELD_MD5; /* update indexid, which also means that our state has completely changed */ index->indexid = index->header->indexid; index->inconsistent = TRUE; if (msync(index->mmap_base, sizeof(struct mail_index_header), MS_SYNC) < 0) return index_set_syscall_error(index, "msync()"); /* reset data file */ if (!mail_index_data_reset(index->data)) return FALSE; input = mbox_get_stream(index, 0, MAIL_LOCK_SHARED); if (input == NULL) return FALSE; mbox_skip_empty_lines(input); failed = !mbox_index_append(index, input); i_stream_unref(input); if (failed) return FALSE; /* update sync stamp */ if (stat(index->mailbox_path, &st) < 0) return mbox_set_syscall_error(index, "fstat()"); index->file_sync_stamp = st.st_mtime; /* rebuild is complete - remove the flag */ index->header->flags &= ~(MAIL_INDEX_FLAG_REBUILD|MAIL_INDEX_FLAG_FSCK); return TRUE; }