]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Try to use (Apple) gcc's __BIG_ENDIAN__ and __LITTLE_ENDIAN__ macros if possible.
authorTimo Sirainen <tss@iki.fi>
Fri, 19 Dec 2008 06:50:14 +0000 (08:50 +0200)
committerTimo Sirainen <tss@iki.fi>
Fri, 19 Dec 2008 06:50:14 +0000 (08:50 +0200)
Based on a patch by Apple.

--HG--
branch : HEAD

configure.in
src/lib-index/mail-index-map.c
src/lib-index/mail-index.c
src/lib/sha1.c

index cd539141bb0459b1cbc0b9f99898a1e75cc92c30..0faf81387297d3c8a8cfbec6bb314552a93817ff 100644 (file)
@@ -2124,20 +2124,24 @@ AC_SUBST(DICT_LIBS)
 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
index 86e0f43b9e0f0f137c23024b6f8bdb8c32e6993f..b6c176fd553394896cd9b7d7a02c2d51afec42fe 100644 (file)
@@ -368,7 +368,7 @@ static bool mail_index_check_header_compat(struct mail_index *index,
 {
         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 @@ static void mail_index_header_init(struct mail_index *index,
        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
 
index 01cfd1530f865fa3ea256658f08d29b26f4753ce..a45e6cc5a9d2c51ef0f22c77cd2c7709ce030f5f 100644 (file)
@@ -641,7 +641,7 @@ void mail_index_reset_error(struct mail_index *index)
         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. */
index cd818668fef9798cfbd2c3a79fba14f0d75f6b48..48ef5111dd4d70f82e14c0d9e196f328b462ea53 100644 (file)
@@ -80,7 +80,7 @@ sha1_step(struct sha1_ctxt *ctxt)
        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 @@ sha1_pad(struct sha1_ctxt *ctxt)
        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 @@ sha1_result(struct sha1_ctxt *ctxt, void *digest0)
 
        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];