mail-index.c revision 7cb128dc4cae2a03a742f63ba7afee23c78e3af0
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainen/* Copyright (c) 2003-2015 Dovecot authors, see the included COPYING file */
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainenstruct mail_index_module_register mail_index_module_register = { 0 };
419cf63077e755935ce105747d6ebc67b7d38a7fTimo Sirainenstatic void mail_index_close_nonopened(struct mail_index *index);
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainenstruct mail_index *mail_index_alloc(const char *dir, const char *prefix)
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainen pool_alloconly_create(MEMPOOL_GROWING"index extension", 1024);
419cf63077e755935ce105747d6ebc67b7d38a7fTimo Sirainen p_array_init(&index->extensions, index->extension_pool, 5);
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainen mail_index_ext_register(index, MAIL_INDEX_EXT_KEYWORDS,
92d1458b00f4f236c4cec96a696253d3bbf8b05aTimo Sirainen index->keywords_pool = pool_alloconly_create("keywords", 512);
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainen hash_table_create(&index->keywords_hash, index->keywords_pool, 0,
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainen index->log = mail_transaction_log_alloc(index);
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainenvoid mail_index_free(struct mail_index **_index)
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainenvoid mail_index_set_fsync_mode(struct mail_index *index,
92d1458b00f4f236c4cec96a696253d3bbf8b05aTimo Sirainenvoid mail_index_set_permissions(struct mail_index *index,
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainen mode_t mode, gid_t gid, const char *gid_origin)
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainenvoid mail_index_set_lock_method(struct mail_index *index,
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainen index->max_lock_timeout_secs = max_timeout_secs;
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainenvoid mail_index_set_ext_init_data(struct mail_index *index, uint32_t ext_id,
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainenuint32_t mail_index_ext_register(struct mail_index *index, const char *name,
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainen if (*name == '\0' || strcmp(name, str_sanitize(name, -1)) != 0)
28c75d59f1d1a7caeb85635964f3881c0038eb23Timo Sirainen i_panic("mail_index_ext_register(%s): Invalid name", name);
2be7df5df08ac4639ad83559ec5fcf552c84fb4aTimo Sirainen if (default_record_size != 0 && default_record_align == 0) {
return ext_id;
unsigned int i, count;
for (i = 0; i < count; i++) {
*ext_id_r = i;
return TRUE;
return FALSE;
void *context)
unsigned int i, count;
for (i = 0; i < count; i++) {
char *key;
void *value;
return TRUE;
return FALSE;
const char *keyword,
unsigned int *idx_r)
char *keyword_dup;
struct mail_keywords *
const char *const keywords[])
struct mail_keywords *k;
if (count == 0) {
for (i = 0; i < src; i++) {
if (i == src)
dest++;
struct mail_keywords *
struct mail_keywords *k;
const unsigned int *indexes;
if (count == 0) {
for (i = 0; i < src; i++) {
if (i == src)
int ret;
if (ret == 0) {
return ret;
const char *path;
int fd;
return fd;
int ret;
if (ret == 0) {
if (ret >= 0) {
if (ret == 0) {
if (ret == 0) {
if (ret < 0) {
int ret;
return ret;
int ret;
return ret;
return ret;
int ret;
const char *path;
int last_errno = 0;
if (last_errno == 0)
int ret;
if (*mtime_r == 0) {
const char *function)
const char *filepath,
const char *function)
const char *errstr;