From 3806246108e8486485fcc568fa40cfad1b44c9ea Mon Sep 17 00:00:00 2001 From: mintsuki Date: Sun, 14 May 2023 05:13:09 +0200 Subject: [PATCH] host: Perform compile-time endian check if supported --- host/limine-deploy.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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]);