Chromium Code Reviews| Index: src/ots.cc |
| =================================================================== |
| --- src/ots.cc (revision 88) |
| +++ src/ots.cc (working copy) |
| @@ -83,10 +83,36 @@ |
| // Use a macro instead of a function because gcc 4.4.3 creates static |
| // initializers in that case. |
| -#if defined(__BIG_ENDIAN__) || defined(_BIG_ENDIAN) |
| -#define TAG(d, c, b, a) (a | (b << 8) | (c << 16) | (d << 24)) |
| -#else |
| -#define TAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) |
| +// Try endianness checks with zero, one and two leading underscores, |
|
Yusuke Sato
2012/05/01 02:23:31
The #ifdefs look too complex to me. What about rev
bashi
2012/05/01 04:05:49
Done. Thank you for suggestion!
|
| +// as the symbols actually defined seem to vary between systems. (Sigh.) |
| +#if defined(BIG_ENDIAN) && defined(LITTLE_ENDIAN) && defined(BYTE_ORDER) |
| +# if BYTE_ORDER == BIG_ENDIAN |
| +# define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d) |
| +# elif BYTE_ORDER == LITTLE_ENDIAN |
| +# define TAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) |
| +# else |
| +# error "unsupported byte order!" |
| +# endif |
| +#elif defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN) && defined(_BYTE_ORDER) |
| +# if _BYTE_ORDER == _BIG_ENDIAN |
| +# define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d) |
| +# elif _BYTE_ORDER == _LITTLE_ENDIAN |
| +# define TAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) |
| +# else |
| +# error "unsupported byte order!" |
| +# endif |
| +#elif defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) && defined(__BYTE_ORDER) |
| +# if __BYTE_ORDER == __BIG_ENDIAN |
| +# define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d) |
| +# elif __BYTE_ORDER == __LITTLE_ENDIAN |
| +# define TAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) |
| +# else |
| +# error "unsupported byte order!" |
| +# endif |
| +#elif defined(__BIG_ENDIAN__) |
| +# define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d) |
| +#else // fall back to assuming little-endian |
| +# define TAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) |
| #endif |
| const struct { |