--- truecrypt/common/endian.h 2018/04/24 16:42:54 1.1.1.6 +++ truecrypt/common/endian.h 2018/04/24 16:53:51 1.1.1.14 @@ -1,11 +1,21 @@ -/* Legal Notice: The source code contained in this file has been derived from - the source code of Encryption for the Masses 2.02a, which is Copyright (c) - 1998-99 Paul Le Roux and which is covered by the 'License Agreement for - Encryption for the Masses'. Modifications and additions to that source code - contained in this file are Copyright (c) 2004-2005 TrueCrypt Foundation and - Copyright (c) 2004 TrueCrypt Team, and are covered by TrueCrypt License 2.0 - the full text of which is contained in the file License.txt included in - TrueCrypt binary and source code distribution archives. */ +/* + Legal Notice: Some portions of the source code contained in this file were + derived from the source code of Encryption for the Masses 2.02a, which is + Copyright (c) 1998-2000 Paul Le Roux and which is governed by the 'License + Agreement for Encryption for the Masses'. Modifications and additions to + the original source code (contained in this file) and all other portions of + this file are Copyright (c) 2003-2008 TrueCrypt Foundation and are governed + by the TrueCrypt License 2.5 the full text of which is contained in the + file License.txt included in TrueCrypt binary and source code distribution + packages. */ + +#ifndef TC_ENDIAN_H +#define TC_ENDIAN_H + +#if defined(__cplusplus) +extern "C" +{ +#endif #ifdef _WIN32 @@ -18,39 +28,29 @@ #elif !defined(BYTE_ORDER) -# ifdef LINUX_DRIVER -# include - -# ifdef __LITTLE_ENDIAN -# undef LITTLE_ENDIAN -# define LITTLE_ENDIAN 1234 -# define BYTE_ORDER LITTLE_ENDIAN -# endif - -# ifdef __BIG_ENDIAN -# undef BIG_ENDIAN -# define BIG_ENDIAN 4321 -# define BYTE_ORDER BIG_ENDIAN -# endif - -# else // LINUX_DRIVER +# ifdef TC_MACOSX +# include +# elif defined (TC_BSD) +# include +# else # include +# endif +# ifndef BYTE_ORDER # ifndef __BYTE_ORDER # error Byte order cannot be determined (BYTE_ORDER undefined) # endif # define BYTE_ORDER __BYTE_ORDER +# endif -# ifndef LITTLE_ENDIAN -# define LITTLE_ENDIAN __LITTLE_ENDIAN -# endif - -# ifndef BIG_ENDIAN -# define BIG_ENDIAN __BIG_ENDIAN -# endif +# ifndef LITTLE_ENDIAN +# define LITTLE_ENDIAN __LITTLE_ENDIAN +# endif -# endif // !LINUX_DRIVER +# ifndef BIG_ENDIAN +# define BIG_ENDIAN __BIG_ENDIAN +# endif #endif // !BYTE_ORDER @@ -103,13 +103,34 @@ ( ( unsigned char ) *memPtr++ ) #if BYTE_ORDER == BIG_ENDIAN +# define LE16(x) MirrorBytes16(x) # define LE32(x) MirrorBytes32(x) # define LE64(x) MirrorBytes64(x) #else +# define LE16(x) (x) # define LE32(x) (x) # define LE64(x) (x) #endif +#if BYTE_ORDER == LITTLE_ENDIAN +# define BE16(x) MirrorBytes16(x) +# define BE32(x) MirrorBytes32(x) +# define BE64(x) MirrorBytes64(x) +#else +# define BE16(x) (x) +# define BE32(x) (x) +# define BE64(x) (x) +#endif + +unsigned __int16 MirrorBytes16 (unsigned __int16 x); unsigned __int32 MirrorBytes32 (unsigned __int32 x); +#ifndef TC_NO_COMPILER_INT64 unsigned __int64 MirrorBytes64 (unsigned __int64 x); +#endif void LongReverse ( unsigned __int32 *buffer , unsigned byteCount ); + +#if defined(__cplusplus) +} +#endif + +#endif /* TC_ENDIAN_H */