From: Timo Sirainen Date: Tue, 20 Jul 2004 17:52:38 +0000 (+0300) Subject: Fixes for big endian systems. X-Git-Tag: 1.1.alpha1~3764 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e96fb85799dc95603bb1a6b4d3685df2d042a2f8;p=thirdparty%2Fdovecot%2Fcore.git Fixes for big endian systems. --HG-- branch : HEAD --- diff --git a/src/lib-index/mail-cache-decisions.c b/src/lib-index/mail-cache-decisions.c index be4fbe05f0..53e9ea71ab 100644 --- a/src/lib-index/mail-cache-decisions.c +++ b/src/lib-index/mail-cache-decisions.c @@ -93,7 +93,7 @@ void mail_cache_decision_lookup(struct mail_cache_view *view, uint32_t seq, 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; } diff --git a/src/lib-index/mail-cache-fields.c b/src/lib-index/mail-cache-fields.c index 6a94071c87..57482a5e29 100644 --- a/src/lib-index/mail-cache-fields.c +++ b/src/lib-index/mail-cache-fields.c @@ -215,10 +215,8 @@ int mail_cache_header_fields_read(struct mail_cache *cache) 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(struct mail_cache *cache, buffer_t *dest, } } +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 @@ int mail_cache_header_fields_update(struct mail_cache *cache) 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 @@ void mail_cache_header_fields_get(struct mail_cache *cache, buffer_t *dest) 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); diff --git a/src/lib-index/mail-cache-private.h b/src/lib-index/mail-cache-private.h index 38cfc781b3..9ea833a0f2 100644 --- a/src/lib-index/mail-cache-private.h +++ b/src/lib-index/mail-cache-private.h @@ -108,7 +108,7 @@ struct mail_cache_field_private { struct mail_cache_field field; uint32_t uid_highwater; - time_t last_used; + uint32_t last_used; unsigned int decision_dirty:1; };