From 040e428e08eedabed3994941a1b098a56827ca1d Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Thu, 2 Jul 2009 17:53:52 +0000 Subject: Remove dependency on a library providing ntohl/htonl. svn path=/trunk/libparserutils/; revision=8267 --- src/utils/endian.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/utils/endian.h (limited to 'src/utils/endian.h') diff --git a/src/utils/endian.h b/src/utils/endian.h new file mode 100644 index 0000000..6dc36a0 --- /dev/null +++ b/src/utils/endian.h @@ -0,0 +1,40 @@ +/* + * This file is part of LibParserUtils. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2009 John-Mark Bell + */ + +#ifndef parserutils_endian_h_ +#define parserutils_endian_h_ + +static inline bool endian_host_is_le(void) +{ + uint32_t magic = 0x01020304; + + return (((uint8_t *) &magic)[0] == 0x04); +} + +static inline uint32_t endian_swap(uint32_t val) +{ + return ((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | + ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24); +} + +static inline uint32_t endian_host_to_big(uint32_t host) +{ + if (endian_host_is_le()) + return endian_swap(host); + + return host; +} + +static inline uint32_t endian_big_to_host(uint32_t big) +{ + if (endian_host_is_le()) + return endian_swap(big); + + return big; +} + +#endif -- cgit v1.2.3