/* add some padding, since we don't bother to handle undersized
headers correctly */
buf = t_malloc0(MALLOC_ADD(ext->hdr_size, 128));
- data = CONST_PTR_OFFSET(index->map->hdr_base, ext->hdr_offset);
+ data = MAIL_INDEX_MAP_HDR_OFFSET(index->map, ext->hdr_offset);
memcpy(buf, data, ext->hdr_size);
data = buf;
hdr_offset = ext_offset +
mail_index_map_ext_hdr_offset(sizeof(MAIL_INDEX_EXT_KEYWORDS)-1);
- kw_hdr = CONST_PTR_OFFSET(map->hdr_base, hdr_offset);
+ kw_hdr = MAIL_INDEX_MAP_HDR_OFFSET(map, hdr_offset);
keywords_count = kw_hdr->keywords_count;
kw_rec = (const void *)(kw_hdr + 1);
- const char names[] * keywords_count
*/
i_assert(ext->hdr_offset < map->hdr.header_size);
- kw_hdr = CONST_PTR_OFFSET(map->hdr_base, ext->hdr_offset);
+ kw_hdr = MAIL_INDEX_MAP_HDR_OFFSET(map, ext->hdr_offset);
kw_rec = (const void *)(kw_hdr + 1);
name = (const char *)(kw_rec + kw_hdr->keywords_count);
- 64bit alignment padding
*/
name_offset = offset + sizeof(*ext_hdr);
- ext_hdr = CONST_PTR_OFFSET(map->hdr_base, offset);
+ ext_hdr = MAIL_INDEX_MAP_HDR_OFFSET(map, offset);
if (offset + sizeof(*ext_hdr) >= map->hdr.header_size)
return -1;
if (offset > map->hdr.header_size)
return -1;
- *name_r = t_strndup(CONST_PTR_OFFSET(map->hdr_base, name_offset),
+ *name_r = t_strndup(MAIL_INDEX_MAP_HDR_OFFSET(map, name_offset),
ext_hdr->name_size);
if (strcmp(*name_r, str_sanitize(*name_r, SIZE_MAX)) != 0) {
/* we allow only plain ASCII names, so this extension
I_MIN(sizeof(dest->hdr), src->hdr.base_header_size));
if (src != dest) {
buffer_write(dest->hdr_copy_buf, src->hdr.base_header_size,
- CONST_PTR_OFFSET(src->hdr_base,
- src->hdr.base_header_size),
+ MAIL_INDEX_MAP_HDR_OFFSET(src, src->hdr.base_header_size),
src->hdr.header_size - src->hdr.base_header_size);
}
dest->hdr_base = buffer_get_modifiable_data(dest->hdr_copy_buf, NULL);
if (ext->hdr_size != sizeof(struct mail_index_modseq_header))
return NULL;
- return CONST_PTR_OFFSET(map->hdr_base, ext->hdr_offset);
+ return MAIL_INDEX_MAP_HDR_OFFSET(map, ext->hdr_offset);
}
uint64_t mail_index_map_modseq_get_highest(struct mail_index_map *map)
ext = array_idx(&map->extensions, ext_map_idx);
/* get the current highest_modseq. don't change any modseq below it. */
- hdr = CONST_PTR_OFFSET(map->hdr_base, ext->hdr_offset);
+ hdr = MAIL_INDEX_MAP_HDR_OFFSET(map, ext->hdr_offset);
/* Scan logs for updates between ext_hdr.log_* .. view position.
There are two reasons why there could be any:
highest_modseq = mail_transaction_log_view_get_prev_modseq(view->log_view);
ext = array_idx(&map->extensions, ext_map_idx);
- old_modseq_hdr = CONST_PTR_OFFSET(map->hdr_base, ext->hdr_offset);
+ old_modseq_hdr = MAIL_INDEX_MAP_HDR_OFFSET(map, ext->hdr_offset);
if (old_modseq_hdr->log_seq < log_seq ||
(old_modseq_hdr->log_seq == log_seq &&
uint32_t last_appended_uid;
};
+#define MAIL_INDEX_MAP_HDR_OFFSET(map, hdr_offset) \
+ CONST_PTR_OFFSET((map)->hdr_base, hdr_offset)
struct mail_index_map {
struct mail_index *index;
int refcount;
struct mail_index_keyword_header new_kw_hdr;
uint32_t offset;
- kw_hdr = CONST_PTR_OFFSET(map->hdr_base, ext->hdr_offset);
+ kw_hdr = MAIL_INDEX_MAP_HDR_OFFSET(map, ext->hdr_offset);
kw_rec = (const void *)(kw_hdr + 1);
name = (const char *)(kw_rec + kw_hdr->keywords_count);
}
ext = array_idx(&map->extensions, idx);
- *data_r = CONST_PTR_OFFSET(map->hdr_base, ext->hdr_offset);
+ *data_r = MAIL_INDEX_MAP_HDR_OFFSET(map, ext->hdr_offset);
*data_size_r = ext->hdr_size;
}
base_size = I_MIN(map->hdr.base_header_size, sizeof(map->hdr));
o_stream_nsend(output, &map->hdr, base_size);
- o_stream_nsend(output, CONST_PTR_OFFSET(map->hdr_base, base_size),
+ o_stream_nsend(output, MAIL_INDEX_MAP_HDR_OFFSET(map, base_size),
map->hdr.header_size - base_size);
o_stream_nsend(output, map->rec_map->records,
map->rec_map->records_count * map->hdr.record_size);