host: Perform compile-time endian check if supported
diff --git a/host/limine-deploy.c b/host/limine-deploy.c
index 2547d260..32809206 100644
--- a/host/limine-deploy.c
+++ b/host/limine-deploy.c
@@ -137,8 +137,6 @@ static uint32_t crc32(void *_stream, size_t len) {
return ret;
}
-static bool bigendian = false;
-
static uint16_t endswap16(uint16_t value) {
uint16_t ret = 0;
ret |= (value >> 8) & 0x00ff;
@@ -168,6 +166,20 @@ static uint64_t endswap64(uint64_t value) {
return ret;
}
+#ifdef __BYTE_ORDER__
+
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+#define bigendian true
+#else
+#define bigendian false
+#endif
+
+#else /* !__BYTE_ORDER__ */
+
+static bool bigendian = false;
+
+#endif /* !__BYTE_ORDER__ */
+
#define ENDSWAP(VALUE) (bigendian ? ( \
sizeof(VALUE) == 1 ? (VALUE) : \
sizeof(VALUE) == 2 ? endswap16(VALUE) : \
@@ -521,9 +533,11 @@ int main(int argc, char *argv[]) {
uint8_t orig_mbr[70], timestamp[6];
const char *part_ndx = NULL;
+#ifndef __BYTE_ORDER__
uint32_t endcheck = 0x12345678;
uint8_t endbyte = *((uint8_t *)&endcheck);
bigendian = endbyte == 0x12;
+#endif
if (argc < 2) {
usage(argv[0]);
