diff --git a/BaseLib/SystemTools.h b/BaseLib/SystemTools.h index 5f775ddf4f615bb6e33246c9c8ba122da65eefc1..8939814f1fe3aa7f9ac895fdb9e5c4ac87de537e 100644 --- a/BaseLib/SystemTools.h +++ b/BaseLib/SystemTools.h @@ -19,11 +19,11 @@ namespace BaseLib /// return if this system supports little endian or not inline bool IsLittleEndian() { - int x = 0x00000001; - if (*(char*)&x) - return true; //am little - else - return false; //am big +#ifdef ENDIAN_IS_BIG + return false; +#elif ENDIAN_IS_LITTLE + return true; +#endif } } diff --git a/Tests/BaseLib/TestSystemTools.cpp b/Tests/BaseLib/TestSystemTools.cpp new file mode 100644 index 0000000000000000000000000000000000000000..16666ee91dbece3e7101d11d61314c8200c060b1 --- /dev/null +++ b/Tests/BaseLib/TestSystemTools.cpp @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2012, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + * \file TestSystemTools.cpp + * + * Created on 2012-10-30 by Norihiro Watanabe + */ + +// ** INCLUDES ** +#include "gtest.h" + +#include "SystemTools.h" + +TEST(BaseLib, EndianLittle) { + bool isLittle = false; + int x = 0x00000001; + if (*(char*)&x) + isLittle = true; //am little + + ASSERT_EQ (isLittle, BaseLib::IsLittleEndian()); +} + diff --git a/scripts/cmake/CheckTypeSizes.cmake b/scripts/cmake/CheckTypeSizes.cmake index 4d9f23b54b1e5625997e2be48ee0c893a4c081a7..e88ff9e73d1eb40254410f97e54db55483fb2c83 100644 --- a/scripts/cmake/CheckTypeSizes.cmake +++ b/scripts/cmake/CheckTypeSizes.cmake @@ -14,4 +14,16 @@ ELSE() SET( HAVE_64_BIT 1 ) ADD_DEFINITIONS(-DHAVE_64_BIT) SET( BITS 64) -ENDIF() \ No newline at end of file +ENDIF() + +# Check endian of the system +INCLUDE (TestBigEndian) +TEST_BIG_ENDIAN (IS_BIG_ENDIAN) +IF (IS_BIG_ENDIAN) + ADD_DEFINITIONS(-DENDIAN_IS_BIG) + # cannot use BIG_ENDIAN because it's reserved in Linux +ELSE () + ADD_DEFINITIONS(-DENDIAN_IS_LITTLE) + # cannot use LITTLE_ENDIAN because it's reserved in Linux +ENDIF () # IS_BIG_ENDIAN +