changeset 4281:b0ebcefc1967 HEAD

Removing and resetting keywords could have operated on wrong file's keyword list.
author Timo Sirainen <tss@iki.fi>
date Tue, 30 May 2006 11:33:20 +0300
parents 92bf418b8a60
children 7e1acaa7e76b
files src/lib-storage/index/dbox/dbox-sync.c
diffstat 1 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/dbox/dbox-sync.c	Tue May 30 11:32:24 2006 +0300
+++ b/src/lib-storage/index/dbox/dbox-sync.c	Tue May 30 11:33:20 2006 +0300
@@ -251,11 +251,15 @@
 
 static int
 dbox_sync_update_keyword(struct dbox_sync_context *ctx,
+			 const struct dbox_sync_file_entry *entry,
 			 const struct dbox_sync_rec *sync_rec, bool set)
 {
 	unsigned char keyword_array, keyword_mask = 1;
 	unsigned int file_idx, first_flag_offset;
 
+	if (dbox_file_seek(ctx->mbox, entry->file_seq, 0) <= 0)
+		return -1;
+
 	keyword_array = set ? '1' : '0';
 
 	if (!dbox_file_lookup_keyword(ctx->mbox, ctx->mbox->file,
@@ -276,12 +280,16 @@
 
 static int
 dbox_sync_reset_keyword(struct dbox_sync_context *ctx,
-			 const struct dbox_sync_rec *sync_rec)
+			const struct dbox_sync_file_entry *entry,
+			const struct dbox_sync_rec *sync_rec)
 {
 	unsigned char *keyword_array, *keyword_mask;
 	unsigned int first_flag_offset;
 	int ret;
 
+	if (dbox_file_seek(ctx->mbox, entry->file_seq, 0) <= 0)
+		return -1;
+
 	if (ctx->mbox->file->keyword_count == 0)
 		return 0;
 
@@ -380,17 +388,18 @@
 								i) < 0)
 					return -1;
 			}
-			if (dbox_sync_update_keyword(ctx, &sync_recs[i],
+			if (dbox_sync_update_keyword(ctx, entry, &sync_recs[i],
 						     TRUE) < 0)
 				return -1;
 			break;
 		case MAIL_INDEX_SYNC_TYPE_KEYWORD_REMOVE:
-			if (dbox_sync_update_keyword(ctx, &sync_recs[i],
+			if (dbox_sync_update_keyword(ctx, entry, &sync_recs[i],
 						     FALSE) < 0)
 				return -1;
 			break;
 		case MAIL_INDEX_SYNC_TYPE_KEYWORD_RESET:
-			if (dbox_sync_reset_keyword(ctx, &sync_recs[i]) < 0)
+			if (dbox_sync_reset_keyword(ctx, entry,
+						    &sync_recs[i]) < 0)
 				return -1;
 			break;
 		case MAIL_INDEX_SYNC_TYPE_APPEND: