[dovecot-cvs] dovecot/src/lib-index mail-index-private.h, 1.14, 1.15 mail-index-sync-private.h, 1.3, 1.4 mail-index-sync.c, 1.11, 1.12 mail-index-view-sync.c, 1.5, 1.6 mail-index.c, 1.119, 1.120

cras at procontrol.fi cras at procontrol.fi
Mon May 10 02:06:29 EEST 2004


Update of /home/cvs/dovecot/src/lib-index
In directory talvi:/tmp/cvs-serv29121/lib-index

Modified Files:
	mail-index-private.h mail-index-sync-private.h 
	mail-index-sync.c mail-index-view-sync.c mail-index.c 
Log Message:
syncing fixes



Index: mail-index-private.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-index-private.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- mail-index-private.h	3 May 2004 14:22:24 -0000	1.14
+++ mail-index-private.h	9 May 2004 23:06:27 -0000	1.15
@@ -112,11 +112,6 @@
 void mail_index_view_transaction_ref(struct mail_index_view *view);
 void mail_index_view_transaction_unref(struct mail_index_view *view);
 
-int mail_index_sync_get_rec(struct mail_index_view *view,
-			    struct mail_index_sync_rec *rec,
-			    const struct mail_transaction_header *hdr,
-			    const void *data, size_t *data_offset);
-
 void mail_index_set_inconsistent(struct mail_index *index);
 
 int mail_index_set_error(struct mail_index *index, const char *fmt, ...)

Index: mail-index-sync-private.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-index-sync-private.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- mail-index-sync-private.h	2 May 2004 19:24:35 -0000	1.3
+++ mail-index-sync-private.h	9 May 2004 23:06:27 -0000	1.4
@@ -31,4 +31,11 @@
 void mail_index_header_update_lowwaters(struct mail_index_header *hdr,
 					const struct mail_index_record *rec);
 
+void
+mail_index_sync_get_expunge(struct mail_index_sync_rec *rec,
+			    const struct mail_transaction_expunge *exp);
+void
+mail_index_sync_get_update(struct mail_index_sync_rec *rec,
+			   const struct mail_transaction_flag_update *update);
+
 #endif

Index: mail-index-sync.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-index-sync.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- mail-index-sync.c	4 May 2004 18:13:10 -0000	1.11
+++ mail-index-sync.c	9 May 2004 23:06:27 -0000	1.12
@@ -198,7 +198,7 @@
 	return 1;
 }
 
-static void
+void
 mail_index_sync_get_expunge(struct mail_index_sync_rec *rec,
 			    const struct mail_transaction_expunge *exp)
 {
@@ -207,7 +207,7 @@
 	rec->seq2 = exp->seq2;
 }
 
-static void
+void
 mail_index_sync_get_update(struct mail_index_sync_rec *rec,
 			   const struct mail_transaction_flag_update *update)
 {
@@ -252,45 +252,6 @@
 	return TRUE;
 }
 
