瀏覽代碼

Improved little endian byte order detection

Including <sys/param.h> on Mac/iOS doesn't define __BYTE_ORDER so
PROTOBUF_LITTLE_ENDIAN was never being defined. This commit adds a check
for the __LITTLE_ENDIAN__ macro which is defined by clang and Apple gcc on
little endian architectures.
Kal Conley 10 年之前
父節點
當前提交
c3e928021f
共有 1 個文件被更改,包括 2 次插入1 次删除
  1. 2 1
      src/google/protobuf/io/coded_stream.h

+ 2 - 1
src/google/protobuf/io/coded_stream.h

@@ -123,7 +123,8 @@
   #endif
   #endif
 #else
 #else
   #include <sys/param.h>   // __BYTE_ORDER
   #include <sys/param.h>   // __BYTE_ORDER
-  #if defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN && \
+  #if ((defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \
+         (defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN)) && \
       !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST)
       !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST)
     #define PROTOBUF_LITTLE_ENDIAN 1
     #define PROTOBUF_LITTLE_ENDIAN 1
   #endif
   #endif