changeset 2342:fa529dd77176 HEAD

Fixes for big endian systems.
author Timo Sirainen <tss@iki.fi>
date Tue, 20 Jul 2004 20:52:38 +0300
parents b3c0ed666757
children 52ff483dc7f7
files src/lib-index/mail-cache-decisions.c src/lib-index/mail-cache-fields.c src/lib-index/mail-cache-private.h
diffstat 3 files changed, 31 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-cache-decisions.c	Tue Jul 20 20:06:25 2004 +0300
+++ b/src/lib-index/mail-cache-decisions.c	Tue Jul 20 20:52:38 2004 +0300
@@ -93,7 +93,7 @@
 
 	if (ioloop_time - cache->fields[field].last_used > 3600*24) {
 		/* update last_used about once a day */
-		cache->fields[field].last_used = ioloop_time;
+		cache->fields[field].last_used = (uint32_t)ioloop_time;
 		cache->field_header_write_pending = TRUE;
 	}
 
--- a/src/lib-index/mail-cache-fields.c	Tue Jul 20 20:06:25 2004 +0300
+++ b/src/lib-index/mail-cache-fields.c	Tue Jul 20 20:52:38 2004 +0300
@@ -215,10 +215,8 @@
 		cache->file_field_map[i] = field.idx;
 
 		/* update last_used if it's newer than ours */
-		if ((time_t)last_used[i] > cache->fields[field.idx].last_used) {
-			cache->fields[field.idx].last_used =
-				(time_t)last_used[i];
-		}
+		if (last_used[i] > cache->fields[field.idx].last_used)
+			cache->fields[field.idx].last_used = last_used[i];
 
                 names = p + 1;
 	}
@@ -244,6 +242,28 @@
 	}
 }
 
+static void copy_to_buf_byte(struct mail_cache *cache, buffer_t *dest,
+			     size_t offset)
+{
+	const int *data;
+	unsigned int i, field;
+	uint8_t byte;
+
+	for (i = 0; i < cache->file_fields_count; i++) {
+		field = cache->file_field_map[i];
+                data = CONST_PTR_OFFSET(&cache->fields[field], offset);
+		byte = (uint8_t)*data;
+		buffer_append(dest, &byte, 1);
+	}
+	for (i = 0; i < cache->fields_count; i++) {
+		if (cache->field_file_map[i] != (uint32_t)-1)
+			continue;
+		data = CONST_PTR_OFFSET(&cache->fields[i], offset);
+		byte = (uint8_t)*data;
+		buffer_append(dest, &byte, 1);
+	}
+}
+
 int mail_cache_header_fields_update(struct mail_cache *cache)
 {
 	int locked = cache->locked;
@@ -274,9 +294,8 @@
 			  offset + MAIL_CACHE_FIELD_LAST_USED());
 	if (ret == 0) {
 		buffer_set_used_size(buffer, 0);
-		copy_to_buf(cache, buffer,
-			    offsetof(struct mail_cache_field, decision),
-			    sizeof(uint8_t));
+		copy_to_buf_byte(cache, buffer,
+				 offsetof(struct mail_cache_field, decision));
 
 		ret = pwrite_full(cache->fd, buffer_get_data(buffer, NULL),
 			sizeof(uint8_t) * cache->file_fields_count, offset +
@@ -314,10 +333,9 @@
 		    sizeof(uint32_t));
 	copy_to_buf(cache, dest, offsetof(struct mail_cache_field, field_size),
 		    sizeof(uint32_t));
-	copy_to_buf(cache, dest, offsetof(struct mail_cache_field, type),
-		    sizeof(uint8_t));
-	copy_to_buf(cache, dest, offsetof(struct mail_cache_field, decision),
-		    sizeof(uint8_t));
+	copy_to_buf_byte(cache, dest, offsetof(struct mail_cache_field, type));
+	copy_to_buf_byte(cache, dest,
+			 offsetof(struct mail_cache_field, decision));
 
 	i_assert(buffer_get_used_size(dest) == sizeof(hdr) +
 		 (sizeof(uint32_t)*2 + 2) * hdr.fields_count);
--- a/src/lib-index/mail-cache-private.h	Tue Jul 20 20:06:25 2004 +0300
+++ b/src/lib-index/mail-cache-private.h	Tue Jul 20 20:52:38 2004 +0300
@@ -108,7 +108,7 @@
 	struct mail_cache_field field;
 
 	uint32_t uid_highwater;
-	time_t last_used;
+	uint32_t last_used;
 
 	unsigned int decision_dirty:1;
 };