Mercurial > dovecot > original-hg > dovecot-1.2
changeset 31:33e86ee7d167 HEAD
when all mail is deleted, truncate the index files.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 26 Aug 2002 22:17:54 +0300 |
parents | 8509281fda72 |
children | b7d7474cbcb2 |
files | src/lib-index/mail-index.c |
diffstat | 1 files changed, 22 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index.c Mon Aug 26 02:54:19 2002 +0300 +++ b/src/lib-index/mail-index.c Mon Aug 26 22:17:54 2002 +0300 @@ -1036,6 +1036,20 @@ } } +static int mail_index_truncate(MailIndex *index) +{ + /* update header */ + index->header->first_hole_position = 0; + index->header->first_hole_records = 0; + + /* truncate index file */ + if (ftruncate(index->fd, sizeof(MailIndexHeader)) < 0) + return FALSE; + + /* truncate data file */ + return mail_index_data_reset(index->data); +} + int mail_index_expunge(MailIndex *index, MailIndexRecord *rec, unsigned int seq, int external_change) { @@ -1101,8 +1115,14 @@ hdr->messages_count--; index_mark_flag_changes(index, rec, rec->msg_flags, 0); - /* update deleted_space in data file */ - (void)mail_index_data_add_deleted_space(index->data, rec->data_size); + if (hdr->messages_count == 0) { + /* all messages are deleted, truncate the index files */ + (void)mail_index_truncate(index); + } else { + /* update deleted_space in data file */ + (void)mail_index_data_add_deleted_space(index->data, + rec->data_size); + } return TRUE; }