:: commit 3806246108e8486485fcc568fa40cfad1b44c9ea

mintsuki <mintsuki@protonmail.com> — 2023-05-14 03:13

parents: fe76ce8f0b

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]);
tab: 248 wrap: offon