aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-02-05 12:23:10 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2018-02-05 12:26:28 +0100
commitd99954e0376d50c31f052cd6455e8665d9d9dd66 (patch)
treed022ca435d3e1a7e772cc2eb241f44ea3f37e50b
parentkeygen-html: fix up copyright (diff)
downloadwireguard-monolithic-historical-d99954e0376d50c31f052cd6455e8665d9d9dd66.tar.xz
wireguard-monolithic-historical-d99954e0376d50c31f052cd6455e8665d9d9dd66.zip
tools: endian.h is not portable
-rw-r--r--src/tools/curve25519.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/tools/curve25519.c b/src/tools/curve25519.c
index 901becd..664cd80 100644
--- a/src/tools/curve25519.c
+++ b/src/tools/curve25519.c
@@ -7,7 +7,6 @@
#include <stdint.h>
#include <string.h>
-#include <endian.h>
typedef uint64_t u64;
typedef uint32_t u32;
@@ -15,9 +14,15 @@ typedef uint8_t u8;
typedef int64_t s64;
typedef u64 __le64;
typedef u32 __le32;
-#define le64_to_cpup(a) le64toh(*(a));
-#define le32_to_cpup(a) le32toh(*(a));
-#define cpu_to_le64(a) htole64(a);
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+#define le64_to_cpup(a) __builtin_bswap64(*(a))
+#define le32_to_cpup(a) __builtin_bswap32(*(a))
+#define cpu_to_le64(a) __builtin_bswap64(a)
+#else
+#define le64_to_cpup(a) (*(a))
+#define le32_to_cpup(a) (*(a))
+#define cpu_to_le64(a) (a)
+#endif
#ifndef __always_inline
#define __always_inline __inline __attribute__((__always_inline__))
#endif