Mercurial > dovecot > original-hg > dovecot-1.2
diff src/lib-index/mbox/mbox-append.c @ 206:0bb7bf7266ab HEAD
cleanups / reliability fixes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 10 Sep 2002 01:49:34 +0300 |
parents | 95d21ab87eeb |
children | 9f78db959fdc |
line wrap: on
line diff
--- a/src/lib-index/mbox/mbox-append.c Tue Sep 10 00:45:39 2002 +0300 +++ b/src/lib-index/mbox/mbox-append.c Tue Sep 10 01:49:34 2002 +0300 @@ -9,7 +9,8 @@ #include "mail-index-util.h" static MailIndexRecord *mail_index_record_append(MailIndex *index, - time_t internal_date) + time_t internal_date, + unsigned int *uid) { MailIndexRecord trec, *rec; @@ -17,7 +18,7 @@ trec.internal_date = internal_date; rec = &trec; - if (!index->append(index, &rec)) + if (!index->append(index, &rec, uid)) return NULL; return rec; @@ -83,6 +84,7 @@ time_t internal_date; uoff_t abs_start_offset, stop_offset, old_size; unsigned char *data, md5_digest[16]; + unsigned int uid; size_t size, pos; int failed; @@ -121,7 +123,7 @@ stop_offset = inbuf->offset; /* add message to index */ - rec = mail_index_record_append(index, internal_date); + rec = mail_index_record_append(index, internal_date, &uid); if (rec == NULL) return FALSE; @@ -151,15 +153,19 @@ index->update_field_raw(update, FIELD_TYPE_MD5, md5_digest, sizeof(md5_digest)); - if (!index->update_end(update)) { - /* failed - delete the record */ - (void)index->expunge(index, rec, 0, FALSE); + if (!index->update_end(update)) failed = TRUE; - } else { + else { /* save message flags */ rec->msg_flags = ctx.flags; mail_index_mark_flag_changes(index, rec, 0, rec->msg_flags); failed = FALSE; + + /* make sure everything is written before setting it's UID + to mark it as non-deleted. */ + if (!mail_index_fmsync(index, index->mmap_length)) + return FALSE; + rec->uid = uid; } mbox_header_free_context(&ctx);