diff options
Diffstat (limited to 'ldso/util/bswap.h')
-rw-r--r-- | ldso/util/bswap.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/ldso/util/bswap.h b/ldso/util/bswap.h new file mode 100644 index 000000000..71867885e --- /dev/null +++ b/ldso/util/bswap.h @@ -0,0 +1,56 @@ +#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)); + printf ("bswap_32: %x > %x\n",x,res); + + return res; + } + +static __inline__ uint16_t bswap_16(uint16_t x) + { + uint16_t res; + + swab((void*)&x, (void*)&res, sizeof(uint16_t)); + printf ("bswap_32: %x > %x\n",x,res); + return res; + } +#endif + +#endif |