Mercurial > dovecot > original-hg > dovecot-1.2
diff src/lib-index/mail-index.c @ 2671:3b70ddb51771 HEAD
Renamed "extra record info" and variations of it to "extension" or "ext" in
short.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 26 Sep 2004 17:15:54 +0300 |
parents | b1f91349d216 |
children | d41c42a7bf1e |
line wrap: on
line diff
--- a/src/lib-index/mail-index.c Sun Sep 26 13:37:03 2004 +0300 +++ b/src/lib-index/mail-index.c Sun Sep 26 17:15:54 2004 +0300 @@ -26,11 +26,9 @@ index->prefix = i_strdup(prefix); index->fd = -1; - index->extra_infos_pool = - pool_alloconly_create("extra_infos_pool", 256); - index->extra_infos = - buffer_create_dynamic(index->extra_infos_pool, - 64, (size_t)-1); + index->extension_pool = pool_alloconly_create("extension", 256); + index->extensions = + buffer_create_dynamic(index->extension_pool, 64, (size_t)-1); index->mode = 0600; index->gid = (gid_t)-1; @@ -40,7 +38,7 @@ void mail_index_free(struct mail_index *index) { mail_index_close(index); - pool_unref(index->extra_infos_pool); + pool_unref(index->extension_pool); i_free(index->error); i_free(index->dir); @@ -55,23 +53,22 @@ index->gid = gid; } -uint32_t mail_index_register_record_extra(struct mail_index *index, - const char *name, uint32_t hdr_size, - uint16_t record_size) +uint32_t mail_index_ext_register(struct mail_index *index, const char *name, + uint32_t hdr_size, uint16_t record_size) { - const struct mail_index_extra_record_info *einfos; - struct mail_index_extra_record_info info; - size_t extra_count; + const struct mail_index_ext *extensions; + struct mail_index_ext ext; + size_t ext_count; unsigned int i; - einfos = buffer_get_data(index->extra_infos, &extra_count); - extra_count /= sizeof(*einfos); + extensions = buffer_get_data(index->extensions, &ext_count); + ext_count /= sizeof(*extensions); /* see if it's there already */ - for (i = 0; i < extra_count; i++) { - if (strcmp(einfos[i].name, name) == 0) { - i_assert(einfos[i].hdr_size == hdr_size); - i_assert(einfos[i].record_size == record_size); + for (i = 0; i < ext_count; i++) { + if (strcmp(extensions[i].name, name) == 0) { + i_assert(extensions[i].hdr_size == hdr_size); + i_assert(extensions[i].record_size == record_size); return i; } } @@ -79,111 +76,102 @@ i_assert(hdr_size % 4 == 0); i_assert(record_size % 4 == 0); - memset(&info, 0, sizeof(info)); - info.name = p_strdup(index->extra_infos_pool, name); - info.hdr_size = hdr_size; - info.record_size = record_size; + memset(&ext, 0, sizeof(ext)); + ext.name = p_strdup(index->extension_pool, name); + ext.hdr_size = hdr_size; + ext.record_size = record_size; - buffer_append(index->extra_infos, &info, sizeof(info)); - return extra_count; + buffer_append(index->extensions, &ext, sizeof(ext)); + return ext_count; } -static void mail_index_map_create_extra_infos(struct mail_index_map *map, - unsigned int initial_count) +static void mail_index_map_init_extbufs(struct mail_index_map *map, + unsigned int initial_count) { - size_t extra_infos_size, extra_infos_id_map_size, size; + size_t ext_size, ext_id_map_size, size; - extra_infos_size = initial_count * - sizeof(struct mail_index_extra_record_info); - extra_infos_id_map_size = initial_count * sizeof(uint32_t); - if (map->extra_records_pool == NULL) { - size = extra_infos_size + extra_infos_id_map_size + - initial_count * 20; - map->extra_records_pool = - pool_alloconly_create("extra_infos", + ext_size = initial_count * sizeof(struct mail_index_ext); + ext_id_map_size = initial_count * sizeof(uint32_t); + if (map->extension_pool == NULL) { + size = ext_size + ext_id_map_size + + (initial_count * 20); /* for names */ + map->extension_pool = + pool_alloconly_create("extensions", nearest_power(size)); + } else { + p_clear(map->extension_pool); } - map->extra_infos = buffer_create_dynamic(map->extra_records_pool, - extra_infos_size, (size_t)-1); - map->extra_infos_id_map = buffer_create_dynamic(map->extra_records_pool, - extra_infos_id_map_size, - (size_t)-1); + map->extensions = buffer_create_dynamic(map->extension_pool, + ext_size, (size_t)-1); + map->ext_id_map = buffer_create_dynamic(map->extension_pool, + ext_id_map_size, (size_t)-1); } -uint32_t mail_index_map_register_extra_info(struct mail_index *index, - struct mail_index_map *map, - const char *name, - uint32_t hdr_offset, - uint32_t hdr_size, - uint32_t record_size) +uint32_t mail_index_map_register_ext(struct mail_index *index, + struct mail_index_map *map, + const char *name, uint32_t hdr_offset, + uint32_t hdr_size, uint32_t record_size) { - const struct mail_index_extra_record_info *last_einfo; - struct mail_index_extra_record_info *einfo; + const struct mail_index_ext *last_ext; + struct mail_index_ext *ext; size_t size; - uint32_t idx, data_id; + uint32_t idx, ext_id; - if (map->extra_infos == NULL) { - mail_index_map_create_extra_infos(map, 5); - last_einfo = NULL; + if (map->extensions == NULL) { + mail_index_map_init_extbufs(map, 5); + last_ext = NULL; idx = 0; } else { - last_einfo = buffer_get_data(map->extra_infos, &size); - idx = size / sizeof(*last_einfo); + last_ext = buffer_get_data(map->extensions, &size); + idx = size / sizeof(*last_ext); if (idx == 0) - last_einfo = NULL; + last_ext = NULL; else - last_einfo += idx - 1; + last_ext += idx - 1; } - einfo = buffer_append_space_unsafe(map->extra_infos, sizeof(*einfo)); - memset(einfo, 0, sizeof(*einfo)); + ext = buffer_append_space_unsafe(map->extensions, sizeof(*ext)); + memset(ext, 0, sizeof(*ext)); - einfo->name = p_strdup(map->extra_records_pool, name); - einfo->hdr_offset = hdr_offset; - einfo->hdr_size = hdr_size; - einfo->record_size = record_size; + ext->name = p_strdup(map->extension_pool, name); + ext->hdr_offset = hdr_offset; + ext->hdr_size = hdr_size; + ext->record_size = record_size; - if (last_einfo != NULL) { - einfo->record_offset = last_einfo->record_offset + - last_einfo->record_size; + if (last_ext != NULL) { + ext->record_offset = last_ext->record_offset + + last_ext->record_size; } else { - einfo->record_offset = sizeof(struct mail_index_record); + ext->record_offset = sizeof(struct mail_index_record); } - data_id = mail_index_register_record_extra(index, name, - hdr_size, record_size); - buffer_write(map->extra_infos_id_map, data_id * sizeof(uint32_t), + ext_id = mail_index_ext_register(index, name, hdr_size, record_size); + buffer_write(map->ext_id_map, ext_id * sizeof(uint32_t), &idx, sizeof(idx)); return idx; } -static int mail_index_read_extra_infos(struct mail_index *index, - struct mail_index_map *map) +static int mail_index_read_extensions(struct mail_index *index, + struct mail_index_map *map) { - const struct mail_index_extra_record_info_header *einfo_hdr; + const struct mail_index_ext_header *ext_hdr; unsigned int i, old_count; const char *name; - uint32_t data_id, offset, name_offset; + uint32_t ext_id, offset, name_offset; offset = map->hdr->base_header_size; - if (offset == map->hdr->header_size && - map->extra_records_pool == NULL) { + if (offset == map->hdr->header_size && map->extension_pool == NULL) { /* nothing to do, skip allocatations and all */ return 1; } - old_count = index->extra_infos->used / - sizeof(struct mail_index_extra_record_info); + old_count = index->extensions->used / sizeof(struct mail_index_ext); + mail_index_map_init_extbufs(map, old_count + 5); - if (map->extra_records_pool != NULL) - p_clear(map->extra_records_pool); - mail_index_map_create_extra_infos(map, old_count + 5); - data_id = (uint32_t)-1; - for (i = 0; i < old_count; i++) { - buffer_append(map->extra_infos_id_map, - &data_id, sizeof(data_id)); - } + ext_id = (uint32_t)-1; + for (i = 0; i < old_count; i++) + buffer_append(map->ext_id_map, &ext_id, sizeof(ext_id)); name = map->hdr_base; while (offset < map->hdr->header_size) { @@ -201,10 +189,10 @@ while (offset < map->hdr->header_size && (offset % 4) != 0) offset++; - einfo_hdr = CONST_PTR_OFFSET(map->hdr_base, offset); + ext_hdr = CONST_PTR_OFFSET(map->hdr_base, offset); - if (offset + sizeof(*einfo_hdr) > map->hdr->header_size || - offset + sizeof(*einfo_hdr) + einfo_hdr->hdr_size > + if (offset + sizeof(*ext_hdr) > map->hdr->header_size || + offset + sizeof(*ext_hdr) + ext_hdr->hdr_size > map->hdr->header_size) { mail_index_set_error(index, "Corrupted index file %s: " "Header extension goes outside header", @@ -212,13 +200,12 @@ return -1; } - mail_index_map_register_extra_info(index, map, - name + name_offset, - offset + sizeof(*einfo_hdr), - einfo_hdr->hdr_size, - einfo_hdr->record_size); + mail_index_map_register_ext(index, map, name + name_offset, + offset + sizeof(*ext_hdr), + ext_hdr->hdr_size, + ext_hdr->record_size); - offset += sizeof(*einfo_hdr) + einfo_hdr->hdr_size; + offset += sizeof(*ext_hdr) + ext_hdr->hdr_size; } return 1; } @@ -286,7 +273,7 @@ hdr->first_deleted_uid_lowwater > hdr->next_uid) return 0; - return mail_index_read_extra_infos(index, map); + return mail_index_read_extensions(index, map); } static void mail_index_map_clear(struct mail_index *index, @@ -319,8 +306,8 @@ i_assert(map->refcount == 0); mail_index_map_clear(index, map); - if (map->extra_records_pool != NULL) - pool_unref(map->extra_records_pool); + if (map->extension_pool != NULL) + pool_unref(map->extension_pool); buffer_free(map->hdr_copy_buf); i_free(map); } @@ -632,7 +619,7 @@ { struct mail_index_map *mem_map; struct mail_index_header *hdr; - struct mail_index_extra_record_info *einfos; + struct mail_index_ext *extensions; void *src, *dest; size_t size, copy_size; unsigned int i, count; @@ -673,38 +660,39 @@ hdr->record_size = new_record_size; mem_map->hdr = hdr; - /* copy extra_infos */ - if (map->extra_infos_id_map != NULL) { - count = map->extra_infos_id_map->used / sizeof(uint32_t); - mail_index_map_create_extra_infos(mem_map, count); + /* copy extensions */ + if (map->ext_id_map != NULL) { + count = map->ext_id_map->used / sizeof(uint32_t); + mail_index_map_init_extbufs(mem_map, count); - buffer_append_buf(mem_map->extra_infos, map->extra_infos, + buffer_append_buf(mem_map->extensions, map->extensions, 0, (size_t)-1); - buffer_append_buf(mem_map->extra_infos_id_map, - map->extra_infos_id_map, 0, (size_t)-1); + buffer_append_buf(mem_map->ext_id_map, map->ext_id_map, + 0, (size_t)-1); /* fix the name pointers to use our own pool */ - einfos = buffer_get_modifyable_data(mem_map->extra_infos, NULL); + extensions = buffer_get_modifyable_data(mem_map->extensions, + NULL); for (i = 0; i < count; i++) { - einfos[i].name = p_strdup(mem_map->extra_records_pool, - einfos[i].name); + extensions[i].name = p_strdup(mem_map->extension_pool, + extensions[i].name); } } return mem_map; } -int mail_index_map_get_extra_info_idx(struct mail_index_map *map, - uint32_t data_id, uint32_t *idx_r) +int mail_index_map_get_ext_idx(struct mail_index_map *map, + uint32_t ext_id, uint32_t *idx_r) { const uint32_t *id_map; - if (map->extra_infos_id_map == NULL || - map->extra_infos_id_map->used / sizeof(*id_map) <= data_id) + if (map->ext_id_map == NULL || + map->ext_id_map->used / sizeof(*id_map) <= ext_id) return 0; - id_map = map->extra_infos_id_map->data; - *idx_r = id_map[data_id]; + id_map = map->ext_id_map->data; + *idx_r = id_map[ext_id]; return *idx_r != (uint32_t)-1; }