]> git.saurik.com Git - redis.git/commitdiff
Fix config.h endianess detection to work on Linux / PPC64.
authorantirez <antirez@gmail.com>
Tue, 11 Dec 2012 16:01:00 +0000 (17:01 +0100)
committerantirez <antirez@gmail.com>
Tue, 11 Dec 2012 16:19:58 +0000 (17:19 +0100)
Config.h performs endianess detection including OS-specific headers to
define the endianess macros, or when this is not possible, checking the
processor type via ifdefs.

Sometimes when the OS-specific macro is included, only __BYTE_ORDER is
defined, while BYTE_ORDER remains undefined. There is code at the end of
config.h endianess detection in order to define the macros without the
underscore, but it was not working correctly.

This commit fixes endianess detection fixing Redis on Linux / PPC64 and
possibly other systems.

src/config.h
src/endianconv.h

index db33407c5ffee80d0caafa65a5a9d3e8ac44cc69..b5c8284a0729dabe56be6f3290923b60ad7650fe 100644 (file)
 #endif /* BSD */
 #endif /* BYTE_ORDER */
 
-#if defined(__BYTE_ORDER) && !defined(BYTE_ORDER)
+/* Sometimes after including an OS-specific header that defines the
+ * endianess we end with __BYTE_ORDER but not with BYTE_ORDER that is what
+ * the Redis code uses. In this case let's define everything without the
+ * underscores. */
+#ifndef BYTE_ORDER
+#ifdef __BYTE_ORDER
+#if defined(__LITTLE_ENDIAN) && defined(__BIG_ENDIAN)
+#ifndef LITTLE_ENDIAN
+#define LITTLE_ENDIAN __LITTLE_ENDIAN
+#endif
+#ifndef BIG_ENDIAN
+#define BIG_ENDIAN __BIG_ENDIAN
+#endif
 #if (__BYTE_ORDER == __LITTLE_ENDIAN)
 #define BYTE_ORDER LITTLE_ENDIAN
 #else
 #define BYTE_ORDER BIG_ENDIAN
 #endif
 #endif
+#endif
+#endif
 
 #if !defined(BYTE_ORDER) || \
     (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN)
 #endif
 #endif
 
-
 #endif
index f76e0e6b3ebe6d8717b0fcda8f8a0c24bd21f13a..7afe61c62d85b30d6bffdb5f45a4d9dd79e539a6 100644 (file)
@@ -33,6 +33,7 @@
 #ifndef __ENDIANCONV_H
 #define __ENDIANCONV_H
 
+#include "config.h"
 #include <stdint.h>
 
 void memrev16(void *p);