mail-index-transaction.c revision 09c3a491f4f6ccebe290c7709bdc0d79a187610b
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber/* Copyright (C) 2003-2004 Timo Sirainen */
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber/* Inside transaction we keep messages stored in sequences in uid fields.
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber Before they're written to transaction log the sequences are changed to
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber UIDs. This is because we're able to compress sequence ranges better. */
d4f6fa926d92803d8b8217468be483ac2f7e270eStéphane Graberstatic void mail_index_transaction_add_last(struct mail_index_transaction *t);
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Grabermail_index_transaction_begin(struct mail_index_view *view, int hide)
be2e4e54da3c8054525321422f7f290d45b32a6cStéphane Graber /* don't allow syncing view while there's ongoing transactions */
c13c0e08da7dbfecb52e85233ac6cd17afa5d818Stéphane Graber t = i_new(struct mail_index_transaction, 1);
i_free(t);
t->refcount++;
if (--t->refcount == 0)
unsigned char *data;
if (range) {
t->extra_rec_updates[i],
sizeof(uint32_t) +
FALSE);
int ret;
if (mail_index_transaction_convert_to_uids(t) < 0)
return ret;
unsigned int new_record_size;
const void *src;
void *dest;
if (t->append_record_size != 0) {
for (i = 0; i < size; i++) {
struct mail_index_record *
if (t->last_new_seq != 0)
idx++;
sizeof(*data));
sizeof(*data));
switch (modify_type) {
case MODIFY_REPLACE:
case MODIFY_ADD:
for (i = 0; i < INDEX_KEYWORDS_BYTE_COUNT; i++)
case MODIFY_REMOVE:
for (i = 0; i < INDEX_KEYWORDS_BYTE_COUNT; i++)
INDEX_KEYWORDS_BYTE_COUNT) == 0)
switch (t->last_update_modify_type) {
case MODIFY_REPLACE:
for (i = 0; i < INDEX_KEYWORDS_BYTE_COUNT; i++)
case MODIFY_ADD:
case MODIFY_REMOVE:
idx++;
size++;
void *data;
if (size == 0)
idx = 0;
const void *data)