diff options
Diffstat (limited to 'resources/utilities/ich9deblob/src/common')
-rw-r--r-- | resources/utilities/ich9deblob/src/common/x86compatibility.c | 18 | ||||
-rw-r--r-- | resources/utilities/ich9deblob/src/common/x86compatibility.h | 4 |
2 files changed, 7 insertions, 15 deletions
diff --git a/resources/utilities/ich9deblob/src/common/x86compatibility.c b/resources/utilities/ich9deblob/src/common/x86compatibility.c index aaf31733..f172d9a4 100644 --- a/resources/utilities/ich9deblob/src/common/x86compatibility.c +++ b/resources/utilities/ich9deblob/src/common/x86compatibility.c @@ -48,19 +48,6 @@ int structSizesIncorrect(struct DESCRIPTORREGIONRECORD descriptorDummy, struct G return 0; } -/* endianness check. big endian forced to fail */ -int systemIsBigEndian() -{ - uint16_t steak = 0xBEEF; - uint8_t *grill = (uint8_t*)&steak; - - if (*grill!=0xEF) { - printf("\nunsigned short 0xBEEF: first byte should be EF, but it's BE. Your system is big endian, and unsupported (only little endian is tested)\n"); - return 1; - } - return 0; /* you got the good half of the steak */ -} - /* fail if members are presented in the wrong order */ int structMembersWrongOrder() { @@ -164,7 +151,10 @@ int structBitfieldWrongOrder() int systemOrCompilerIncompatible(struct DESCRIPTORREGIONRECORD descriptorStruct, struct GBEREGIONRECORD_8K gbeStruct8k) { if (structSizesIncorrect(descriptorStruct, gbeStruct8k)) return 1; - if (systemIsBigEndian()) return 1; + if (IS_BIG_ENDIAN) { + printf("big endian not supported\n"); + return 1; + } if (structBitfieldWrongOrder()) return 1; if (structMembersWrongOrder()) return 1; return 0; diff --git a/resources/utilities/ich9deblob/src/common/x86compatibility.h b/resources/utilities/ich9deblob/src/common/x86compatibility.h index e5f02bee..9460b289 100644 --- a/resources/utilities/ich9deblob/src/common/x86compatibility.h +++ b/resources/utilities/ich9deblob/src/common/x86compatibility.h @@ -28,11 +28,13 @@ #include <string.h> #include <stdint.h> +/* http://esr.ibiblio.org/?p=5095 */ +#define IS_BIG_ENDIAN (*(uint16_t *)"\0\xff" < 0x100) + #include "../descriptor/descriptor.h" /* structs describing what's in the descriptor region */ #include "../gbe/gbe.h" /* structs describing what's in the gbe region */ int structSizesIncorrect(struct DESCRIPTORREGIONRECORD descriptorDummy, struct GBEREGIONRECORD_8K gbe8kDummy); -int systemIsBigEndian(); int structMembersWrongOrder(); int structBitfieldWrongOrder(); int systemOrCompilerIncompatible(struct DESCRIPTORREGIONRECORD descriptorStruct, struct GBEREGIONRECORD_8K gbeStruct8k); |