--- truecrypt/common/endian.h 2018/04/24 16:42:54 1.1.1.6 +++ truecrypt/common/endian.h 2018/04/24 16:46:30 1.1.1.10 @@ -1,11 +1,15 @@ -/* 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: 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) + 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) TrueCrypt Foundation and are covered by the + TrueCrypt License 2.2 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 #ifdef _WIN32 @@ -21,26 +25,30 @@ # ifdef LINUX_DRIVER # include +# define LITTLE_ENDIAN 1234 +# define BIG_ENDIAN 4321 + # 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 +# ifndef BYTE_ORDER +# error Byte order cannot be determined - kernel source not prepared for building of modules +# endif +# else # include -# ifndef __BYTE_ORDER -# error Byte order cannot be determined (BYTE_ORDER undefined) -# endif +# ifndef BYTE_ORDER +# ifndef __BYTE_ORDER +# error Byte order cannot be determined (BYTE_ORDER undefined) +# endif -# define BYTE_ORDER __BYTE_ORDER +# define BYTE_ORDER __BYTE_ORDER +# endif # ifndef LITTLE_ENDIAN # define LITTLE_ENDIAN __LITTLE_ENDIAN @@ -49,8 +57,7 @@ # ifndef BIG_ENDIAN # define BIG_ENDIAN __BIG_ENDIAN # endif - -# endif // !LINUX_DRIVER +# endif #endif // !BYTE_ORDER @@ -103,13 +110,28 @@ ( ( 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); unsigned __int64 MirrorBytes64 (unsigned __int64 x); void LongReverse ( unsigned __int32 *buffer , unsigned byteCount ); + +#endif /* TC_ENDIAN_H */