Fix config.h endianess detection to work on Linux / PPC64.
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.
This commit is contained in:
parent
bf0852e5ed
commit
705874e31d
17
src/config.h
17
src/config.h
@ -139,13 +139,27 @@
|
|||||||
#endif /* BSD */
|
#endif /* BSD */
|
||||||
#endif /* BYTE_ORDER */
|
#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)
|
#if (__BYTE_ORDER == __LITTLE_ENDIAN)
|
||||||
#define BYTE_ORDER LITTLE_ENDIAN
|
#define BYTE_ORDER LITTLE_ENDIAN
|
||||||
#else
|
#else
|
||||||
#define BYTE_ORDER BIG_ENDIAN
|
#define BYTE_ORDER BIG_ENDIAN
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(BYTE_ORDER) || \
|
#if !defined(BYTE_ORDER) || \
|
||||||
(BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN)
|
(BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN)
|
||||||
@ -164,5 +178,4 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#ifndef __ENDIANCONV_H
|
#ifndef __ENDIANCONV_H
|
||||||
#define __ENDIANCONV_H
|
#define __ENDIANCONV_H
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
void memrev16(void *p);
|
void memrev16(void *p);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user