mail-cache.c revision cec8e298523c65f9ed832a2d1fc65068708d9f7d
2ronwalf#include "byteorder.h"
2ronwalf#include "file-lock.h"
2ronwalf#include "file-set-size.h"
2ronwalf#include "mmap-util.h"
2ronwalf#include "write-full.h"
2ronwalf#include "mail-index.h"
2ronwalf#include "mail-index-util.h"
2ronwalf#include "mail-cache.h"
((struct mail_cache_record *) \
struct mail_cache_header {
struct mail_cache_record {
struct mail_cache {
char *filepath;
int fd;
void *mmap_base;
unsigned int locks;
struct mail_cache_transaction_ctx {
unsigned int next_unused_header_lowwater;
unsigned int last_idx;
sizeof(enum mail_index_record_flag),
sizeof(uoff_t),
sizeof(struct mail_sent_date),
sizeof(time_t),
sizeof(uoff_t),
sizeof(uoff_t),
sizeof(uoff_t),
sizeof(uoff_t),
static const unsigned char *null4[] = { 0, 0, 0, 0 };
static struct mail_cache_record *
const char *function)
return FALSE;
return FALSE;
return FALSE;
return TRUE;
int fd;
return TRUE;
return FALSE;
return TRUE;
return TRUE;
return FALSE;
return FALSE;
return TRUE;
return FALSE;
size = 0;
return TRUE;
return TRUE;
MS_SYNC) < 0) {
return FALSE;
return TRUE;
if (ret != 0)
return ret > 0;
return FALSE;
return FALSE;
if (ret != 0) {
return ret > 0;
return FALSE;
return FALSE;
return FALSE;
return FALSE;
return TRUE;
return FALSE;
return FALSE;
return TRUE;
static const struct mail_cache_record *
const void *data;
return data;
unsigned char *mmap_base;
const char *str;
remove_fields = 0;
used_fields = 0;
remove_fields == 0) {
t_push();
&size);
t_pop();
return TRUE;
return FALSE;
return FALSE;
return FALSE;
return FALSE;
return ret;
return TRUE;
if (ret != 0)
return ret > 0;
return FALSE;
return FALSE;
return FALSE;
return FALSE;
return FALSE;
return TRUE;
return TRUE;
int ret;
return TRUE;
return TRUE;
if (nonblock) {
if (ret < 0)
if (ret <= 0)
if (ret > 0) {
return ret;
return TRUE;
return TRUE;
return FALSE;
return TRUE;
int ret;
if (ret <= 0)
return ret;
return ret;
unsigned char lower_data;
return FALSE;
data++;
return TRUE;
data++;
return TRUE;
return FALSE;
return FALSE;
return FALSE;
return TRUE;
return FALSE;
return ret;
return TRUE;
void *base;
return FALSE;
return TRUE;
return FALSE;
return TRUE;
return offset;
unsigned char *buf;
return NULL;
return NULL;
idx);
return NULL;
if (data_size == 0) {
return NULL;
return NULL;
idx);
return NULL;
return NULL;
char *str;
return NULL;
unsigned int idx)
const char *str;
t_push();
for (i = 0; i < MAIL_CACHE_HEADERS_COUNT; i++) {
t_pop();
t_push();
headers++;
if (offset != 0) {
t_pop();
return offset > 0;
static struct mail_cache_record *
return NULL;
return NULL;
return NULL;
return NULL;
return NULL;
return NULL;
return cache_rec;
static struct mail_cache_record *
return NULL;
return next;
const void *buf;
if (write_offset == 0)
return FALSE;
return TRUE;
static struct mail_cache_record *
unsigned int idx;
return NULL;
return NULL;
return NULL;
return cache_rec;
const unsigned char *buf;
unsigned int mask;
return offset;
sizeof(data_size));
i_unreached();
return offset;
unsigned char *buf;
unsigned int idx;
int field_num;
return FALSE;
return TRUE;
return TRUE;
return TRUE;
enum mail_cache_field
return fields;
unsigned char *buf;
unsigned int mask;
if (data_size == 0) {
return FALSE;
return TRUE;
return FALSE;
i_unreached();
return FALSE;
return FALSE;
void *data;
return FALSE;
return TRUE;
const void *data;
return NULL;
return NULL;
return data;
const void *data;
return FALSE;
return TRUE;
return flags;
void *data;
return FALSE;
return TRUE;
return NULL;
return FALSE;
t_push();
t_pop();
return FALSE;