* Junio C Hamano <gits...@pobox.com> [170627 13:38]:
> "Liam R. Howlett" <liam.howl...@oracle.com> writes:
> 
> > How about:
> >
> > ---- 8< ----
> > diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c
> > index facea1bb5..ed8c63f2d 100644
> > --- a/sha1dc/sha1.c
> > +++ b/sha1dc/sha1.c
> > @@ -38,9 +38,18 @@
> >  
> >  #if (defined(_BYTE_ORDER) || defined(__BYTE_ORDER) || 
> > defined(__BYTE_ORDER__))
> >  
> > +#define EMPTY_VAL(x) x ## 1
> > +#define EMPTY(x) EMPTY_VAL(x)
> > +
> > +#if (defined(_BIG_ENDIAN) && (EMPTY(_BIG_ENDIAN) == 1))
> > +#undef _BIG_ENDIAN
> > +#define _BIG_ENDIAN 4321
> > +#endif
> 
> I'd say it is a bad idea to define a symbol that you _know_ a
> platform header file defines.  Any header you may include from the
> platform after these lines still expects the symbol to be defined in
> a way it defines without getting molested and will misbehave.

Okay.  Thanks.  I thought a c file would be safe, especially after the
includes but there is indeed a possible include (ifdef'ed) later.

This compressed logic is causing a lot of issues.  Could we just rewrite
it as a whole lot of #if/#else, statements to avoid running across the
issue where the precompiler does not short-circuit the checks?  Would
this cause any other issues?

Alternatively, we can replace the undef/define with the define of
SHA1DC_BIGENDIAN and make this an #if/#else..

A third option is to compile a small test and just -DSHA1DC_BIGENDIAN in
the Makefile.

Cheers,
Liam

Reply via email to