diff options
Diffstat (limited to 'utils/bswap.h')
-rw-r--r-- | utils/bswap.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/utils/bswap.h b/utils/bswap.h new file mode 100644 index 000000000..1742d2507 --- /dev/null +++ b/utils/bswap.h @@ -0,0 +1,54 @@ +#ifndef _BSWAP_H +#define _BSWAP_H 1 + +#if !defined(__BYTE_ORDER) && defined(BYTE_ORDER) +# define __BYTE_ORDER = BYTE_ORDER +#endif + +#ifndef __BYTE_ORDER +#ifdef __linux__ +#include <endian.h> +#else +#define __LITTLE_ENDIAN 1234 /* least-significant byte first (vax, pc) */ +#define __BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ +#define __PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp) */ + +#if defined(sun386) || defined(i386) +#define __BYTE_ORDER __LITTLE_ENDIAN +#endif + +#if defined(sparc) +#define __BYTE_ORDER __BIG_ENDIAN +#endif + +#endif /* __linux__ */ +#endif /* __BYTE_ORDER */ + + +#ifndef __BYTE_ORDER +# error "Undefined __BYTE_ORDER" +#endif + +#ifdef __linux__ +#include <byteswap.h> +#else +#include <string.h> +static __inline__ uint32_t bswap_32(uint32_t x) + { + uint32_t res; + + swab((void*)&x, (void*)&res, sizeof(uint32_t)); + + return res; + } + +static __inline__ uint16_t bswap_16(uint16_t x) + { + uint16_t res; + + swab((void*)&x, (void*)&res, sizeof(uint16_t)); + return res; + } +#endif + +#endif |