mail-cache.c revision 5626ae5e3316eced244adb6485c0927f1c7fdc41
/* Copyright (C) 2003-2004 Timo Sirainen */
#include "lib.h"
#include "buffer.h"
#include "hash.h"
#include "file-cache.h"
#include "mmap-util.h"
#include "write-full.h"
#include "mail-cache-private.h"
#include <unistd.h>
const char *function)
{
return;
}
"%s failed with index cache file %s: %m",
}
{
t_push();
t_pop();
}
{
}
cache->mmap_length = 0;
}
}
{
struct mail_index_view *view;
const struct mail_index_ext *ext;
/* unusable, we're just waiting for compression */
return 0;
}
else
return -1;
}
if (mail_cache_map(cache, 0, 0) < 0)
return -1;
if (mail_cache_header_fields_read(cache) < 0)
return -1;
/* still different - maybe a race condition or maybe the
file_seq really is corrupted. either way, this shouldn't
happen often so we'll just mark cache to be compressed
later which fixes this. */
return 0;
}
return 1;
}
{
/* check that the header is still ok */
return FALSE;
}
/* version changed - upgrade silently */
return FALSE;
}
/* index id changed */
return FALSE;
}
/* only check the header if we're locked */
return TRUE;
return FALSE;
}
return FALSE;
}
return FALSE;
}
return TRUE;
}
{
if (size == 0)
size = sizeof(struct mail_cache_header);
if (ret < 0) {
// FIXME: ESTALE
return -1;
}
&cache->mmap_length);
return -1;
}
return 0;
}
/* already mapped */
return 0;
}
} else {
/* unusable, waiting for compression */
return -1;
}
}
/* map the whole file */
cache->mmap_length = 0;
return -1;
}
if (!mail_cache_verify_header(cache)) {
return -1;
}
return 0;
}
{
return 0;
}
return -1;
}
return -1;
return mail_cache_header_fields_read(cache);
}
{
struct mail_cache *cache;
if (mail_cache_open_and_verify(cache) < 0) {
/* failed for some reason - doesn't really matter,
it's disabled for now. */
}
return cache;
}
{
}
}
{
struct mail_index_view *view;
const struct mail_index_ext *ext;
int i, ret;
if (MAIL_CACHE_IS_UNUSABLE(cache))
return 0;
return -1;
/* cache not used */
return 0;
}
/* we want the latest cache file */
return ret;
}
}
for (i = 0; i < 3; i++) {
if (ret <= 0) {
"mail_index_wait_lock_fd()");
break;
}
/* got it */
break;
}
/* okay, so it was just compressed. try again. */
break;
ret = 0;
}
if (ret > 0) {
/* make sure our header is up to date */
sizeof(struct mail_cache_header));
}
if (mail_cache_map(cache, 0, 0) < 0)
ret = -1;
}
return ret;
}
{
unsigned int cont_percentage;
if (cont_percentage >= COMPRESS_CONTINUED_PERCENTAGE &&
/* too many continued rows, compress */
}
/* see if we've reached the max. deleted space in file */
}
{
(void)mail_cache_header_fields_update(cache);
if (cache->hdr_modified) {
}
"mail_index_wait_lock_fd(F_UNLCK)");
}
}
struct mail_cache_view *
{
struct mail_cache_view *view;
return view;
}
{
}