diff --git a/include/Makefile.am b/include/Makefile.am index 347f641ad..181431b71 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -14,6 +14,7 @@ nobase_include_HEADERS = \ osmocom/core/crc64gen.h \ osmocom/core/crc8gen.h \ osmocom/core/crcgen.h \ + osmocom/core/endian.h \ osmocom/core/defs.h \ osmocom/core/gsmtap.h \ osmocom/core/gsmtap_util.h \ diff --git a/include/osmocom/core/endian.h b/include/osmocom/core/endian.h new file mode 100644 index 000000000..c890fd721 --- /dev/null +++ b/include/osmocom/core/endian.h @@ -0,0 +1,38 @@ +#pragma once + +/** + * GNU and FreeBSD have various ways to express the + * endianess but none of them is similiar enough. This + * will create two defines that allows to decide on the + * endian. The following will be defined to either 0 or + * 1 at the end of the file. + * + * OSMO_IS_LITTLE_ENDIAN + * OSMO_IS_BIG_ENDIAN + * + */ + +#if defined(__FreeBSD__) +#include + #if BYTE_ORDER == LITTLE_ENDIAN + #define OSMO_IS_LITTLE_ENDIAN 1 + #define OSMO_IS_BIG_ENDIAN 0 + #elif BYTE_ORDER == BIG_ENDIAN + #define OSMO_IS_LITTLE_ENDIAN 0 + #define OSMO_IS_BIG_ENDIAN 1 + #else + #error "Unknown endian" + #endif +#else +#include + #if __BYTE_ORDER == __LITTLE_ENDIAN + #define OSMO_IS_LITTLE_ENDIAN 1 + #define OSMO_IS_BIG_ENDIAN 0 + #elif __BYTE_ORDER == __BIG_ENDIAN + #define OSMO_IS_LITTLE_ENDIAN 0 + #define OSMO_IS_BIG_ENDIAN 1 + #else + #error "Unknown endian" + #endif +#endif +