[dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-uidlist.c, 1.9, 1.10

cras at procontrol.fi cras at procontrol.fi
Tue May 4 00:08:06 EEST 2004


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

Modified Files:
	maildir-uidlist.c 
Log Message:
and yet more syncing fixes..



Index: maildir-uidlist.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/maildir/maildir-uidlist.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- maildir-uidlist.c	3 May 2004 19:38:28 -0000	1.9
+++ maildir-uidlist.c	3 May 2004 21:08:04 -0000	1.10
@@ -54,9 +54,9 @@
 	struct hash_table *files;
 
 	unsigned int first_new_pos;
+	unsigned int new_files_count;
 
 	unsigned int partial:1;
-	unsigned int new_files:1;
 	unsigned int synced:1;
 	unsigned int failed:1;
 };
@@ -597,15 +597,16 @@
 	}
 
 	if (rec == NULL) {
-		if (!ctx->new_files) {
-			ctx->new_files = TRUE;
+		if (ctx->new_files_count == 0) {
 			ctx->first_new_pos =
 				buffer_get_used_size(uidlist->record_buf) /
 				sizeof(rec);
 		}
+		ctx->new_files_count++;
 
 		rec = p_new(uidlist->record_pool,
 			    struct maildir_uidlist_rec, 1);
+		rec->uid = (uint32_t)-1;
 		buffer_append(uidlist->record_buf, &rec, sizeof(rec));
 	}
 
@@ -656,11 +657,9 @@
 
 		if (old_rec != NULL)
 			*rec = *old_rec;
-		else if (!ctx->new_files) {
-			ctx->new_files = TRUE;
-			ctx->first_new_pos =
-				buffer_get_used_size(ctx->record_buf) /
-				sizeof(rec);
+		else {
+			rec->uid = (uint32_t)-1;
+			ctx->new_files_count++;
 		}
 
 		buffer_append(ctx->record_buf, &rec, sizeof(rec));
@@ -710,7 +709,7 @@
 	qsort(rec_p + first_new_pos, size - first_new_pos,
 	      sizeof(*rec_p), maildir_time_cmp);
 	for (dest = first_new_pos; dest < size; dest++) {
-		i_assert(rec_p[dest]->uid == 0);
+		i_assert(rec_p[dest]->uid == (uint32_t)-1);
 		rec_p[dest]->uid = uidlist->next_uid++;
 		rec_p[dest]->flags &= ~MAILDIR_UIDLIST_REC_FLAG_MOVED;
 
@@ -737,8 +736,6 @@
 	/* buffer is unsorted, sort it by UID up to beginning of new messages */
 	rec_p = buffer_get_modifyable_data(ctx->record_buf, &size);
 	size /= sizeof(*rec_p);
-	if (ctx->new_files)
-		size = ctx->first_new_pos;
 	qsort(rec_p, size, sizeof(*rec_p), maildir_uid_cmp);
 
 	buffer_free(uidlist->record_buf);
@@ -754,8 +751,10 @@
 	uidlist->record_pool = ctx->record_pool;
 	ctx->record_pool = NULL;
 
-	if (ctx->new_files)
-		maildir_uidlist_assign_uids(uidlist, ctx->first_new_pos);
+	if (ctx->new_files_count != 0) {
+		maildir_uidlist_assign_uids(uidlist,
+					    size - ctx->new_files_count);
+	}
 }
 
 int maildir_uidlist_sync_deinit(struct maildir_uidlist_sync_ctx *ctx)
@@ -766,14 +765,14 @@
 	if (!ctx->partial)
 		maildir_uidlist_swap(ctx);
 	else {
-		if (ctx->new_files) {
+		if (ctx->new_files_count != 0) {
 			maildir_uidlist_assign_uids(ctx->uidlist,
 						    ctx->first_new_pos);
 		}
 		maildir_uidlist_mark_all(ctx->uidlist, FALSE);
 	}
 
-	if (ctx->new_files && ret == 0)
+	if (ctx->new_files_count != 0 && ret == 0)
 		ret = maildir_uidlist_rewrite(ctx->uidlist);
 
 	if (UIDLIST_IS_LOCKED(ctx->uidlist))



More information about the dovecot-cvs mailing list