dovecot: Only index extension indexes are now called "ext_id". F...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Sep 2 04:52:01 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/ef1c7b2acc10
changeset: 6348:ef1c7b2acc10
user: Timo Sirainen <tss at iki.fi>
date: Sun Sep 02 04:28:21 2007 +0300
description:
Only index extension indexes are now called "ext_id". For map extension
indexes use "map_ext_idx".
diffstat:
7 files changed, 86 insertions(+), 81 deletions(-)
src/lib-index/mail-index-map.c | 27 ++++++----
src/lib-index/mail-index-private.h | 4 -
src/lib-index/mail-index-sync-ext.c | 75 +++++++++++++++---------------
src/lib-index/mail-index-sync-keywords.c | 44 ++++++++---------
src/lib-index/mail-index-sync-private.h | 2
src/lib-index/mail-index-sync-update.c | 7 +-
src/lib-index/mail-index.c | 8 +--
diffs (truncated from 490 to 300 lines):
diff -r aeaaaaeb64a6 -r ef1c7b2acc10 src/lib-index/mail-index-map.c
--- a/src/lib-index/mail-index-map.c Sun Sep 02 03:35:03 2007 +0300
+++ b/src/lib-index/mail-index-map.c Sun Sep 02 04:28:21 2007 +0300
@@ -42,20 +42,23 @@ static void mail_index_map_init_extbufs(
p_array_init(&map->ext_id_map, map->extension_pool, initial_count);
}
-uint32_t mail_index_map_lookup_ext(struct mail_index_map *map, const char *name)
+bool mail_index_map_lookup_ext(struct mail_index_map *map, const char *name,
+ uint32_t *idx_r)
{
const struct mail_index_ext *extensions;
unsigned int i, size;
- if (!array_is_created(&map->extensions))
- return (uint32_t)-1;
-
- extensions = array_get(&map->extensions, &size);
- for (i = 0; i < size; i++) {
- if (strcmp(extensions[i].name, name) == 0)
- return i;
- }
- return (uint32_t)-1;
+ if (array_is_created(&map->extensions)) {
+ extensions = array_get(&map->extensions, &size);
+ for (i = 0; i < size; i++) {
+ if (strcmp(extensions[i].name, name) == 0) {
+ if (idx_r != NULL)
+ *idx_r = i;
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
}
static size_t get_ext_size(size_t name_len)
@@ -79,7 +82,7 @@ mail_index_map_register_ext(struct mail_
} else {
idx = array_count(&map->extensions);
}
- i_assert(mail_index_map_lookup_ext(map, name) == (uint32_t)-1);
+ i_assert(!mail_index_map_lookup_ext(map, name, NULL));
ext = array_append_space(&map->extensions);
ext->name = p_strdup(map->extension_pool, name);
@@ -154,7 +157,7 @@ static int mail_index_parse_extensions(s
name = t_strndup(CONST_PTR_OFFSET(map->hdr_base, name_offset),
ext_hdr->name_size);
- if (mail_index_map_lookup_ext(map, name) != (uint32_t)-1) {
+ if (mail_index_map_lookup_ext(map, name, NULL)) {
mail_index_set_error(index, "Corrupted index file %s: "
"Duplicate header extension %s",
index->filepath, name);
diff -r aeaaaaeb64a6 -r ef1c7b2acc10 src/lib-index/mail-index-private.h
--- a/src/lib-index/mail-index-private.h Sun Sep 02 03:35:03 2007 +0300
+++ b/src/lib-index/mail-index-private.h Sun Sep 02 04:28:21 2007 +0300
@@ -277,8 +277,8 @@ void mail_index_record_map_move_to_priva
/* Move a mmaped map to memory. */
void mail_index_map_move_to_memory(struct mail_index_map *map);
-uint32_t mail_index_map_lookup_ext(struct mail_index_map *map,
- const char *name);
+bool mail_index_map_lookup_ext(struct mail_index_map *map, const char *name,
+ uint32_t *idx_r);
uint32_t
mail_index_map_register_ext(struct mail_index_map *map, const char *name,
uint32_t ext_offset, uint32_t hdr_size,
diff -r aeaaaaeb64a6 -r ef1c7b2acc10 src/lib-index/mail-index-sync-ext.c
--- a/src/lib-index/mail-index-sync-ext.c Sun Sep 02 03:35:03 2007 +0300
+++ b/src/lib-index/mail-index-sync-ext.c Sun Sep 02 04:28:21 2007 +0300
@@ -140,7 +140,7 @@ static int mail_index_ext_align_cmp(cons
return (int)(*e2)->record_align - (int)(*e1)->record_align;
}
-static void sync_ext_reorder(struct mail_index_map *map, uint32_t ext_id,
+static void sync_ext_reorder(struct mail_index_map *map, uint32_t ext_map_idx,
uint16_t old_ext_size)
{
struct mail_index_ext *ext, **sorted;
@@ -156,6 +156,7 @@ static void sync_ext_reorder(struct mail
t_push();
ext = array_get_modifiable(&map->extensions, &count);
+ i_assert(ext_map_idx < count);
/* @UNSAFE */
old_offsets = t_new(uint16_t, count);
@@ -170,10 +171,10 @@ static void sync_ext_reorder(struct mail
qsort(sorted, count, sizeof(struct mail_index_ext *),
mail_index_ext_align_cmp);
- if (copy_sizes[ext_id] > old_ext_size) {
+ if (copy_sizes[ext_map_idx] > old_ext_size) {
/* we are growing the extension record. remember this
so we don't write extra data while copying the record */
- copy_sizes[ext_id] = old_ext_size;
+ copy_sizes[ext_map_idx] = old_ext_size;
}
/* we simply try to use the extensions with largest alignment
@@ -260,8 +261,8 @@ static void sync_ext_reorder(struct mail
}
static void
-sync_ext_resize(const struct mail_transaction_ext_intro *u, uint32_t ext_id,
- struct mail_index_sync_map_ctx *ctx)
+sync_ext_resize(const struct mail_transaction_ext_intro *u,
+ uint32_t ext_map_idx, struct mail_index_sync_map_ctx *ctx)
{
struct mail_index_map *map = ctx->view->map;
struct mail_index_ext *ext;
@@ -269,7 +270,7 @@ sync_ext_resize(const struct mail_transa
uint32_t old_size, new_size, old_record_size;
bool modified = FALSE;
- ext = array_idx_modifiable(&map->extensions, ext_id);
+ ext = array_idx_modifiable(&map->extensions, ext_map_idx);
old_size = MAIL_INDEX_HEADER_SIZE_ALIGN(ext->hdr_size);
new_size = MAIL_INDEX_HEADER_SIZE_ALIGN(u->hdr_size);
@@ -312,11 +313,11 @@ sync_ext_resize(const struct mail_transa
if (new_size != old_size) {
/* move all hdr_offset of all extensions after this one */
- unsigned i, count = array_count(&map->extensions);
+ unsigned int i, count = array_count(&map->extensions);
ssize_t diff = (ssize_t)new_size - (ssize_t)old_size;
ext = array_idx_modifiable(&map->extensions, 0);
- for (i = ext_id + 1; i < count; i++) {
+ for (i = ext_map_idx + 1; i < count; i++) {
ext[i].ext_offset += diff;
ext[i].hdr_offset += diff;
}
@@ -324,7 +325,7 @@ sync_ext_resize(const struct mail_transa
if (old_record_size != u->record_size) {
map = mail_index_sync_get_atomic_map(ctx);
- sync_ext_reorder(map, ext_id, old_record_size);
+ sync_ext_reorder(map, ext_map_idx, old_record_size);
} else if (modified) {
/* header size changed. recreate index file. */
map = mail_index_sync_get_atomic_map(ctx);
@@ -333,15 +334,15 @@ sync_ext_resize(const struct mail_transa
static bool
mail_index_sync_ext_unknown_complain(struct mail_index_sync_map_ctx *ctx,
- uint32_t ext_id)
+ uint32_t ext_map_idx)
{
unsigned char *p;
if (ctx->unknown_extensions == NULL) {
ctx->unknown_extensions =
- buffer_create_dynamic(default_pool, ext_id + 8);
- }
- p = buffer_get_space_unsafe(ctx->unknown_extensions, ext_id, 1);
+ buffer_create_dynamic(default_pool, ext_map_idx + 8);
+ }
+ p = buffer_get_space_unsafe(ctx->unknown_extensions, ext_map_idx, 1);
if (*p != 0) {
/* we've already complained once */
return FALSE;
@@ -358,11 +359,11 @@ int mail_index_sync_ext_intro(struct mai
const struct mail_index_ext *ext;
const char *name;
buffer_t *hdr_buf;
- uint32_t ext_id;
+ uint32_t ext_map_idx;
/* default to ignoring the following extension updates in case this
intro is corrupted */
- ctx->cur_ext_id = 0;
+ ctx->cur_ext_map_idx = 0;
ctx->cur_ext_ignore = TRUE;
if (u->ext_id != (uint32_t)-1 &&
@@ -384,19 +385,20 @@ int mail_index_sync_ext_intro(struct mai
t_push();
if (u->ext_id != (uint32_t)-1) {
name = NULL;
- ext_id = u->ext_id;
+ ext_map_idx = u->ext_id;
} else {
name = t_strndup(u + 1, u->name_size);
- ext_id = mail_index_map_lookup_ext(map, name);
- }
-
- if (ext_id != (uint32_t)-1) {
+ if (!mail_index_map_lookup_ext(map, name, &ext_map_idx))
+ ext_map_idx = (uint32_t)-1;
+ }
+
+ if (ext_map_idx != (uint32_t)-1) {
/* exists already */
- ext = array_idx(&map->extensions, ext_id);
+ ext = array_idx(&map->extensions, ext_map_idx);
if (u->reset_id == ext->reset_id) {
/* check if we need to resize anything */
- sync_ext_resize(u, ext_id, ctx);
+ sync_ext_resize(u, ext_map_idx, ctx);
ctx->cur_ext_ignore = FALSE;
} else {
/* extension was reset and this transaction hadn't
@@ -405,7 +407,7 @@ int mail_index_sync_ext_intro(struct mai
}
t_pop();
- ctx->cur_ext_id = ext_id;
+ ctx->cur_ext_map_idx = ext_map_idx;
return 1;
}
@@ -426,11 +428,12 @@ int mail_index_sync_ext_intro(struct mai
/* register record offset initially using zero,
sync_ext_reorder() will fix it. */
- ext_id = mail_index_map_register_ext(map, name, hdr_buf->used,
- u->hdr_size, 0, u->record_size,
- u->record_align, u->reset_id);
-
- ext = array_idx(&map->extensions, ext_id);
+ ext_map_idx = mail_index_map_register_ext(map, name, hdr_buf->used,
+ u->hdr_size, 0,
+ u->record_size,
+ u->record_align, u->reset_id);
+
+ ext = array_idx(&map->extensions, ext_map_idx);
/* <ext_hdr> <name> [padding] [header data] */
memset(&ext_hdr, 0, sizeof(ext_hdr));
@@ -456,10 +459,10 @@ int mail_index_sync_ext_intro(struct mai
t_pop();
mail_index_sync_init_handlers(ctx);
- sync_ext_reorder(map, ext_id, 0);
+ sync_ext_reorder(map, ext_map_idx, 0);
ctx->cur_ext_ignore = FALSE;
- ctx->cur_ext_id = ext_id;
+ ctx->cur_ext_map_idx = ext_map_idx;
return 1;
}
@@ -473,7 +476,7 @@ int mail_index_sync_ext_reset(struct mai
struct mail_index_record *rec;
uint32_t i;
- if (ctx->cur_ext_id == (uint32_t)-1) {
+ if (ctx->cur_ext_map_idx == (uint32_t)-1) {
mail_index_sync_set_corrupted(ctx,
"Extension reset without intro prefix");
return -1;
@@ -485,7 +488,7 @@ int mail_index_sync_ext_reset(struct mai
accidentally used by other processes. */
map = mail_index_sync_get_atomic_map(ctx);
- ext = array_idx_modifiable(&map->extensions, ctx->cur_ext_id);
+ ext = array_idx_modifiable(&map->extensions, ctx->cur_ext_map_idx);
ext->reset_id = u->new_reset_id;
memset(buffer_get_space_unsafe(map->hdr_copy_buf, ext->hdr_offset,
@@ -513,7 +516,7 @@ mail_index_sync_ext_hdr_update(struct ma
struct mail_index_map *map = ctx->view->map;
const struct mail_index_ext *ext;
- if (ctx->cur_ext_id == (uint32_t)-1) {
+ if (ctx->cur_ext_map_idx == (uint32_t)-1) {
mail_index_sync_set_corrupted(ctx,
"Extension header update without intro prefix");
return -1;
@@ -521,7 +524,7 @@ mail_index_sync_ext_hdr_update(struct ma
if (ctx->cur_ext_ignore)
return 1;
- ext = array_idx(&map->extensions, ctx->cur_ext_id);
+ ext = array_idx(&map->extensions, ctx->cur_ext_map_idx);
buffer_write(map->hdr_copy_buf, ext->hdr_offset + u->offset,
u + 1, u->size);
map->hdr_base = map->hdr_copy_buf->data;
@@ -542,14 +545,14 @@ mail_index_sync_ext_rec_update(struct ma
uint32_t seq;
int ret;
- i_assert(ctx->cur_ext_id != (uint32_t)-1);
+ i_assert(ctx->cur_ext_map_idx != (uint32_t)-1);
i_assert(!ctx->cur_ext_ignore);
mail_index_lookup_uid_range(view, u->uid, u->uid, &seq, &seq);
if (seq == 0)
return 1;
- ext = array_idx(&view->map->extensions, ctx->cur_ext_id);
+ ext = array_idx(&view->map->extensions, ctx->cur_ext_map_idx);
rec = MAIL_INDEX_MAP_IDX(view->map, seq-1);
old_data = PTR_OFFSET(rec, ext->record_offset);
More information about the dovecot-cvs
mailing list