On Fri, Oct 04, 2013 at 09:20:03PM -0500, Eric Sandeen wrote: > While kernelspace can test #ifdef __LITTLE_ENDIAN, this > doesn't work in userspace. __LITTLE_ENDIAN is defined - > as is __BIG_ENDIAN. > > So we build on all boxes as __LITTLE_ENDIAN, and the > self-test (thankfully!) fails on big endian boxes. I'm glad I put that self test into the build now. :) > Fix this by testing __BYTE_ORDER values. > > And add an else which should never be hit, but just in case... > > Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> > --- > > diff --git a/libxfs/crc32.c b/libxfs/crc32.c > index 1c0d958..0f847d2 100644 > --- a/libxfs/crc32.c > +++ b/libxfs/crc32.c > @@ -63,18 +63,20 @@ typedef __u32 u64; > static inline u32 > crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256]) > { > -# ifdef __LITTLE_ENDIAN > +#if __BYTE_ORDER == __LITTLE_ENDIAN > # define DO_CRC(x) crc = t0[(crc ^ (x)) & 255] ^ (crc >> 8) > # define DO_CRC4 (t3[(q) & 255] ^ t2[(q >> 8) & 255] ^ \ > t1[(q >> 16) & 255] ^ t0[(q >> 24) & 255]) > # define DO_CRC8 (t7[(q) & 255] ^ t6[(q >> 8) & 255] ^ \ > t5[(q >> 16) & 255] ^ t4[(q >> 24) & 255]) > -# else > +# elif __BYTE_ORDER == __BIG_ENDIAN > # define DO_CRC(x) crc = t0[((crc >> 24) ^ (x)) & 255] ^ (crc << 8) > # define DO_CRC4 (t0[(q) & 255] ^ t1[(q >> 8) & 255] ^ \ > t2[(q >> 16) & 255] ^ t3[(q >> 24) & 255]) > # define DO_CRC8 (t4[(q) & 255] ^ t5[(q >> 8) & 255] ^ \ > t6[(q >> 16) & 255] ^ t7[(q >> 24) & 255]) > +# else > +# error What endian are you? > # endif > const u32 *b; > size_t rem_len; Looks good - it matches the other endian checks in the code. Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx> Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs