Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8572:9ec2882243a6 HEAD
Try to use (Apple) gcc's __BIG_ENDIAN__ and __LITTLE_ENDIAN__ macros if possible.
Based on a patch by Apple.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 19 Dec 2008 08:50:14 +0200 |
parents | 563e61fa7726 |
children | f9166a09423a |
files | configure.in src/lib-index/mail-index-map.c src/lib-index/mail-index.c src/lib/sha1.c |
diffstat | 4 files changed, 22 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/configure.in Fri Dec 19 07:49:08 2008 +0200 +++ b/configure.in Fri Dec 19 08:50:14 2008 +0200 @@ -2124,20 +2124,24 @@ AC_SUBST(dict_drivers) dnl ** -dnl ** Index file compatibility flags +dnl ** Endianess dnl ** -dnl * currently just checking for endianess - -AC_C_BIGENDIAN - -if test $ac_cv_c_bigendian = yes; then - flags=0 -else - flags=1 -fi - -AC_DEFINE_UNQUOTED(MAIL_INDEX_COMPAT_FLAGS, $flags, Index file compatibility flags) +dnl At least Apple's gcc supports __BIG_ENDIAN__ and __LITTLE_ENDIAN__ +dnl defines. Use them if possible to allow cross-compiling. +AC_MSG_CHECKING([if __BIG_ENDIAN__ or __LITTLE_ENDIAN__ is defined]) +AC_TRY_COMPILE([ + #if !(__BIG_ENDIAN__ || __LITTLE_ENDIAN__) + #error nope + #endif +], [ +], [ + AC_DEFINE(WORDS_BIGENDIAN, __BIG_ENDIAN__, Define if your CPU is big endian) + AC_MSG_RESULT(yes) +], [ + AC_MSG_RESULT(no) + AC_C_BIGENDIAN +]) dnl ** dnl ** IPv6 support
--- a/src/lib-index/mail-index-map.c Fri Dec 19 07:49:08 2008 +0200 +++ b/src/lib-index/mail-index-map.c Fri Dec 19 08:50:14 2008 +0200 @@ -368,7 +368,7 @@ { enum mail_index_header_compat_flags compat_flags = 0; -#ifndef WORDS_BIGENDIAN +#if !WORDS_BIGENDIAN compat_flags |= MAIL_INDEX_COMPAT_LITTLE_ENDIAN; #endif @@ -785,7 +785,7 @@ hdr->header_size = sizeof(*hdr); hdr->record_size = sizeof(struct mail_index_record); -#ifndef WORDS_BIGENDIAN +#if !WORDS_BIGENDIAN hdr->compat_flags |= MAIL_INDEX_COMPAT_LITTLE_ENDIAN; #endif
--- a/src/lib-index/mail-index.c Fri Dec 19 07:49:08 2008 +0200 +++ b/src/lib-index/mail-index.c Fri Dec 19 08:50:14 2008 +0200 @@ -641,7 +641,7 @@ index->index_lock_timeout = FALSE; } -#ifdef WORDS_BIGENDIAN +#if WORDS_BIGENDIAN /* FIXME: Unfortunately these functions were originally written to use endian-specific code and we can't avoid that without breaking backwards compatibility. When we do break it, just select one of these. */
--- a/src/lib/sha1.c Fri Dec 19 07:49:08 2008 +0200 +++ b/src/lib/sha1.c Fri Dec 19 08:50:14 2008 +0200 @@ -80,7 +80,7 @@ size_t t, s; uint32_t tmp; -#ifndef WORDS_BIGENDIAN +#if !WORDS_BIGENDIAN struct sha1_ctxt tctxt; memmove(&tctxt.m.b8[0], &ctxt->m.b8[0], 64); ctxt->m.b8[0] = tctxt.m.b8[3]; ctxt->m.b8[1] = tctxt.m.b8[2]; @@ -189,7 +189,7 @@ memset(&ctxt->m.b8[padstart], 0, padlen - 8); COUNT += (padlen - 8); COUNT %= 64; -#ifdef WORDS_BIGENDIAN +#if WORDS_BIGENDIAN PUTPAD(ctxt->c.b8[0]); PUTPAD(ctxt->c.b8[1]); PUTPAD(ctxt->c.b8[2]); PUTPAD(ctxt->c.b8[3]); PUTPAD(ctxt->c.b8[4]); PUTPAD(ctxt->c.b8[5]); @@ -235,7 +235,7 @@ digest = (uint8_t *)digest0; sha1_pad(ctxt); -#ifdef WORDS_BIGENDIAN +#if WORDS_BIGENDIAN memmove(digest, &ctxt->h.b8[0], 20); #else digest[0] = ctxt->h.b8[3]; digest[1] = ctxt->h.b8[2];