genidl: Fix detecting of 32-bit and 64-bit PE binaries
Whether PE binary is 32-bit or 64-bit depends on OptionalHeader's Magic
which is 0x10b for 32-bit and 0x20b for 64-bit.
SizeOfOptionalHeader is not constant, it has just minimal value.
Signed-off-by: Martin Storsjö <martin@martin.st>
diff --git a/mingw-w64-tools/genidl/src/genidl_readpe.c b/mingw-w64-tools/genidl/src/genidl_readpe.c
index 3494e56..1bdf8ae 100644
--- a/mingw-w64-tools/genidl/src/genidl_readpe.c
+++ b/mingw-w64-tools/genidl/src/genidl_readpe.c
@@ -230,9 +230,9 @@
return 0;
if (img.hdr32.Signature != 0x4550)
return 0;
- if (img.hdr32.FileHeader.SizeOfOptionalHeader == IMG_SIZEOF_NT_OPTIONAL32_HEADER)
+ if (img.hdr32.OptionalHeader.Magic == 0x10b)
*be64 = 0;
- else if (img.hdr32.FileHeader.SizeOfOptionalHeader == IMG_SIZEOF_NT_OPTIONAL64_HEADER)
+ else if (img.hdr64.OptionalHeader.Magic == 0x20b)
*be64 = 1;
else
return 0;
diff --git a/mingw-w64-tools/genidl/src/genidl_readpe.h b/mingw-w64-tools/genidl/src/genidl_readpe.h
index bdde368..81c2554 100644
--- a/mingw-w64-tools/genidl/src/genidl_readpe.h
+++ b/mingw-w64-tools/genidl/src/genidl_readpe.h
@@ -146,9 +146,6 @@
uint16_t Characteristics; /**< Object/Image attribute flags */
} sImgFileHeader;
-#define IMG_SIZEOF_NT_OPTIONAL32_HEADER 224
-#define IMG_SIZEOF_NT_OPTIONAL64_HEADER 240
-
/**
* PE32+ Headers structure layout on disk
*/