fwrite_le.*: refactor
This commit is contained in:
parent
7efc6b77f5
commit
9495b0a23e
@ -12,6 +12,11 @@
|
|||||||
#define DETECTED_BIG_ENDIAN 1
|
#define DETECTED_BIG_ENDIAN 1
|
||||||
#define UNSUPPORTED_ENDIANNESS -1
|
#define UNSUPPORTED_ENDIANNESS -1
|
||||||
|
|
||||||
|
#define ORDER_NATIVE_U32 0x01234567
|
||||||
|
#define ORDER_LITTLE_ENDIAN_S4 "\x67\x45\x23\x01"
|
||||||
|
#define ORDER_BIG_ENDIAN_S4 "\x01\x23\x45\x67"
|
||||||
|
#define ifeq_u32_ret(lhs, rhs, value) if (!memcmp(lhs, rhs, 4)) return value;
|
||||||
|
|
||||||
int detect_endianness(void);
|
int detect_endianness(void);
|
||||||
size_t fwrite_le(void* ptr, size_t size, size_t count, FILE* stream);
|
size_t fwrite_le(void* ptr, size_t size, size_t count, FILE* stream);
|
||||||
void reorder_le_be(
|
void reorder_le_be(
|
||||||
|
@ -1,19 +1,11 @@
|
|||||||
#include "fwrite_le.h"
|
#include "fwrite_le.h"
|
||||||
|
|
||||||
int detect_endianness(void) {
|
int detect_endianness(void) {
|
||||||
volatile uint32_t i = 0x01234567;
|
volatile uint32_t native_order_value = ORDER_NATIVE_U32;
|
||||||
uint8_t* bytes = (uint8_t*)(&i);
|
uint8_t* as_bytes = (uint8_t*)&native_order_value;
|
||||||
if (bytes[0] == 0x01 &&
|
|
||||||
bytes[1] == 0x23 &&
|
ifeq_u32_ret(as_bytes, ORDER_LITTLE_ENDIAN_S4, DETECTED_LITTLE_ENDIAN);
|
||||||
bytes[2] == 0x45 &&
|
ifeq_u32_ret(as_bytes, ORDER_BIG_ENDIAN_S4, DETECTED_BIG_ENDIAN );
|
||||||
bytes[3] == 0x67)
|
|
||||||
return DETECTED_BIG_ENDIAN;
|
|
||||||
else if (
|
|
||||||
bytes[0] == 0x67 &&
|
|
||||||
bytes[1] == 0x45 &&
|
|
||||||
bytes[2] == 0x23 &&
|
|
||||||
bytes[3] == 0x01)
|
|
||||||
return DETECTED_LITTLE_ENDIAN;
|
|
||||||
return UNSUPPORTED_ENDIANNESS;
|
return UNSUPPORTED_ENDIANNESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user