mail-index-sync-ext.c revision 6bb0cb66286440890afad9b993baa7889299ea2c
3f98cdc011bb4e8cd22c088f288b0bcdb6452492Jakub Hrozek/* Copyright (c) 2004-2008 Dovecot authors, see the included COPYING file */
3f98cdc011bb4e8cd22c088f288b0bcdb6452492Jakub Hrozekvoid mail_index_sync_init_expunge_handlers(struct mail_index_sync_map_ctx *ctx)
3f98cdc011bb4e8cd22c088f288b0bcdb6452492Jakub Hrozek if (!array_is_created(&ctx->view->map->extensions))
44749ce0c1fee9babee80060fa0db99eebb2ab51Pavel Březina rext = array_get(&ctx->view->index->extensions, &rext_count);
1a542b3698d8c42cf075b722f8838f106eb09fccPavel Březina ext = array_get(&ctx->view->map->extensions, &ext_count);
3f98cdc011bb4e8cd22c088f288b0bcdb6452492Jakub Hrozek id_map = array_get(&ctx->view->map->ext_id_map, &id_map_count);
fb4e4c4eb6a6dc732370584f70d23dd4a2c5c7b6Pavel Březina contexts = array_get_modifiable(&ctx->extra_contexts, &context_count);
3f98cdc011bb4e8cd22c088f288b0bcdb6452492Jakub Hrozek for (idx_ext_id = 0; idx_ext_id < rext_count; idx_ext_id++) {
3f98cdc011bb4e8cd22c088f288b0bcdb6452492Jakub Hrozek map_ext_id = idx_ext_id >= id_map_count ? (uint32_t)-1 :
7c30e60c525ea798aaab142766ff00eef4b5df3bPavel Březina if (rext[idx_ext_id].expunge_handler == NULL ||
3f98cdc011bb4e8cd22c088f288b0bcdb6452492Jakub Hrozek !rext[idx_ext_id].expunge_handler_call_always))
3f98cdc011bb4e8cd22c088f288b0bcdb6452492Jakub Hrozek eh.record_offset = map_ext_id == (uint32_t)-1 ? 0 :
f6171b2bc954a367f316853ab71090eb213bdee3Pavel Březinamail_index_sync_deinit_expunge_handlers(struct mail_index_sync_map_ctx *ctx)
3f98cdc011bb4e8cd22c088f288b0bcdb6452492Jakub Hrozek unsigned int i, count;
5ff1c3c5a12930692cb6284d14f7fda3a974af8ePavel Březina if (!array_is_created(&ctx->expunge_handlers))
5ff1c3c5a12930692cb6284d14f7fda3a974af8ePavel Březina eh = array_get(&ctx->expunge_handlers, &count);
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina for (i = 0; i < count; i++) {
b0fa48b0d612b46a86e45f8e4b5d9feae9784c2bSimo Sorcevoid mail_index_sync_init_handlers(struct mail_index_sync_map_ctx *ctx)
3f98cdc011bb4e8cd22c088f288b0bcdb6452492Jakub Hrozek unsigned int count;
6a31a971a376a992afb838fe60b311360c970267Jakub Hrozek if (!array_is_created(&ctx->view->map->extensions))
b0fa48b0d612b46a86e45f8e4b5d9feae9784c2bSimo Sorce /* set space for extra contexts */
6a31a971a376a992afb838fe60b311360c970267Jakub Hrozek count = array_count(&ctx->view->index->extensions);
f5d4b05027acce06e3509ecb68869d1c7ef37180Pavel Březina /* make sure the extra_contexts contains everything */
f5d4b05027acce06e3509ecb68869d1c7ef37180Pavel Březina (void)array_idx_modifiable(&ctx->extra_contexts, count - 1);
6a31a971a376a992afb838fe60b311360c970267Jakub Hrozek /* we need to update the expunge handler list in case they had
f5d4b05027acce06e3509ecb68869d1c7ef37180Pavel Březina already been called */
void **extra_contexts;
for (i = 0; i < context_count; i++) {
&extra_contexts[i]);
static struct mail_index_ext_header *
void *hdr_base;
return ext_hdr;
unsigned int i, count;
const void *src;
for (i = 0; i < count; i++) {
for (i = 0; i < count; i++) {
if (i == count) {
offset = 0;
sizeof(struct mail_index_record));
for (i = 0; i < count; i++) {
copy_sizes[i]);
for (i = 0; i < count; i++) {
bool no_shrink)
if (!no_shrink) {
if (modified) {
if (reorder) {
} else if (modified) {
return TRUE;
return FALSE;
return TRUE;
const char *name,
ext_hdr);
struct mail_transaction_ext_intro u;
i_unreached();
if (!fix_size)
memset(&u, 0, sizeof(u));
const struct mail_transaction_ext_intro *u)
bool no_shrink;
uint32_t i;
const struct mail_transaction_ext_reset *u)
if (!u->preserve_data)
const struct mail_transaction_ext_hdr_update *u)
const struct mail_transaction_ext_rec_update *u)
void *old_data;
int ret;
void **extra_context =
if (ret <= 0)
return ret;