Another pack4 issue (fwd)
Dmitry Timoshkov
dmitry at baikal.ru
Thu Nov 22 04:36:24 CST 2001
"Francois Gouget" <fgouget at 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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: packing.diff
Type: application/octet-stream
Size: 13518 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-patches/attachments/20011122/417b2a97/packing.obj
More information about the wine-patches
mailing list