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