changeset 1414:dcc9b7b868d8 HEAD

Rewrite Content-length header if it's broken. UID-validity change checking was broken when first message was added to empty mbox.
author Timo Sirainen <tss@iki.fi>
date Sat, 03 May 2003 20:31:13 +0300
parents f9f69a6fdd63
children c1a7da406bbd
files src/lib-index/mbox/mbox-append.c src/lib-index/mbox/mbox-index.c src/lib-index/mbox/mbox-index.h
diffstat 3 files changed, 17 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mbox/mbox-append.c	Sat May 03 20:28:20 2003 +0300
+++ b/src/lib-index/mbox/mbox-append.c	Sat May 03 20:31:13 2003 +0300
@@ -19,7 +19,7 @@
 	const unsigned char *data;
 	unsigned char md5_digest[16];
 	size_t size, pos;
-	int ret;
+	int ret, dirty;
 
 	/* get the From-line */
 	pos = 0;
@@ -91,7 +91,7 @@
 
 	ret = 1;
 	if (index->header->messages_count == 0 &&
-	    ctx.uid_validity != index->header->messages_count) {
+	    ctx.uid_validity != index->header->uid_validity) {
 		/* UID validity is different */
 		if (ctx.uid_validity == 0) {
 			/* we have to write it to mbox */
@@ -116,8 +116,19 @@
 		/* X-UID header looks ok */
 		if (ret != 0)
 			index->header->next_uid = ctx.uid;
+		dirty = ctx.content_length_broken && !index->mailbox_readonly;
 	} else if (!index->mailbox_readonly) {
 		/* Write X-UID for it */
+		dirty = TRUE;
+	} else {
+		/* save MD5 */
+		md5_final(&ctx.md5, md5_digest);
+		index->update_field_raw(update, DATA_FIELD_MD5,
+					md5_digest, sizeof(md5_digest));
+		dirty = FALSE;
+	}
+
+	if (dirty) {
 		if (index->mbox_lock_type != MAIL_LOCK_EXCLUSIVE) {
 			/* try again */
 			ret = 0;
@@ -125,11 +136,6 @@
 			index->header->flags |= MAIL_INDEX_FLAG_DIRTY_MESSAGES;
 			rec->index_flags |= INDEX_MAIL_FLAG_DIRTY;
 		}
-	} else {
-		/* save MD5 */
-		md5_final(&ctx.md5, md5_digest);
-		index->update_field_raw(update, DATA_FIELD_MD5,
-					md5_digest, sizeof(md5_digest));
 	}
 
 	if (ret <= 0) {
--- a/src/lib-index/mbox/mbox-index.c	Sat May 03 20:28:20 2003 +0300
+++ b/src/lib-index/mbox/mbox-index.c	Sat May 03 20:31:13 2003 +0300
@@ -268,8 +268,10 @@
 		end_offset = start_offset + ctx->content_length;
 		if (ctx->content_length == (uoff_t)-1 ||
 		    !mbox_verify_end_of_body(ctx->input, end_offset)) {
-			if (ctx->content_length != (uoff_t)-1)
+			if (ctx->content_length != (uoff_t)-1) {
 				i_stream_seek(ctx->input, start_offset);
+				ctx->content_length_broken = TRUE;
+			}
 			mbox_skip_message(ctx->input);
 			end_offset = ctx->input->v_offset;
 			ctx->content_length = end_offset - start_offset;
--- a/src/lib-index/mbox/mbox-index.h	Sat May 03 20:28:20 2003 +0300
+++ b/src/lib-index/mbox/mbox-index.h	Sat May 03 20:31:13 2003 +0300
@@ -18,7 +18,7 @@
 
 	struct istream *input;
 	uoff_t content_length;
-	int set_read_limit;
+	int set_read_limit, content_length_broken;
 };
 
 int mbox_set_syscall_error(struct mail_index *index, const char *function);