diff --git a/src/endian.h b/src/endian.h new file mode 100644 index 0000000000000000000000000000000000000000..268c0802335e8c13ac28f5488eea45e578298a18 --- /dev/null +++ b/src/endian.h @@ -0,0 +1,45 @@ +// SONIC ROBO BLAST 2 +//----------------------------------------------------------------------------- +// Copyright (C) 2014 by Sonic Team Junior. +// +// This program is free software distributed under the +// terms of the GNU General Public License, version 2. +// See the 'LICENSE' file for more details. +//----------------------------------------------------------------------------- +/// \file endian.h +/// \brief Endian detection + +#ifndef __ENDIAN__ +#define __ENDIAN__ + +#if defined(SRB2_BIG_ENDIAN) || defined(SRB2_LITTLE_ENDIAN) + // defined externally +#else + #if defined(__FreeBSD__) + // on FreeBSD, _BIG_ENDIAN is a constant to compare + // _BYTE_ORDER to, not a big-endianess flag + #include <sys/endian.h> + #if _BYTE_ORDER == _BIG_ENDIAN + #define SRB2_BIG_ENDIAN + #else + #define SRB2_LITTLE_ENDIAN + #endif + #elif defined(__BYTE_ORDER__) + // defined by at least gcc and clang + #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + #define SRB2_BIG_ENDIAN + #else + #define SRB2_LITTLE_ENDIAN + #endif + #else + // check used in vanilla SRB2 (may work incorrectly if + // _BIG_ENDIAN is used as on FreeBSD) + #if defined(_BIG_ENDIAN) + #define SRB2_BIG_ENDIAN + #else + #define SRB2_LITTLE_ENDIAN + #endif + #endif +#endif + +#endif //__ENDIAN__ diff --git a/src/m_swap.h b/src/m_swap.h index ed723dff8c3249884d002ed9a8c653d5444737fb..74e6d119e719e558472df82b3a0e4a22bbda2224 100644 --- a/src/m_swap.h +++ b/src/m_swap.h @@ -14,9 +14,11 @@ #ifndef __M_SWAP__ #define __M_SWAP__ +#include "endian.h" + // Endianess handling. // WAD files are stored little endian. -#ifdef _BIG_ENDIAN +#ifdef SRB2_BIG_ENDIAN #define SHORT(x) ((INT16)(\ (((UINT16)(x) & (UINT16)0x00ffU) << 8) \ diff --git a/src/md5.c b/src/md5.c index 73b767d65577aac0fe15ef3b6afc9b576d6af1d9..aeaac2cdee6d5421e0c8c391b0da3246351f6e31 100644 --- a/src/md5.c +++ b/src/md5.c @@ -44,14 +44,9 @@ #include "md5.h" -#ifdef _LIBC - #include <endian.h> - #if __BYTE_ORDER == __BIG_ENDIAN - #define WORDS_BIGENDIAN 1 - #endif -#endif +#include "endian.h" -#if defined (WORDS_BIGENDIAN) || defined (_BIG_ENDIAN) +#if defined (SRB2_BIG_ENDIAN) #define SWAP(n) \ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) #else