mail-cache.c revision 67bbcd664bebce9a507a49c67273be4814d07c97
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn/* Copyright (c) 2003-2017 Dovecot authors, see the included COPYING file */
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallynvoid mail_cache_set_syscall_error(struct mail_cache *cache,
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn mail_index_file_set_syscall_error(cache->index, cache->filepath,
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallynstatic void mail_cache_unlink(struct mail_cache *cache)
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn if (!cache->index->readonly && !MAIL_INDEX_IS_IN_MEMORY(cache->index))
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn /* mark the cache as unusable */
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallynvoid mail_cache_set_corrupted(struct mail_cache *cache, const char *fmt, ...)
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn "Corrupted index cache file %s: %s",
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallynvoid mail_cache_set_seq_corrupted_reason(struct mail_cache_view *cache_view,
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn struct mail_index_view *view = cache_view->view;
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn "Corrupted record in index cache file %s: %s",
1940bff4d299fcc96966ee5878c3e604666a8c39Henrik Kjölhede /* drop cache pointer */
1940bff4d299fcc96966ee5878c3e604666a8c39Henrik Kjölhede mail_index_transaction_begin(view, MAIL_INDEX_TRANSACTION_FLAG_EXTERNAL);
1940bff4d299fcc96966ee5878c3e604666a8c39Henrik Kjölhede mail_index_update_ext(t, seq, cache->ext_id, &empty, NULL);
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallynvoid mail_cache_file_close(struct mail_cache *cache)
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn if (munmap(cache->mmap_base, cache->mmap_length) < 0)
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn mail_cache_set_syscall_error(cache, "munmap()");
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn mail_cache_set_syscall_error(cache, "close()");
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallynstatic void mail_cache_init_file_cache(struct mail_cache *cache)
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn file_cache_set_fd(cache->file_cache, cache->fd);
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn (void)file_cache_set_size(cache->file_cache, st.st_size);
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn mail_cache_set_syscall_error(cache, "fstat()");
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallynstatic int mail_cache_try_open(struct mail_cache *cache)
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn const void *data;
21002b3950923d0a283d74af51cf5908c1af579bHenrik Kjölhede cache->index->readonly ? O_RDONLY : O_RDWR);
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallynstatic bool mail_cache_need_reopen(struct mail_cache *cache)
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn /* we're waiting for compression */
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn /* disabled */
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn /* see if the file has changed */
df3415e02282317348bbd5f9ce66d03e1c81eeecSerge Hallyn if ((cache->index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0) {
return TRUE;
return TRUE;
return FALSE;
return FALSE;
unsigned int msg_count;
if (msg_count == 0)
if (want_compress) {
return FALSE;
return FALSE;
return FALSE;
return FALSE;
return FALSE;
return TRUE;
if (offset == 0) {
if (!copy_hdr)
const void **data_r)
const void *hdr_data;
void *data;
if (ret < 0) {
const void **data_r)
const void *data;
if (size == 0)
if (ret < 0) {
int ret;
if (ret > 0)
if (ret < 0) {
return ret;
return cache;
return cache;
unsigned int timeout_secs;
int ret;
if (ret < 0) {
if (ret <= 0)
return ret;
TRUE);
const void *data;
sizeof(struct mail_cache_header));
int ret = 0;
return ret;
if (*offset == 0) {
struct mail_cache_view *
return view;
bool update)
&message_count)) {
return first_new_seq;