mail-index.c revision d3526b1c218a60e3c9ae864e20d1b935ccc9b4a1
5ce2084ada06ade9f44fc2914c34658e9a842dc1Timo Sirainen/* Copyright (C) 2003-2004 Timo Sirainen */
3ddbbe03fe74b3ee7b1dff4e08ec706d7880d052Timo Sirainenstruct mail_index_module_register mail_index_module_register = { 0 };
3ddbbe03fe74b3ee7b1dff4e08ec706d7880d052Timo Sirainenstruct mail_index *mail_index_alloc(const char *dir, const char *prefix)
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen pool_alloconly_create(MEMPOOL_GROWING"index extension", 1024);
b1f57b7183fe44d7d7ba30b944d3de1f015b9253Timo Sirainen p_array_init(&index->extensions, index->extension_pool, 5);
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen mail_index_ext_register(index, "keywords", 128, 2, 1);
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen index->keywords_pool = pool_alloconly_create("keywords", 512);
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen hash_create(default_pool, index->keywords_pool, 0,
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen strcase_hash, (hash_cmp_callback_t *)strcasecmp);
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen index->log = mail_transaction_log_alloc(index);
5ce2084ada06ade9f44fc2914c34658e9a842dc1Timo Sirainenvoid mail_index_free(struct mail_index **_index)
3ddbbe03fe74b3ee7b1dff4e08ec706d7880d052Timo Sirainenvoid mail_index_set_permissions(struct mail_index *index,
3ddbbe03fe74b3ee7b1dff4e08ec706d7880d052Timo Sirainenuint32_t mail_index_ext_register(struct mail_index *index, const char *name,
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen const struct mail_index_registered_ext *extensions;
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen unsigned int i, ext_count;
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen extensions = array_get(&index->extensions, &ext_count);
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen /* see if it's already there */
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen for (i = 0; i < ext_count; i++) {
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen rext.name = p_strdup(index->extension_pool, name);
return ext_count;
void *context)
unsigned int i, count;
for (i = 0; i < count; i++) {
unsigned int *idx_r)
char *keyword_dup;
void *value;
return TRUE;
if (!autocreate) {
return FALSE;
return TRUE;
const char *name;
#ifdef DEBUG
const unsigned int *old_idx;
unsigned int idx;
unsigned int idx;
int ret;
if (ret == 0) {
return ret;
const char *path;
int fd;
return fd;
int ret;
if (ret == 0) {
return FALSE;
if (ret >= 0) {
if (ret == 0) {
if (ret == 0)
if (ret < 0) {
return FALSE;
return FALSE;
return TRUE;
MAIL_INDEX_HDR_FLAG_CORRUPTED) != 0) {
ret = 0;
if (ret == 0) {
if (ret <= 0)
return ret;
int ret;
const char *function)
const char *filepath,
const char *function)
#ifdef WORDS_BIGENDIAN