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;
 }