mail-index-sync-ext.c revision c3c41a923c7ac19679e8ff797530869dbef7e018
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen/* Copyright (C) 2004 Timo Sirainen */
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenvoid mail_index_sync_init_expunge_handlers(struct mail_index_sync_map_ctx *ctx)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen const mail_index_expunge_handler_t *const *handlers;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen handlers = buffer_get_data(ctx->view->index->expunge_handlers,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen /* set expunge handlers */
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen buffer_set_used_size(ctx->expunge_handlers, 0);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen extensions = ctx->view->map->extensions->data;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen id_map = buffer_get_data(ctx->view->map->ext_id_map, &id_map_size);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen for (idx_ext_id = 0; idx_ext_id < size; idx_ext_id++) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (handlers[idx_ext_id] == NULL || map_ext_id == (uint32_t)-1)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen eh.record_offset = extensions[map_ext_id].record_offset;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen buffer_append(ctx->expunge_handlers, &eh, sizeof(eh));
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenmail_index_sync_deinit_expunge_handlers(struct mail_index_sync_map_ctx *ctx)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen eh = buffer_get_data(ctx->expunge_handlers, &size);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen for (i = 0; i < size; i++) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenvoid mail_index_sync_init_handlers(struct mail_index_sync_map_ctx *ctx)
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen /* set space for extra contexts */
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen size = sizeof(void *) * (ctx->view->index->extensions->used /
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen sizeof(struct mail_index_ext));
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen buffer_set_used_size(ctx->extra_context_buf, 0);
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen buffer_append_zero(ctx->extra_context_buf, size);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen buffer_get_modifyable_data(ctx->extra_context_buf, NULL);
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainenvoid mail_index_sync_deinit_handlers(struct mail_index_sync_map_ctx *ctx)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen const struct mail_index_sync_handler *sync_handlers;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen sync_handlers = buffer_get_data(ctx->view->index->sync_handlers,
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen i_assert(synch_size <= ctx->extra_context_buf->used / sizeof(void *));
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen ext = buffer_get_data(ctx->view->map->extensions, &size);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen /* sync_handlers[] is ordered by index->extensions while
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen extra_context is ordered by map->extensions. */
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen for (i = 0; i < size; i++) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenget_ext_header(struct mail_index_map *map, const struct mail_index_ext *ext)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen /* do some kludgy jumping to get to it. */
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen MAIL_INDEX_HEADER_SIZE_ALIGN(sizeof(*ext_hdr) +
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen hdr_base = buffer_get_modifyable_data(map->hdr_copy_buf, NULL);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenstatic int mail_index_ext_align_cmp(const void *p1, const void *p2)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen const struct mail_index_ext *const *e1 = p1, *const *e2 = p2;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen return (int)(*e2)->record_align - (int)(*e1)->record_align;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainensync_ext_reorder(struct mail_index_map *map, uint32_t ext_id, uint16_t old_size)
const void *src;
t_push();
for (i = 0; i < size; i++) {
for (i = 0; i < size; i++) {
if (i == size) {
offset = 0;
sizeof(struct mail_index_record));
for (i = 0; i < size; i++) {
for (i = 0; i < size; i++) {
t_pop();
return new_map;
if (modified) {
const struct mail_transaction_ext_intro *u)
const char *name;
t_push();
t_pop();
u->reset_id);
t_pop();
const struct mail_transaction_ext_reset *u)
uint32_t i;
const struct mail_transaction_ext_hdr_update *u)
const struct mail_transaction_ext_rec_update *u)
void *old_data;
int ret;
if (seq == 0)
if (ret <= 0)
return ret;