[dovecot-cvs] dovecot/src/lib-storage/index/mbox mbox-sync-parse.c, 1.17, 1.18 mbox-sync-private.h, 1.21, 1.22 mbox-sync-rewrite.c, 1.21, 1.22 mbox-sync-update.c, 1.17, 1.18

cras at procontrol.fi cras at procontrol.fi
Tue Jun 29 00:32:31 EEST 2004


Update of /home/cvs/dovecot/src/lib-storage/index/mbox
In directory talvi:/tmp/cvs-serv4957/lib-storage/index/mbox

Modified Files:
	mbox-sync-parse.c mbox-sync-private.h mbox-sync-rewrite.c 
	mbox-sync-update.c 
Log Message:
Several fixes for updating mbox. Recent changes also made it corrupt
headers.



Index: mbox-sync-parse.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync-parse.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- mbox-sync-parse.c	24 Jun 2004 13:47:35 -0000	1.17
+++ mbox-sync-parse.c	28 Jun 2004 21:32:29 -0000	1.18
@@ -398,9 +398,12 @@
 
 		func = header_func_find(hdr->name);
 		if (func != NULL) {
-			if (hdr->continues)
+			if (hdr->continues) {
 				hdr->use_full_value = TRUE;
-			else if (!func->func(ctx, hdr)) {
+				continue;
+			}
+
+			if (!func->func(ctx, hdr)) {
 				/* this header is broken, remove it */
 				ctx->need_rewrite = TRUE;
 				str_truncate(ctx->header, line_start_pos);

Index: mbox-sync-private.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync-private.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- mbox-sync-private.h	24 Jun 2004 13:47:35 -0000	1.21
+++ mbox-sync-private.h	28 Jun 2004 21:32:29 -0000	1.22
@@ -120,5 +120,7 @@
 int mbox_sync_seek(struct mbox_sync_context *sync_ctx, uoff_t from_offset);
 int mbox_move(struct mbox_sync_context *sync_ctx,
 	      uoff_t dest, uoff_t source, uoff_t size);
+void mbox_sync_move_buffer(struct mbox_sync_mail_context *ctx,
+			   size_t pos, size_t need, size_t have);
 
 #endif

Index: mbox-sync-rewrite.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync-rewrite.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- mbox-sync-rewrite.c	20 Jun 2004 13:48:34 -0000	1.21
+++ mbox-sync-rewrite.c	28 Jun 2004 21:32:29 -0000	1.22
@@ -148,7 +148,7 @@
 
 	if (data_size - start_pos <= *size) {
 		/* remove it all */
-		str_delete(ctx->header, start_pos, data_size - start_pos);
+		mbox_sync_move_buffer(ctx, start_pos, 0, data_size - start_pos);
 		*size -= data_size - start_pos;
 		return;
 	}
@@ -156,7 +156,7 @@
 	/* we have more space than needed. since we're removing from
 	   the beginning of header instead of end, we don't have to
 	   worry about multiline-headers. */
-	str_delete(ctx->header, start_pos, *size);
+	mbox_sync_move_buffer(ctx, start_pos, 0, *size);
 	if (last_line_pos <= start_pos + *size)
 		last_line_pos = start_pos;
 	else

Index: mbox-sync-update.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync-update.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- mbox-sync-update.c	20 Jun 2004 13:03:02 -0000	1.17
+++ mbox-sync-update.c	28 Jun 2004 21:32:29 -0000	1.18
@@ -17,8 +17,8 @@
 	}
 }
 
-static void mbox_sync_move_buffer(struct mbox_sync_mail_context *ctx,
-				  size_t pos, size_t need, size_t have)
+void mbox_sync_move_buffer(struct mbox_sync_mail_context *ctx,
+			   size_t pos, size_t need, size_t have)
 {
 	ssize_t diff = (ssize_t)need - (ssize_t)have;
 	int i;
@@ -126,8 +126,9 @@
 				ctx->sync_ctx->hdr->uid_validity;
 		}
 
+		str_append(ctx->header, "X-IMAPbase: ");
 		ctx->hdr_pos[MBOX_HDR_X_IMAPBASE] = str_len(ctx->header);
-		str_printfa(ctx->header, "X-IMAPbase: %u %010u",
+		str_printfa(ctx->header, "%u %010u",
 			    ctx->sync_ctx->base_uid_validity,
 			    ctx->sync_ctx->next_uid-1);
 		//FIXME:keywords_append(ctx, all_keywords);
@@ -135,24 +136,25 @@
 	}
 
 	if (ctx->hdr_pos[MBOX_HDR_X_UID] == (size_t)-1) {
+		str_append(ctx->header, "X-UID: ");
 		ctx->hdr_pos[MBOX_HDR_X_UID] = str_len(ctx->header);
-		str_printfa(ctx->header, "X-UID: %u\n", ctx->mail.uid);
+		str_printfa(ctx->header, "%u\n", ctx->mail.uid);
 	}
 
 	if (ctx->hdr_pos[MBOX_HDR_STATUS] == (size_t)-1 &&
 	    (ctx->mail.flags & STATUS_FLAGS_MASK) != 0) {
 		if (!ctx->sync_ctx->ibox->keep_recent)
                         ctx->mail.flags |= MBOX_NONRECENT;
-		ctx->hdr_pos[MBOX_HDR_STATUS] = str_len(ctx->header);
 		str_append(ctx->header, "Status: ");
+		ctx->hdr_pos[MBOX_HDR_STATUS] = str_len(ctx->header);
 		status_flags_append(ctx, mbox_status_flags);
 		str_append_c(ctx->header, '\n');
 	}
 
 	if (ctx->hdr_pos[MBOX_HDR_X_STATUS] == (size_t)-1 &&
 	    (ctx->mail.flags & XSTATUS_FLAGS_MASK) != 0) {
-		ctx->hdr_pos[MBOX_HDR_X_STATUS] = str_len(ctx->header);
 		str_append(ctx->header, "X-Status: ");
+		ctx->hdr_pos[MBOX_HDR_X_STATUS] = str_len(ctx->header);
 		status_flags_append(ctx, mbox_xstatus_flags);
 		str_append_c(ctx->header, '\n');
 	}
@@ -166,8 +168,8 @@
 	}
 
 	if (ctx->hdr_pos[MBOX_HDR_X_KEYWORDS] == (size_t)-1 && have_keywords) {
-		ctx->hdr_pos[MBOX_HDR_X_KEYWORDS] = str_len(ctx->header);
 		str_append(ctx->header, "X-Keywords: ");
+		ctx->hdr_pos[MBOX_HDR_X_KEYWORDS] = str_len(ctx->header);
 		keywords_append(ctx, ctx->mail.keywords);
 		str_append_c(ctx->header, '\n');
 	}



More information about the dovecot-cvs mailing list