"Francois Gouget" <fgouget@free.fr> wrote: > After the recent patch sent by Dmitry Timoshkov I checked for other > similar issues. AFAICS, at this time there is only one place where a > pack4 is really necessary. Well, I don't know why you are so sure. My testing revealed the following differences in structure sizes between Wine and Windows: ntddk.h: --- windows Thu Nov 22 08:22:34 2001 +++ wine Thu Nov 22 08:22:36 2001 @@ -1,11 +1,11 @@ sizeof(IO_STATUS_BLOCK)=8 -sizeof(KEY_BASIC_INFORMATION)=24 -sizeof(KEY_NODE_INFORMATION)=32 -sizeof(KEY_FULL_INFORMATION)=48 +sizeof(KEY_BASIC_INFORMATION)=18 +sizeof(KEY_NODE_INFORMATION)=26 +sizeof(KEY_FULL_INFORMATION)=46 sizeof(KEY_VALUE_ENTRY)=16 -sizeof(KEY_VALUE_BASIC_INFORMATION)=16 -sizeof(KEY_VALUE_FULL_INFORMATION)=24 -sizeof(KEY_VALUE_PARTIAL_INFORMATION)=16 +sizeof(KEY_VALUE_BASIC_INFORMATION)=14 +sizeof(KEY_VALUE_FULL_INFORMATION)=22 +sizeof(KEY_VALUE_PARTIAL_INFORMATION)=13 sizeof(VM_COUNTERS)=44 sizeof(PROCESS_BASIC_INFORMATION)=24 sizeof(TIME_FIELDS)=16 winbase.h: --- windows Thu Nov 22 08:22:38 2001 +++ wine Thu Nov 22 08:22:40 2001 @@ -1,9 +1,9 @@ sizeof(EXCEPTION_DEBUG_INFO)=84 sizeof(CREATE_THREAD_DEBUG_INFO)=12 -sizeof(CREATE_PROCESS_DEBUG_INFO)=40 +sizeof(CREATE_PROCESS_DEBUG_INFO)=38 sizeof(EXIT_THREAD_DEBUG_INFO)=4 sizeof(EXIT_PROCESS_DEBUG_INFO)=4 -sizeof(LOAD_DLL_DEBUG_INFO)=24 +sizeof(LOAD_DLL_DEBUG_INFO)=22 sizeof(UNLOAD_DLL_DEBUG_INFO)=4 sizeof(OUTPUT_DEBUG_STRING_INFO)=8 sizeof(RIP_INFO)=8 @@ -11,7 +11,7 @@ sizeof(OFSTRUCT)=136 sizeof(SECURITY_ATTRIBUTES)=12 sizeof(FILETIME)=8 -sizeof(WIN32_FIND_DATAA)=320 +sizeof(WIN32_FIND_DATAA)=318 sizeof(WIN32_FIND_DATAW)=592 sizeof(FINDEX_INFO_LEVELS)=4 sizeof(FINDEX_SEARCH_OPS)=4 @@ -32,7 +32,7 @@ sizeof(OSVERSIONINFOA)=148 sizeof(OSVERSIONINFOW)=276 sizeof(COMSTAT)=12 -sizeof(DCB)=28 -sizeof(COMMCONFIG)=52 -sizeof(COMMPROP)=64 +sizeof(DCB)=26 +sizeof(COMMCONFIG)=50 +sizeof(COMMPROP)=62 sizeof(COMMTIMEOUTS)=20 wingdi.h: --- windows Thu Nov 22 08:22:40 2001 +++ wine Thu Nov 22 08:22:42 2001 @@ -6,7 +6,7 @@ sizeof(CIEXYZTRIPLE)=36 sizeof(LOGCOLORSPACEA)=328 sizeof(LOGCOLORSPACEW)=588 -sizeof(PELARRAY)=20 +sizeof(PELARRAY)=17 sizeof(BITMAP)=24 sizeof(LOGBRUSH)=12 sizeof(LOGFONTA)=60 @@ -19,13 +19,13 @@ sizeof(CHARSETINFO)=32 sizeof(LOCALESIGNATURE)=32 sizeof(XFORM)=24 -sizeof(TEXTMETRICA)=56 -sizeof(TEXTMETRICW)=60 +sizeof(TEXTMETRICA)=53 +sizeof(TEXTMETRICW)=57 sizeof(PANOSE)=10 -sizeof(EXTLOGFONTA)=192 -sizeof(EXTLOGFONTW)=320 -sizeof(OUTLINETEXTMETRICA)=212 -sizeof(OUTLINETEXTMETRICW)=216 +sizeof(EXTLOGFONTA)=190 +sizeof(EXTLOGFONTW)=318 +sizeof(OUTLINETEXTMETRICA)=208 +sizeof(OUTLINETEXTMETRICW)=212 sizeof(POLYTEXTA)=40 sizeof(POLYTEXTW)=40 sizeof(NEWTEXTMETRICA)=72 @@ -54,7 +54,7 @@ sizeof(BITMAPV5HEADER)=124 sizeof(BITMAPINFO)=44 sizeof(BITMAPCOREHEADER)=12 -sizeof(BITMAPCOREINFO)=16 +sizeof(BITMAPCOREINFO)=15 sizeof(DIBSECTION)=84 sizeof(METAHEADER)=18 sizeof(METARECORD)=8 @@ -69,7 +69,7 @@ sizeof(EMRBITBLT)=100 sizeof(EMRCREATEBRUSHINDIRECT)=24 sizeof(EMRCREATECOLORSPACE)=340 -sizeof(EMRCREATECOLORSPACEW)=612 +sizeof(EMRCREATECOLORSPACEW)=609 sizeof(EMRCREATEDIBPATTERNBRUSHPT)=32 sizeof(EMRCREATEMONOBRUSH)=32 sizeof(EMRCREATEPALETTE)=20 @@ -79,24 +79,24 @@ sizeof(EMRELLIPSE)=24 sizeof(EMREOF)=20 sizeof(EMREXCLUDECLIPRECT)=24 -sizeof(EMREXTCREATEFONTINDIRECTW)=332 +sizeof(EMREXTCREATEFONTINDIRECTW)=330 sizeof(EMREXTCREATEPEN)=56 sizeof(EMREXTFLOODFILL)=24 -sizeof(EMREXTSELECTCLIPRGN)=20 +sizeof(EMREXTSELECTCLIPRGN)=17 sizeof(EMREXTTEXTOUTA)=76 sizeof(EMRFILLPATH)=24 -sizeof(EMRFILLRGN)=36 +sizeof(EMRFILLRGN)=33 sizeof(EMRFORMAT)=16 -sizeof(EMRFRAMERGN)=44 -sizeof(EMRGDICOMMENT)=16 -sizeof(EMRINVERTRGN)=32 +sizeof(EMRFRAMERGN)=41 +sizeof(EMRGDICOMMENT)=13 +sizeof(EMRINVERTRGN)=29 sizeof(EMRLINETO)=16 sizeof(EMRMASKBLT)=128 sizeof(EMRMODIFYWORLDTRANSFORM)=36 sizeof(EMROFFSETCLIPRGN)=16 sizeof(EMRPLGBLT)=140 sizeof(EMRPOLYLINE)=36 -sizeof(EMRPOLYDRAW)=40 +sizeof(EMRPOLYDRAW)=37 sizeof(EMRPOLYPOLYLINE)=44 sizeof(EMRPOLYTEXTOUTA)=80 sizeof(EMRRESIZEPALETTE)=16 @@ -118,13 +118,13 @@ sizeof(EMRSTRETCHBLT)=108 sizeof(EMRSTRETCHDIBITS)=80 sizeof(EMRPIXELFORMAT)=48 -sizeof(EMRGLSRECORD)=16 -sizeof(EMRGLSBOUNDEDRECORD)=32 +sizeof(EMRGLSRECORD)=13 +sizeof(EMRGLSBOUNDEDRECORD)=29 sizeof(DEVMODEA)=156 sizeof(DEVMODEW)=220 sizeof(DOCINFOA)=20 sizeof(DOCINFOW)=20 sizeof(RGNDATAHEADER)=32 -sizeof(RGNDATA)=36 -sizeof(DISPLAY_DEVICEA)=424 -sizeof(DISPLAY_DEVICEW)=840 +sizeof(RGNDATA)=33 +sizeof(DISPLAY_DEVICEA)=168 +sizeof(DISPLAY_DEVICEW)=328 winnt.h: --- windows Thu Nov 22 08:22:44 2001 +++ wine Thu Nov 22 08:22:46 2001 @@ -2,7 +2,7 @@ sizeof(LIST_ENTRY)=8 sizeof(SINGLE_LIST_ENTRY)=4 sizeof(FLOATING_SAVE_AREA)=112 -sizeof(CONTEXT)=716 +sizeof(CONTEXT)=204 sizeof(EXCEPTION_RECORD)=80 sizeof(EXCEPTION_POINTERS)=8 sizeof(NT_TIB)=28 @@ -23,8 +23,8 @@ sizeof(IMAGE_IMPORT_DESCRIPTOR)=20 sizeof(IMAGE_BOUND_IMPORT_DESCRIPTOR)=8 sizeof(IMAGE_BOUND_FORWARDER_REF)=8 -sizeof(IMAGE_BASE_RELOCATION)=8 -sizeof(IMAGE_RELOCATION)=10 +sizeof(IMAGE_BASE_RELOCATION)=12 +sizeof(IMAGE_RELOCATION)=12 sizeof(IMAGE_ARCHIVE_MEMBER_HEADER)=60 sizeof(IMAGE_RESOURCE_DIRECTORY)=16 sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)=8 @@ -63,7 +63,7 @@ sizeof(TOKEN_SOURCE)=16 sizeof(TOKEN_TYPE)=4 sizeof(SECURITY_IMPERSONATION_LEVEL)=4 -sizeof(SECURITY_QUALITY_OF_SERVICE)=12 +sizeof(SECURITY_QUALITY_OF_SERVICE)=13 sizeof(TOKEN_STATISTICS)=56 sizeof(ACE_HEADER)=4 sizeof(ACCESS_ALLOWED_ACE)=12 winuser.h: --- windows Thu Nov 22 08:22:46 2001 +++ wine Thu Nov 22 08:22:48 2001 @@ -30,10 +30,10 @@ sizeof(WNDCLASSW)=40 sizeof(COPYDATASTRUCT)=12 sizeof(MDINEXTMENU)=12 -sizeof(MULTIKEYHELPA)=8 -sizeof(MULTIKEYHELPW)=8 -sizeof(HELPWININFOA)=28 -sizeof(HELPWININFOW)=28 +sizeof(MULTIKEYHELPA)=4 +sizeof(MULTIKEYHELPW)=6 +sizeof(HELPWININFOA)=14 +sizeof(HELPWININFOW)=16 sizeof(WNDCLASSEXA)=48 sizeof(WNDCLASSEXW)=48 sizeof(MSG)=28 As Alexandre said, win32 headers should include "pshpack*.h" if it is really necessary only. Attached set of patches fixes all of this. Didn't test other headers yet, except commctrl.h, ntddk.h, ntdef.h, winbase.h, wingdi.h, winnt.h, winuser.h. Moreover, someone should really add #include "pshpack1.h" to all win16 headers. What is really fun, that usage of FILETIME instead of LARGE_INTEGER leads to differences in size of structures. -- Dmitry.
Attachment:
packing.diff
Description: Binary data