changeset 1858:f59f0c50f018 HEAD

fixes
author Timo Sirainen <tss@iki.fi>
date Wed, 29 Oct 2003 17:45:41 +0200
parents 34bdf8beb23a
children 8636c61b3b5a
files src/lib-index/mbox/mbox-sync-full.c src/lib-index/mbox/mbox-sync.c
diffstat 2 files changed, 19 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mbox/mbox-sync-full.c	Wed Oct 29 17:31:45 2003 +0200
+++ b/src/lib-index/mbox/mbox-sync-full.c	Wed Oct 29 17:45:41 2003 +0200
@@ -84,7 +84,7 @@
 	uoff_t hdr_size, body_size;
 	unsigned char current_digest[16];
 	unsigned int first_seq, last_seq;
-	int hdr_size_fixed;
+	int ret, hdr_size_fixed;
 
 	*next_rec = NULL;
 
@@ -94,10 +94,10 @@
 
 	first_rec = last_rec = NULL;
 	first_seq = last_seq = 0;
-	hdr_size = 0; body_offset = 0; hdr_size_fixed = FALSE;
+	ret = 0; hdr_size = 0; body_offset = 0; hdr_size_fixed = FALSE;
 	do {
 		if (!mbox_mail_get_location(index, rec, &offset, &body_size))
-			return FALSE;
+			return -1;
 
 		i_stream_seek(input, header_offset);
 
@@ -123,7 +123,7 @@
 				if (!mbox_check_uidvalidity(index,
 							    ctx.uid_validity)) {
 					/* uidvalidity changed, abort */
-					return FALSE;
+					return -1;
 				}
 
 				if (ctx.uid_last >= index->header->next_uid) {
@@ -149,7 +149,7 @@
 				if (!index->update_flags(index, rec, *seq,
 							 MODIFY_REPLACE,
 							 ctx.flags, TRUE))
-					return FALSE;
+					return -1;
 			} else if (rec->msg_flags == ctx.flags) {
 				/* flags are same, it's not dirty anymore */
 				index_flags &= ~MAIL_INDEX_FLAG_DIRTY;
@@ -163,8 +163,9 @@
 			if (offset != header_offset) {
 				if (!mail_cache_update_location_offset(
 					index->cache, rec, header_offset))
-					return FALSE;
+					return -1;
 			}
+			ret = 1;
 			break;
 		}
 
@@ -185,13 +186,13 @@
 	} else {
 		if (!index->expunge(index, first_rec, last_rec,
 				    first_seq, last_seq, TRUE))
-			return FALSE;
+			return -1;
 
 		*seq = first_seq + 1;
 		*next_rec = index->lookup(index, *seq);
 	}
 
-	return TRUE;
+	return ret;
 }
 
 static int mbox_sync_from_stream(struct mail_index *index,
@@ -202,7 +203,7 @@
 	const unsigned char *data;
 	size_t size;
 	unsigned int seq;
-	int dirty;
+	int dirty, ret;
 
 	if (mail_cache_lock(index->cache, FALSE) <= 0)
 		return FALSE;
@@ -250,10 +251,11 @@
 		if (input->v_offset == input->v_size)
 			break;
 
-		if (!match_next_record(index, rec, &seq, input, &rec, &dirty))
+		ret = match_next_record(index, rec, &seq, input, &rec, &dirty);
+		if (ret < 0)
 			return FALSE;
 
-		if (rec == NULL) {
+		if (ret == 0) {
 			/* Get back to line before From */
 			i_stream_seek(input, from_offset);
 		}
--- a/src/lib-index/mbox/mbox-sync.c	Wed Oct 29 17:31:45 2003 +0200
+++ b/src/lib-index/mbox/mbox-sync.c	Wed Oct 29 17:45:41 2003 +0200
@@ -38,7 +38,6 @@
 		    enum mail_lock_type data_lock_type, int *changes)
 {
 	struct stat st;
-	uoff_t filesize;
 	int count, fd;
 
 	if (index->mailbox_readonly && data_lock_type == MAIL_LOCK_EXCLUSIVE) {
@@ -72,7 +71,6 @@
 		else if (errno != EEXIST)
 			return mbox_set_syscall_error(index, "open()");
 	}
-	filesize = st.st_size;
 
 	if (index->mbox_fd != -1 &&
 	    (index->mbox_ino != st.st_ino ||
@@ -86,7 +84,8 @@
                 mbox_file_close_fd(index);
 	}
 
-	if (index->sync_stamp != st.st_mtime || index->sync_size != filesize) {
+	if (index->sync_stamp != st.st_mtime ||
+	    index->sync_size != (uoff_t)st.st_size) {
 		mbox_file_close_stream(index);
 
 		if (changes != NULL)
@@ -101,8 +100,11 @@
 				return FALSE;
 		}
 
+		if (fstat(index->mbox_fd, &st) < 0)
+			return mbox_set_syscall_error(index, "fstat()");
+
 		index->sync_stamp = st.st_mtime;
-		index->sync_size = filesize;
+		index->sync_size = st.st_size;
 	}
 
 	/* we need some index lock to be able to lock mbox */