mail-index.c revision 3e4bbbceed7882b8dab558aa90913a491eb15cc6
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen/* Copyright (C) 2003-2004 Timo Sirainen */
01cbf4ac5d44137ab434791be7f838d98d0fcf3bTimo Sirainenstatic int mail_index_try_open_only(struct mail_index *index);
01cbf4ac5d44137ab434791be7f838d98d0fcf3bTimo Sirainenstruct mail_index *mail_index_alloc(const char *dir, const char *prefix)
63a61b7a739ae0f3f520215137d9c50f94d0f34fTimo Sirainen index->extension_pool = pool_alloconly_create("extension", 256);
63a61b7a739ae0f3f520215137d9c50f94d0f34fTimo Sirainen index->extensions = buffer_create_dynamic(index->extension_pool, 64);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainenvoid mail_index_set_permissions(struct mail_index *index,
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainenuint32_t mail_index_ext_register(struct mail_index *index, const char *name,
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen unsigned int i;
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen extensions = buffer_get_data(index->extensions, &ext_count);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen /* see if it's already there */
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen for (i = 0; i < ext_count; i++) {
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen ext.name = p_strdup(index->extension_pool, name);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen buffer_append(index->extensions, &ext, sizeof(ext));
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainenstatic void mail_index_map_init_extbufs(struct mail_index_map *map,
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen ext_size = initial_count * sizeof(struct mail_index_ext);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen ext_id_map_size = initial_count * sizeof(uint32_t);
b2ecd50bb98c44816cb07c17aa17fae2b425f941Timo Sirainen map->extensions = buffer_create_dynamic(map->extension_pool, ext_size);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen buffer_create_dynamic(map->extension_pool, ext_id_map_size);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainenuint32_t mail_index_map_lookup_ext(struct mail_index_map *map, const char *name)
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen extensions = buffer_get_data(map->extensions, &size);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen for (i = 0; i < size; i++) {
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainenmail_index_map_register_ext(struct mail_index *index,
idx = 0;
return idx;
return FALSE;
return TRUE;
unsigned int i, old_count;
const char *name;
for (i = 0; i < old_count; i++)
t_push();
t_pop();
#ifndef WORDS_BIGENDIAN
(int)sizeof(keywords_mask_t));
sizeof(struct mail_index_record));
unsigned int records_count;
if (ret > 0)
sizeof(hdr)),
NULL);
pos),
if (ret > 0) {
if (ret < 0) {
if (ret == 0) {
for (i = 0; i < MAIL_INDEX_ESTALE_RETRY_COUNT; i++) {
return ret;
if (ret <= 0) {
if (ret == 0) {
int ret;
if (ret != 0)
return ret;
if (ret <= 0) {
return ret;
if (ret < 0) {
if (ret == 0)
struct mail_index_map *
unsigned int i, count;
return map;
NULL);
for (i = 0; i < count; i++) {
return mem_map;
unsigned int lock_id;
int ret;
*lock_id_r = 0;
if (ret <= 0)
return ret;
if (ret == 0) {
*lock_id_r = 0;
return ret;
const char *path;
int fd;
return fd;
const char *path;
int ret;
if (ret != 0) {
/* create it fully in index.tmp first */
if (ret == 0) {
if (ret < 0) {
return ret;
#ifndef WORDS_BIGENDIAN
unsigned int lock_id = 0;
int ret;
if (ret > 0)
else if (ret == 0) {
} else if (ret < 0)
if (lock_id != 0) {
lock_id = 0;
if (lock_id == 0) {
int i = 0, ret;
if (ret <= 0)
if (ret == 0) {
if (ret <= 0)
return ret;
ret = 0;
if (ret > 0)
else if (ret == 0) {
if (ret == 0) {
if (lock_id != 0)
if (ret == 0) {
return ret;
const char *function)
const char *filepath,
const char *function)
return MAIL_INDEX_ERROR_DISKSPACE;
return MAIL_INDEX_ERROR_INTERNAL;
return MAIL_INDEX_ERROR_NONE;