diff --git a/src/link.c b/src/link.c index debb669..9f3f082 100644 --- a/src/link.c +++ b/src/link.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include "util.h" #include #include diff --git a/src/link.c-e b/src/link.c-e index debb669..9f3f082 100644 --- a/src/link.c-e +++ b/src/link.c-e @@ -6,7 +6,7 @@ #include #include #include -#include +#include "util.h" #include #include diff --git a/src/util.h b/src/util.h new file mode 100644 index 0000000..693e155 --- /dev/null +++ b/src/util.h @@ -0,0 +1,43 @@ +#ifndef _UTIL_H +#define _UTIL_H + +#include +#include "config.h" + +#define bswap16(v) (((v & 0xff00) >> 8) | (v & 0x00ff) << 8) + +#define bswap32(v) \ + (((v & 0xff000000) >> 24) | \ + ((v & 0x00ff0000) >> 8) | \ + ((v & 0x0000ff00) << 8) | \ + ((v & 0x000000ff) << 24)) + +#define bswap64(v) \ + (((v & 0xff00000000000000) >> 56) | \ + ((v & 0x00ff000000000000) >> 40) | \ + ((v & 0x0000ff0000000000) >> 16) | \ + ((v & 0x000000ff00000000) >> 8) | \ + ((v & 0x00000000ff000000) << 8) | \ + ((v & 0x0000000000ff0000) << 16) | \ + ((v & 0x000000000000ff00) << 40) | \ + ((v & 0x00000000000000ff) << 64)) + +#ifndef _ENDIAN_H +#ifdef __DO_SWAP_BYTES +#define be16toh(v) ((uint16_t)bswap16((uint16_t)v)) +#define be32toh(v) ((uint32_t)bswap32((uint32_t)v)) +#define htobe16(v) ((uint16_t)bswap16((uint16_t)v)) +#define htobe32(v) ((uint32_t)bswap32((uint32_t)v)) +#define htole32(v) ((uint32_t)v) +#define htole64(v) ((uint64_t)v) +#else +#define be16toh(v) ((uint16_t)v) +#define be32toh(v) ((uint32_t)v) +#define htobe16(v) ((uint16_t)v) +#define htobe32(v) ((uint32_t)v) +#define htole32(v) ((uint32_t)bswap32((uint32_t)v)) +#define htole64(v) ((uint64_t)bswap64((uint64_t)v)) +#endif /* __DO_SWAP_BYTES */ +#endif /* !_ENDIAN_H */ + +#endif /* _UTIL_H */