From: Konstantin Demin rockdrilla@gmail.com
Signed-off-by: Konstantin Demin rockdrilla@gmail.com --- tools/winebuild/spec32.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/tools/winebuild/spec32.c b/tools/winebuild/spec32.c index 6e4131bd910..ad9b3decff0 100644 --- a/tools/winebuild/spec32.c +++ b/tools/winebuild/spec32.c @@ -1378,9 +1378,25 @@ void make_builtin_files( struct strarray files ) fatal_error( "%s: Not enough space (%x) for Wine signature\n", files.str[i], header.e_lfanew ); write( fd, builtin_signature, sizeof(builtin_signature) );
+ /* read data from 'header' struct before it's emptied */ + unsigned int pos = header.e_lfanew + 0x5e; /* OptionalHeader.DllCharacteristics */ + + /* zero remaining space between Wine signature and PE header */ + int n, k; + n = (int) header.e_lfanew; + n -= (sizeof(header) + sizeof(builtin_signature)); + if (n > 0) + { + memset( &header, 0, sizeof(header) ); + for (k = n / sizeof(header); k; k--) + write( fd, &header, sizeof(header) ); + + if ((k = n % sizeof(header))) + write( fd, &header, k ); + } + if (prefer_native) { - unsigned int pos = header.e_lfanew + 0x5e; /* OptionalHeader.DllCharacteristics */ unsigned short dll_charact; lseek( fd, pos, SEEK_SET ); if (read( fd, &dll_charact, sizeof(dll_charact) ) == sizeof(dll_charact))