-int mail_index_sync_get_rec(struct mail_index_view *view,
-			    struct mail_index_sync_rec *rec,
-			    const struct mail_transaction_header *hdr,
-			    const void *data, size_t *data_offset)
-{
-	switch (hdr->type & MAIL_TRANSACTION_TYPE_MASK) {
-	case MAIL_TRANSACTION_APPEND: {
-		rec->type = MAIL_INDEX_SYNC_TYPE_APPEND;
-		rec->seq1 = view->index->map->records_count + 1;
-		rec->seq2 = rec->seq1 + hdr->size /
-			sizeof(struct mail_index_record) - 1;
-		rec->appends = NULL;
-
-		*data_offset += hdr->size;
-		break;
-	}
-	case MAIL_TRANSACTION_EXPUNGE: {
-		const struct mail_transaction_expunge *exp =
-			CONST_PTR_OFFSET(data, *data_offset);
-
-		*data_offset += sizeof(*exp);
-                mail_index_sync_get_expunge(rec, exp);
-		break;
-	}
-	case MAIL_TRANSACTION_FLAG_UPDATE: {
-		const struct mail_transaction_flag_update *update =
-			CONST_PTR_OFFSET(data, *data_offset);
-
-		*data_offset += sizeof(*update);
-                mail_index_sync_get_update(rec, update);
-		break;
-	}
-	default:
-		i_unreached();
-	}
-
-	return mail_index_sync_rec_check(view, rec);
-}
-
 int mail_index_sync_next(struct mail_index_sync_ctx *ctx,
 			 struct mail_index_sync_rec *sync_rec)
 {

Index: mail-index-view-sync.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-index-view-sync.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- mail-index-view-sync.c	2 May 2004 20:32:16 -0000	1.5
+++ mail-index-view-sync.c	9 May 2004 23:06:27 -0000	1.6
@@ -12,6 +12,7 @@
 	enum mail_index_sync_type sync_mask;
 	struct mail_index_map *sync_map;
 	buffer_t *expunges;
+	uint32_t messages_count;
 
 	const struct mail_transaction_header *hdr;
 	const void *data;
@@ -104,6 +105,7 @@
 	ctx->sync_mask = sync_mask;
 	ctx->sync_map = map;
 	ctx->expunges = expunges;
+	ctx->messages_count = mail_index_view_get_message_count(view);
 
 	*ctx_r = ctx;
 	return 0;
@@ -246,6 +248,46 @@
 	return 1;
 }
 
+static void
+mail_index_view_sync_get_rec(struct mail_index_view_sync_ctx *ctx,
+			     struct mail_index_sync_rec *rec)
+{
+	const struct mail_transaction_header *hdr = ctx->hdr;
+	const void *data = ctx->data;
+
+	switch (hdr->type & MAIL_TRANSACTION_TYPE_MASK) {
+	case MAIL_TRANSACTION_APPEND: {
+		rec->type = MAIL_INDEX_SYNC_TYPE_APPEND;
+		rec->seq1 = ctx->messages_count + 1;
+		ctx->messages_count +=
+			hdr->size / sizeof(struct mail_index_record);
+		rec->seq2 = ctx->messages_count;
+		rec->appends = NULL;
+
+		ctx->data_offset += hdr->size;
+		break;
+	}
+	case MAIL_TRANSACTION_EXPUNGE: {
+		const struct mail_transaction_expunge *exp =
+			CONST_PTR_OFFSET(data, ctx->data_offset);
+
+		ctx->data_offset += sizeof(*exp);
+                mail_index_sync_get_expunge(rec, exp);
+		break;
+	}
+	case MAIL_TRANSACTION_FLAG_UPDATE: {
+		const struct mail_transaction_flag_update *update =
+			CONST_PTR_OFFSET(data, ctx->data_offset);
+
+		ctx->data_offset += sizeof(*update);
+                mail_index_sync_get_update(rec, update);
+		break;
+	}
+	default:
+		i_unreached();
+	}
+}
+
 int mail_index_view_sync_next(struct mail_index_view_sync_ctx *ctx,
 			      struct mail_index_sync_rec *sync_rec)
 {
@@ -278,9 +320,7 @@
 		}
 	}
 
-	if (!mail_index_sync_get_rec(view, sync_rec, ctx->hdr, ctx->data,
-				     &ctx->data_offset))
-		return -1;
+	mail_index_view_sync_get_rec(ctx, sync_rec);
 	return 1;
 }
 

Index: mail-index.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-index.c,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -d -r1.119 -r1.120
--- mail-index.c	3 May 2004 14:37:49 -0000	1.119
+++ mail-index.c	9 May 2004 23:06:27 -0000	1.120
@@ -277,8 +277,10 @@
 		hdr = map->mmap_base;
                 used_size = hdr->header_size +
 			hdr->messages_count * sizeof(struct mail_index_record);
-		if (map->mmap_size >= used_size && !force)
+		if (map->mmap_size >= used_size && !force) {
+			map->records_count = hdr->messages_count;
 			return 1;
+		}
 
 		if (munmap(map->mmap_base, map->mmap_size) < 0)
 			mail_index_set_syscall_error(index, "munmap()");



More information about the dovecot-cvs mailing list