changeset 6921:4aa0a3a2d3f8 HEAD

Code cleanup
author Timo Sirainen <tss@iki.fi>
date Tue, 04 Dec 2007 10:49:10 +0200
parents 58cf18fc9358
children 284c22a7a92e
files src/lib-index/mail-transaction-log-file.c
diffstat 1 files changed, 52 insertions(+), 49 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-transaction-log-file.c	Mon Dec 03 19:16:10 2007 +0200
+++ b/src/lib-index/mail-transaction-log-file.c	Tue Dec 04 10:49:10 2007 +0200
@@ -1028,12 +1028,56 @@
 	buffer_free(&file->buffer);
 }
 
+static int
+mail_transaction_log_file_map_mmap(struct mail_transaction_log_file *file)
+{
+	struct stat st;
+	int ret;
+
+	/* we are going to mmap() this file, but it's not necessarily
+	   mmaped currently. */
+	i_assert(file->buffer_offset == 0 || file->mmap_base == NULL);
+	i_assert(file->mmap_size == 0 || file->mmap_base != NULL);
+
+	if (fstat(file->fd, &st) < 0) {
+		mail_index_file_set_syscall_error(file->log->index,
+						  file->filepath, "fstat()");
+		return -1;
+	}
+	file->last_size = st.st_size;
+
+	if ((uoff_t)st.st_size < file->sync_offset) {
+		mail_transaction_log_file_set_corrupted(file,
+							"file size shrank");
+		return 0;
+	}
+
+	if ((uoff_t)st.st_size == file->mmap_size) {
+		/* we already have the whole file mmaped */
+		if ((ret = mail_transaction_log_file_sync(file)) < 0)
+			return 0;
+		if (ret > 0)
+			return 1;
+		/* size changed, re-mmap */
+	}
+
+	do {
+		mail_transaction_log_file_munmap(file);
+
+		if (mail_transaction_log_file_mmap(file) < 0)
+			return -1;
+		if ((ret = mail_transaction_log_file_sync(file)) < 0)
+			return 0;
+	} while (ret == 0);
+
+	return 1;
+}
+
 int mail_transaction_log_file_map(struct mail_transaction_log_file *file,
 				  uoff_t start_offset, uoff_t end_offset)
 {
 	struct mail_index *index = file->log->index;
 	size_t size;
-	struct stat st;
 	int ret;
 
 	if (file->hdr.indexid == 0) {
@@ -1074,56 +1118,15 @@
 						  end_offset);
 	}
 
-	if (!index->mmap_disable) {
-		/* we are going to mmap() this file, but it's not necessarily
-		   mmaped currently. */
-		i_assert(file->buffer_offset == 0 || file->mmap_base == NULL);
-		i_assert(file->mmap_size == 0 || file->mmap_base != NULL);
-
-		if (fstat(file->fd, &st) < 0) {
-			mail_index_file_set_syscall_error(index, file->filepath,
-							  "fstat()");
-			return -1;
-		}
-		file->last_size = st.st_size;
-
-		if ((uoff_t)st.st_size < file->sync_offset) {
-			mail_transaction_log_file_set_corrupted(file,
-				"file size shrank");
-			return 0;
-		}
-
-		if ((uoff_t)st.st_size == file->mmap_size) {
-			/* we already have the whole file mmaped */
-			if ((ret = mail_transaction_log_file_sync(file)) < 0)
-				return 0;
-			if (ret > 0) {
-				return log_file_map_check_offsets(file,
-								  start_offset,
-								  end_offset);
-			}
-			/* size changed, re-mmap */
-		}
+	if (!index->mmap_disable)
+		ret = mail_transaction_log_file_map_mmap(file);
+	else {
+		mail_transaction_log_file_munmap(file);
+		ret = mail_transaction_log_file_read(file, start_offset, FALSE);
 	}
 
-	if (index->mmap_disable) {
-		mail_transaction_log_file_munmap(file);
-
-		ret = mail_transaction_log_file_read(file, start_offset, FALSE);
-		if (ret <= 0)
-			return ret;
-	} else {
-		do {
-			mail_transaction_log_file_munmap(file);
-
-			if (mail_transaction_log_file_mmap(file) < 0)
-				return -1;
-			if ((ret = mail_transaction_log_file_sync(file)) < 0)
-				return 0;
-		} while (ret == 0);
-	}
-
-	return log_file_map_check_offsets(file, start_offset, end_offset);
+	return ret <= 0 ? ret :
+		log_file_map_check_offsets(file, start_offset, end_offset);
 }
 
 void mail_transaction_log_file_move_to_memory(struct mail_transaction_log_file