Re: [PATCH 1/3] sha1dc: update from my PR #36
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 27, 2017, 19:33 UTC
- Message-ID
- <xmqq37al1azy.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <xmqq7ezx1c31.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 29 quoted lines
> I wonder if the approach like the following might be cleaner to > extend as we find other oddball platforms. > > #undef __SHA1DC_BYTE_ORDER > #if defined(_BYTE_ORDER) > #define __SHA1DC_BYTE_ORDER _BYTE_ORDER > #elif defined(__BYTE_ORDER) > #define __SHA1DC_BYTE_ORDER __BYTE_ORDER > #elif defined(__BYTE_ORDER__)) > #define __SHA1DC_BYTE_ORDER __BYTE_ORDER__ > #endif > > #ifdef __SHA1DC_BYTE_ORDER > #undef __SHA1DC_BIG_ENDIAN > /* do the same for variations of BIG_ENDIAN constant */ > #if defined(_BIG_ENDIAN) > ... > #endif > > #if __SHA1DC_BYTE_ORDER == __SHA1DC_BIG_ENDIAN > #define SHA1DC_BIGENDIAN > #endif > #else > /* > * as the platform does not use "compare BYTE-ORDER with > * BIG_ENDIAN macro" strategy, defined-ness of BIG_ENDIAN > * may be usable as a sign that it is a big-endian box. > */ > #endif
IF the above turns out to be a good approach, it may be better to determine the __SHA1DC_BIG_ENDIAN outside #ifdef __SHA1DC_BYTE_ORDER block. That makes the resulting #if/#endif nest shallower; the last part for platforms that uses defined-ness of BIG_ENDIAN (with underscore variants) needs to know __SHA1DC_BYTE_ORDER anyway.
So in short, two preparatory blocks followed by the real thing, something along the lines of...
#undef __SHA1DC_BYTE_ORDER
/* set the above from BYTE_ORDER with underscore */ #undef __SHA1DC_BIG_ENDIAN
/* set the above from BIG_ENDIAN with underscore */ #undef SHA1DC_BIGENDIAN
#if defined(__SHA1DC_BYTE_ORDER)
# if defined(__SHA1DC_BIG_ENDIAN)
# if __SHA1DC_BYTE_ORDER == __SHA1DC_BIG_ENDIAN
# define SHA1DC_BIGENDIAN
# endif
# endif
#else/* other heuristics like processor bits here */
/*
* the platform does not compare BYTE-ORDER with BIG-ENDIAN
* so take the definedness of BIG-ENDIAN as the sign that
* the box is big endian.
*/
# if defined(__SHA1DC_BIG_ENDIAN)
# define SHA1DC_BIGENDIAN
# endif
#endif