From 7da7ae71d24c6b22f49c56d37c4dc9e8957cb7f9 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Fri, 3 Aug 2018 10:08:24 +1000 Subject: [PATCH] Added ml-patches patchset Patches directly from the mailing list with second sign-off if supplied. --- patches/Compiler_Warnings/definition | 1 + ...sOldCaps-correctly-in-ddraw7_GetCaps.patch | 31 +- ...oveFile-source-source-should-succeed.patch | 22 +- ...e-should-make-sure-that-it-has-the-d.patch | 34 +- .../0001-wined3d-Fix-WINED3D_MCS_COLOR2.patch | 75 + ...ests-Add-a-test-for-D3DMCS_COLOR-1-2.patch | 145 ++ ...ests-Add-a-test-for-D3DMCS_COLOR-1-2.patch | 144 ++ ...ests-Add-a-test-for-D3DMCS_COLOR-1-2.patch | 172 +++ ...-calculate-angle-between-vectors-wit.patch | 33 + ...oad-all-devices-before-unloading-a-m.patch | 155 ++ .../0007-wine.inf-Add-Sources-key.patch | 26 + ...ow-to-disable-MIME-type-associations.patch | 200 +++ ...ms-win-devices-config-l1-1-0-Add-dll.patch | 114 ++ ...tUniversalNameW-return-required-size.patch | 50 + ...delimiter-handling-in-basic_istream-.patch | 43 + ...ulate-sti-cli-instructions-on-x86_64.patch | 33 + ...ot-report-HID-report-read-errors-unc.patch | 198 +++ ...nctions-to-avoid-conflicts-with-nati.patch | 1365 +++++++++++++++++ ...h-in-waveOutOpen-when-nSamplesPerSec.patch | 65 + ...que-names-for-32-and-64-bit-custom-a.patch | 63 + ...e-driver-vkGetInstanceProcAddr-via-w.patch | 62 + ...ICD-and-thunking-functions-as-privat.patch | 425 +++++ ...ible-to-query-IUnknown-from-IWMPCont.patch | 67 + ...egmentdata-3-on-Mac-OS-to-find-the-e.patch | 91 ++ ...mpiler-Make-types-array-static-const.patch | 26 + ...ironment-variable-PUBLIC-on-the-proc.patch | 38 + ...32_NetworkAdapterConfiguration-IPAdd.patch | 90 ++ ...32_NetworkAdapterConfiguration-IPSub.patch | 118 ++ ...port-for-MOVEFILE_WRITE_THROUGH-to-M.patch | 50 + ...rt-for-FILE_WRITE_THROUGH-to-create_.patch | 30 + ...port-for-FILE_FLAG_WRITE_THROUGH-to-.patch | 27 + ...s-when-parsing-the-folders-in-the-PA.patch | 113 ++ patches/patchinstall.sh | 91 +- ...ecurity-attributes-from-parent-direc.patch | 30 +- ...-make-sure-RVA-matches-between-fake-.patch | 24 +- ...me-file-alignment-for-fake-and-built.patch | 16 +- ...ebuild-Add-syscall-thunks-for-64-bit.patch | 49 +- ...Create-desktop-shortcuts-with-absolu.patch | 19 +- 38 files changed, 4221 insertions(+), 114 deletions(-) create mode 100644 patches/ml-patches/0001-wined3d-Fix-WINED3D_MCS_COLOR2.patch create mode 100644 patches/ml-patches/0002-d3d9-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch create mode 100644 patches/ml-patches/0003-d3d8-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch create mode 100644 patches/ml-patches/0004-ddraw-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch create mode 100644 patches/ml-patches/0005-dsound-Correctly-calculate-angle-between-vectors-wit.patch create mode 100644 patches/ml-patches/0006-hidclass.sys-Unload-all-devices-before-unloading-a-m.patch create mode 100644 patches/ml-patches/0007-wine.inf-Add-Sources-key.patch create mode 100644 patches/ml-patches/0008-programs-Allow-to-disable-MIME-type-associations.patch create mode 100644 patches/ml-patches/0009-api-ms-win-devices-config-l1-1-0-Add-dll.patch create mode 100644 patches/ml-patches/0010-wnet-Make-WNetGetUniversalNameW-return-required-size.patch create mode 100644 patches/ml-patches/0011-msvcp90-Fix-EOF-delimiter-handling-in-basic_istream-.patch create mode 100644 patches/ml-patches/0012-ntoskrnl-Emulate-sti-cli-instructions-on-x86_64.patch create mode 100644 patches/ml-patches/0013-winebus.sys-Do-not-report-HID-report-read-errors-unc.patch create mode 100644 patches/ml-patches/0014-odbc32-Rename-functions-to-avoid-conflicts-with-nati.patch create mode 100644 patches/ml-patches/0015-winmm-Don-t-crash-in-waveOutOpen-when-nSamplesPerSec.patch create mode 100644 patches/ml-patches/0016-msi-Generate-unique-names-for-32-and-64-bit-custom-a.patch create mode 100644 patches/ml-patches/0017-winevulkan-Expose-driver-vkGetInstanceProcAddr-via-w.patch create mode 100644 patches/ml-patches/0018-winevulkan-Mark-ICD-and-thunking-functions-as-privat.patch create mode 100644 patches/ml-patches/0019-wmp-Make-it-possible-to-query-IUnknown-from-IWMPCont.patch create mode 100644 patches/ml-patches/0020-libwine-Use-getsegmentdata-3-on-Mac-OS-to-find-the-e.patch create mode 100644 patches/ml-patches/0021-d3dcompiler-Make-types-array-static-const.patch create mode 100644 patches/ml-patches/0022-kernel32-Set-environment-variable-PUBLIC-on-the-proc.patch create mode 100644 patches/ml-patches/0023-wbemprox-Add-Win32_NetworkAdapterConfiguration-IPAdd.patch create mode 100644 patches/ml-patches/0024-wbemprox-Add-Win32_NetworkAdapterConfiguration-IPSub.patch create mode 100644 patches/ml-patches/0025-kernel32-Add-support-for-MOVEFILE_WRITE_THROUGH-to-M.patch create mode 100644 patches/ml-patches/0026-server-Add-support-for-FILE_WRITE_THROUGH-to-create_.patch create mode 100644 patches/ml-patches/0027-kernel32-Add-support-for-FILE_FLAG_WRITE_THROUGH-to-.patch create mode 100644 patches/ml-patches/0028-cmd-Handle-quotes-when-parsing-the-folders-in-the-PA.patch diff --git a/patches/Compiler_Warnings/definition b/patches/Compiler_Warnings/definition index e5586d19..34c12e5c 100644 --- a/patches/Compiler_Warnings/definition +++ b/patches/Compiler_Warnings/definition @@ -1 +1,2 @@ Depends: ml-array_size +Depends: ml-patches diff --git a/patches/ddraw-Device_Caps/0003-ddraw-Set-ddsOldCaps-correctly-in-ddraw7_GetCaps.patch b/patches/ddraw-Device_Caps/0003-ddraw-Set-ddsOldCaps-correctly-in-ddraw7_GetCaps.patch index 55a41583..93d8ed1e 100644 --- a/patches/ddraw-Device_Caps/0003-ddraw-Set-ddsOldCaps-correctly-in-ddraw7_GetCaps.patch +++ b/patches/ddraw-Device_Caps/0003-ddraw-Set-ddsOldCaps-correctly-in-ddraw7_GetCaps.patch @@ -1,4 +1,4 @@ -From 5353d54df3ddf2f7bb62ea0214e040aa391b596f Mon Sep 17 00:00:00 2001 +From 07d42b7a75491947866e6edb9d7746ca35274238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Fri, 4 Mar 2016 22:22:42 +0100 Subject: [PATCH] ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps. @@ -12,7 +12,7 @@ Subject: [PATCH] ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps. 5 files changed, 106 insertions(+) diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c -index 33e18b8d6ab..2628b7654f4 100644 +index ed90478..47f079f 100644 --- a/dlls/ddraw/ddraw.c +++ b/dlls/ddraw/ddraw.c @@ -1542,6 +1542,8 @@ static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DD @@ -25,10 +25,10 @@ index 33e18b8d6ab..2628b7654f4 100644 if(DriverCaps) diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c -index fb0858f253b..b7becc389cb 100644 +index c767d3a..70d4b8f 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c -@@ -11415,6 +11415,31 @@ static void test_execute_data(void) +@@ -11411,6 +11411,31 @@ static void test_execute_data(void) DestroyWindow(window); } @@ -60,7 +60,7 @@ index fb0858f253b..b7becc389cb 100644 static void test_viewport(void) { static struct -@@ -11690,6 +11715,7 @@ START_TEST(ddraw1) +@@ -11686,6 +11711,7 @@ START_TEST(ddraw1) test_depth_readback(); test_clear(); test_enum_surfaces(); @@ -69,10 +69,10 @@ index fb0858f253b..b7becc389cb 100644 test_viewport(); } diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c -index c2b438cf2ae..61857991f8f 100644 +index 794f90b..9c6055e 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c -@@ -12677,6 +12677,31 @@ static void test_enum_surfaces(void) +@@ -12673,6 +12673,31 @@ static void test_enum_surfaces(void) IDirectDraw2_Release(ddraw); } @@ -104,7 +104,7 @@ index c2b438cf2ae..61857991f8f 100644 static void test_viewport(void) { static struct -@@ -12981,5 +13006,6 @@ START_TEST(ddraw2) +@@ -12977,5 +13002,6 @@ START_TEST(ddraw2) test_depth_readback(); test_clear(); test_enum_surfaces(); @@ -112,10 +112,10 @@ index c2b438cf2ae..61857991f8f 100644 test_viewport(); } diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c -index 9c4c5a3e5b2..6eebcb30311 100644 +index 172d99d..c036a6d 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c -@@ -14957,6 +14957,31 @@ static void test_viewport(void) +@@ -14953,6 +14953,31 @@ static void test_viewport(void) DestroyWindow(window); } @@ -147,17 +147,17 @@ index 9c4c5a3e5b2..6eebcb30311 100644 START_TEST(ddraw4) { DDDEVICEIDENTIFIER identifier; -@@ -15082,4 +15107,5 @@ START_TEST(ddraw4) +@@ -15078,4 +15103,5 @@ START_TEST(ddraw4) test_clear(); test_enum_surfaces(); test_viewport(); + test_caps(); } diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c -index b4910c196cd..bf1e1cf1207 100644 +index 7cbf408..095212b 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c -@@ -14289,6 +14289,31 @@ static void test_viewport(void) +@@ -14417,6 +14417,31 @@ static void test_color_vertex(void) DestroyWindow(window); } @@ -189,12 +189,13 @@ index b4910c196cd..bf1e1cf1207 100644 START_TEST(ddraw7) { DDDEVICEIDENTIFIER2 identifier; -@@ -14424,4 +14449,5 @@ START_TEST(ddraw7) +@@ -14552,5 +14577,6 @@ START_TEST(ddraw7) test_clear(); test_enum_surfaces(); test_viewport(); + test_caps(); + test_color_vertex(); } -- -2.17.0 +1.9.1 diff --git a/patches/kernel32-MoveFile/0004-kernel32-MoveFile-source-source-should-succeed.patch b/patches/kernel32-MoveFile/0004-kernel32-MoveFile-source-source-should-succeed.patch index c0838610..d319d3d2 100644 --- a/patches/kernel32-MoveFile/0004-kernel32-MoveFile-source-source-should-succeed.patch +++ b/patches/kernel32-MoveFile/0004-kernel32-MoveFile-source-source-should-succeed.patch @@ -1,4 +1,4 @@ -From 6cd8711153dfad60cf2816d2f9f07189bd37719b Mon Sep 17 00:00:00 2001 +From ca172d5f44df90a62426572ef6f461b27bf57689 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Tue, 15 Nov 2016 13:02:13 +0800 Subject: [PATCH] kernel32: MoveFile(source, source) should succeed. @@ -11,7 +11,7 @@ Subject: [PATCH] kernel32: MoveFile(source, source) should succeed. 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c -index 232ea7e..ba75b7e 100644 +index bde58e9..c7c5cbd 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -1354,7 +1354,7 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, @@ -21,10 +21,10 @@ index 232ea7e..ba75b7e 100644 - HANDLE source_handle = 0, dest_handle; + HANDLE source_handle = 0, dest_handle = 0; ANSI_STRING source_unix, dest_unix; + DWORD options; - TRACE("(%s,%s,%p,%p,%04x)\n", -@@ -1413,18 +1413,22 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, - FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT ); +@@ -1414,18 +1414,22 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, + status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io, 0, options ); if (status == STATUS_SUCCESS) /* destination exists */ { - NtClose( dest_handle ); @@ -50,7 +50,7 @@ index 232ea7e..ba75b7e 100644 } else if (status != STATUS_OBJECT_NAME_NOT_FOUND) { -@@ -1484,6 +1488,7 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, +@@ -1485,6 +1489,7 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, error: if (source_handle) NtClose( source_handle ); @@ -59,7 +59,7 @@ index 232ea7e..ba75b7e 100644 RtlFreeAnsiString( &dest_unix ); return FALSE; diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c -index e201f62..e152cf1 100644 +index ef4eebc..07b3ffb 100644 --- a/dlls/kernel32/tests/file.c +++ b/dlls/kernel32/tests/file.c @@ -1886,7 +1886,7 @@ static void test_MoveFileA(void) @@ -72,10 +72,10 @@ index e201f62..e152cf1 100644 ret = MoveFileA(source, dest); ok(!ret && GetLastError() == ERROR_ALREADY_EXISTS, diff --git a/dlls/msvcp120/tests/msvcp120.c b/dlls/msvcp120/tests/msvcp120.c -index 969902d..d6051b0 100644 +index db9517d..7275e28 100644 --- a/dlls/msvcp120/tests/msvcp120.c +++ b/dlls/msvcp120/tests/msvcp120.c -@@ -1402,7 +1402,7 @@ static void test_tr2_sys__Rename(void) +@@ -1524,7 +1524,7 @@ static void test_tr2_sys__Rename(void) CloseHandle(file); ret = p_tr2_sys__Rename("tr2_test_dir\\f1", "tr2_test_dir\\f1"); @@ -85,10 +85,10 @@ index 969902d..d6051b0 100644 errno = 0xdeadbeef; if(tests[i].val == ERROR_SUCCESS) { diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp -index dcc9629..e16f9f3 100644 +index ea4157c..298c4e9 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp -@@ -1261,8 +1261,8 @@ file move succeeded +@@ -1295,8 +1295,8 @@ file move succeeded @todo_wine@bar@or_broken@baz read-only files are moveable file moved in subdirectory diff --git a/patches/kernel32-MoveFile/0005-kernel32-MoveFile-should-make-sure-that-it-has-the-d.patch b/patches/kernel32-MoveFile/0005-kernel32-MoveFile-should-make-sure-that-it-has-the-d.patch index 875ac530..4c64704b 100644 --- a/patches/kernel32-MoveFile/0005-kernel32-MoveFile-should-make-sure-that-it-has-the-d.patch +++ b/patches/kernel32-MoveFile/0005-kernel32-MoveFile-should-make-sure-that-it-has-the-d.patch @@ -1,8 +1,8 @@ -From 96e7b57c5591087cfd07b0658ac33a1ec6bde3b5 Mon Sep 17 00:00:00 2001 +From 6e5c9277d35def4b312820f11ef8a7586f788124 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Tue, 15 Nov 2016 13:32:42 +0800 -Subject: kernel32: MoveFile should make sure that it has the delete access to - the source file. +Subject: [PATCH] kernel32: MoveFile should make sure that it has the delete + access to the source file. --- dlls/kernel32/path.c | 6 ++++-- @@ -10,10 +10,10 @@ Subject: kernel32: MoveFile should make sure that it has the delete access to 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c -index f554d14..d7fc20e 100644 +index c7c5cbd..855330b 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c -@@ -1338,7 +1338,8 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, +@@ -1383,7 +1383,8 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL; @@ -23,21 +23,21 @@ index f554d14..d7fc20e 100644 if (status == STATUS_SUCCESS) status = wine_nt_to_unix_file_name( &nt_name, &source_unix, FILE_OPEN, FALSE ); RtlFreeUnicodeString( &nt_name ); -@@ -1362,7 +1363,8 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, - SetLastError( ERROR_PATH_NOT_FOUND ); - goto error; - } -- status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io, 0, -+ status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io, -+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT ); +@@ -1411,7 +1412,8 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, + options = FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT; + if (flag & MOVEFILE_WRITE_THROUGH) + options |= FILE_WRITE_THROUGH; +- status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io, 0, options ); ++ status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io, ++ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, options ); if (status == STATUS_SUCCESS) /* destination exists */ { + if (!(flag & MOVEFILE_REPLACE_EXISTING)) diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c -index f0f9232..6fcf019 100644 +index 07b3ffb..4729e75 100644 --- a/dlls/kernel32/tests/file.c +++ b/dlls/kernel32/tests/file.c -@@ -1905,12 +1905,10 @@ static void test_MoveFileA(void) +@@ -1906,12 +1906,10 @@ static void test_MoveFileA(void) ok(hmapfile != NULL, "CreateFileMapping: error %d\n", GetLastError()); ret = MoveFileA(source, dest); @@ -54,7 +54,7 @@ index f0f9232..6fcf019 100644 CloseHandle(hmapfile); CloseHandle(hfile); -@@ -1925,12 +1923,10 @@ static void test_MoveFileA(void) +@@ -1926,12 +1924,10 @@ static void test_MoveFileA(void) ok(hmapfile != NULL, "CreateFileMapping: error %d\n", GetLastError()); ret = MoveFileA(source, dest); @@ -72,5 +72,5 @@ index f0f9232..6fcf019 100644 CloseHandle(hmapfile); CloseHandle(hfile); -- -2.9.0 +1.9.1 diff --git a/patches/ml-patches/0001-wined3d-Fix-WINED3D_MCS_COLOR2.patch b/patches/ml-patches/0001-wined3d-Fix-WINED3D_MCS_COLOR2.patch new file mode 100644 index 00000000..da6949b7 --- /dev/null +++ b/patches/ml-patches/0001-wined3d-Fix-WINED3D_MCS_COLOR2.patch @@ -0,0 +1,75 @@ +From d466b7735488b900ae331a5541bbe8db7d760afc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Stefan=20D=C3=B6singer?= +Date: Wed, 25 Jul 2018 22:00:42 +0200 +Subject: [PATCH 01/24] wined3d: Fix WINED3D_MCS_COLOR2. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Don't use it unless we have a specular color in the vertex attributes, +but allow it if there's no diffuse color. + +Signed-off-by: Stefan Dösinger +--- + dlls/wined3d/utils.c | 37 ++++++++++++++++++++++++++++++++----- + 1 file changed, 32 insertions(+), 5 deletions(-) + +diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c +index 937c1bc..ccf5b84 100644 +--- a/dlls/wined3d/utils.c ++++ b/dlls/wined3d/utils.c +@@ -5854,6 +5854,7 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context, + const struct wined3d_gl_info *gl_info = context->gl_info; + const struct wined3d_d3d_info *d3d_info = context->d3d_info; + unsigned int coord_idx, i; ++ BOOL has_diffuse, has_specular; + + memset(settings, 0, sizeof(*settings)); + +@@ -5911,12 +5912,38 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context, + settings->point_size = state->gl_primitive_type == GL_POINTS; + settings->per_vertex_point_size = !!(si->use_map & 1u << WINED3D_FFP_PSIZE); + +- if (state->render_states[WINED3D_RS_COLORVERTEX] && (si->use_map & (1u << WINED3D_FFP_DIFFUSE))) ++ has_diffuse = si->use_map & (1u << WINED3D_FFP_DIFFUSE); ++ has_specular = si->use_map & (1u << WINED3D_FFP_SPECULAR); ++ ++ if (state->render_states[WINED3D_RS_COLORVERTEX] && (has_diffuse || has_specular)) + { +- settings->diffuse_source = state->render_states[WINED3D_RS_DIFFUSEMATERIALSOURCE]; +- settings->emissive_source = state->render_states[WINED3D_RS_EMISSIVEMATERIALSOURCE]; +- settings->ambient_source = state->render_states[WINED3D_RS_AMBIENTMATERIALSOURCE]; +- settings->specular_source = state->render_states[WINED3D_RS_SPECULARMATERIALSOURCE]; ++ if (state->render_states[WINED3D_RS_DIFFUSEMATERIALSOURCE] == WINED3D_MCS_COLOR1 && has_diffuse) ++ settings->diffuse_source = WINED3D_MCS_COLOR1; ++ else if (state->render_states[WINED3D_RS_DIFFUSEMATERIALSOURCE] == WINED3D_MCS_COLOR2 && has_specular) ++ settings->diffuse_source = WINED3D_MCS_COLOR2; ++ else ++ settings->diffuse_source = WINED3D_MCS_MATERIAL; ++ ++ if (state->render_states[WINED3D_RS_EMISSIVEMATERIALSOURCE] == WINED3D_MCS_COLOR1 && has_diffuse) ++ settings->emissive_source = WINED3D_MCS_COLOR1; ++ else if (state->render_states[WINED3D_RS_EMISSIVEMATERIALSOURCE] == WINED3D_MCS_COLOR2 && has_specular) ++ settings->emissive_source = WINED3D_MCS_COLOR2; ++ else ++ settings->emissive_source = WINED3D_MCS_MATERIAL; ++ ++ if (state->render_states[WINED3D_RS_AMBIENTMATERIALSOURCE] == WINED3D_MCS_COLOR1 && has_diffuse) ++ settings->ambient_source = WINED3D_MCS_COLOR1; ++ else if (state->render_states[WINED3D_RS_AMBIENTMATERIALSOURCE] == WINED3D_MCS_COLOR2 && has_specular) ++ settings->ambient_source = WINED3D_MCS_COLOR2; ++ else ++ settings->ambient_source = WINED3D_MCS_MATERIAL; ++ ++ if (state->render_states[WINED3D_RS_SPECULARMATERIALSOURCE] == WINED3D_MCS_COLOR1 && has_diffuse) ++ settings->specular_source = WINED3D_MCS_COLOR1; ++ else if (state->render_states[WINED3D_RS_SPECULARMATERIALSOURCE] == WINED3D_MCS_COLOR2 && has_specular) ++ settings->specular_source = WINED3D_MCS_COLOR2; ++ else ++ settings->specular_source = WINED3D_MCS_MATERIAL; + } + else + { +-- +1.9.1 + diff --git a/patches/ml-patches/0002-d3d9-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch b/patches/ml-patches/0002-d3d9-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch new file mode 100644 index 00000000..eef17281 --- /dev/null +++ b/patches/ml-patches/0002-d3d9-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch @@ -0,0 +1,145 @@ +From 11bcbf7ddfb38cd895c6465d188fd441e364e4aa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Stefan=20D=C3=B6singer?= +Date: Wed, 25 Jul 2018 22:00:43 +0200 +Subject: [PATCH 02/24] d3d9/tests: Add a test for D3DMCS_COLOR{1/2}. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Stefan Dösinger +--- + dlls/d3d9/tests/visual.c | 113 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 113 insertions(+) + +diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c +index b36c189..4be84a9 100644 +--- a/dlls/d3d9/tests/visual.c ++++ b/dlls/d3d9/tests/visual.c +@@ -24027,6 +24027,118 @@ done: + DestroyWindow(window); + } + ++static void test_color_vertex(void) ++{ ++ IDirect3D9 *d3d; ++ IDirect3DDevice9 *device; ++ D3DCOLOR color; ++ ULONG refcount; ++ HWND window; ++ HRESULT hr; ++ D3DMATERIAL9 material; ++ unsigned int i; ++ ++ /* The idea here is to set up ambient light parameters in a way that the ambient color from the ++ * material is just passed through. The emissive color is just passed through anyway. The sum of ++ * ambient + emissive should allow deduction of where the material color came from. ++ * ++ * Note that in cases without a D3DFVF_DIFFUSE flag the first color value in the struct will be ++ * fed into the specular vertex color slot. */ ++ static const struct ++ { ++ DWORD fvf, color_vertex, ambient, emissive, result; ++ } ++ tests[] = ++ { ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, FALSE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x000000c0}, ++ ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x00ffff00}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_MATERIAL, D3DMCS_COLOR2, 0x0000ff80}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_MATERIAL, 0x00ff0040}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR1, 0x00ff0000}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR2, D3DMCS_COLOR2, 0x0000ff00}, ++ ++ {D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x00ff0080}, ++ {D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_MATERIAL, 0x000000c0}, ++ {D3DFVF_SPECULAR, TRUE, D3DMCS_MATERIAL, D3DMCS_COLOR2, 0x00ff0080}, ++ {D3DFVF_DIFFUSE, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x00ff0040}, ++ {D3DFVF_DIFFUSE, TRUE, D3DMCS_COLOR1, D3DMCS_MATERIAL, 0x00ff0040}, ++ {D3DFVF_DIFFUSE, TRUE, D3DMCS_COLOR2, D3DMCS_MATERIAL, 0x000000c0}, ++ ++ {0, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x000000c0}, ++ }; ++ ++ static const struct ++ { ++ struct vec3 position; ++ DWORD diffuse; ++ DWORD specular; ++ } ++ quad[] = ++ { ++ {{-1.0f, -1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ {{-1.0f, 1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ {{ 1.0f, -1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ {{ 1.0f, 1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ }; ++ ++ window = create_window(); ++ ok(!!window, "Failed to create a window.\n"); ++ ++ d3d = Direct3DCreate9(D3D_SDK_VERSION); ++ ok(!!d3d, "Failed to create a D3D object.\n"); ++ if (!(device = create_device(d3d, window, window, TRUE))) ++ { ++ skip("Failed to create a D3D device, skipping tests.\n"); ++ IDirect3D9_Release(d3d); ++ DestroyWindow(window); ++ return; ++ } ++ ++ hr = IDirect3DDevice9_SetRenderState(device, D3DRS_LIGHTING, TRUE); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice9_SetRenderState(device, D3DRS_AMBIENT, 0xffffffff); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ ++ memset(&material, 0, sizeof(material)); ++ material.Ambient.b = 0.5; ++ material.Emissive.b = 0.25; ++ hr = IDirect3DDevice9_SetMaterial(device, &material); ++ ok(SUCCEEDED(hr), "Failed to set material, hr %#x\n", hr); ++ ++ for (i = 0; i < ARRAY_SIZE(tests); ++i) ++ { ++ hr = IDirect3DDevice9_SetRenderState(device, D3DRS_COLORVERTEX, tests[i].color_vertex); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice9_SetRenderState(device, D3DRS_AMBIENTMATERIALSOURCE, tests[i].ambient); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice9_SetRenderState(device, D3DRS_EMISSIVEMATERIALSOURCE, tests[i].emissive); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice9_SetFVF(device, D3DFVF_XYZ | tests[i].fvf); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ ++ hr = IDirect3DDevice9_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0x77777777, 0.0f, 0); ++ ok(SUCCEEDED(hr), "Failed to clear depth/stencil, hr %#x.\n", hr); ++ ++ hr = IDirect3DDevice9_BeginScene(device); ++ ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr); ++ hr = IDirect3DDevice9_DrawPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 2, quad, sizeof(quad[0])); ++ ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr); ++ hr = IDirect3DDevice9_EndScene(device); ++ ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr); ++ ++ color = getPixelColor(device, 320, 240); ++ ok(color_match(color, tests[i].result, 1), ++ "Expected color 0x%08x for test %u, got 0x%08x.\n", ++ tests[i].result, i, color); ++ } ++ ++ refcount = IDirect3DDevice9_Release(device); ++ ok(!refcount, "Device has %u references left.\n", refcount); ++ IDirect3D9_Release(d3d); ++ DestroyWindow(window); ++} ++ + START_TEST(visual) + { + D3DADAPTER_IDENTIFIER9 identifier; +@@ -24164,4 +24276,5 @@ START_TEST(visual) + test_mvp_software_vertex_shaders(); + test_null_format(); + test_map_synchronisation(); ++ test_color_vertex(); + } +-- +1.9.1 + diff --git a/patches/ml-patches/0003-d3d8-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch b/patches/ml-patches/0003-d3d8-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch new file mode 100644 index 00000000..710a6f9a --- /dev/null +++ b/patches/ml-patches/0003-d3d8-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch @@ -0,0 +1,144 @@ +From 57b372d60b79f1bd08253181e15078f101055c7d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Stefan=20D=C3=B6singer?= +Date: Wed, 25 Jul 2018 22:00:44 +0200 +Subject: [PATCH 03/24] d3d8/tests: Add a test for D3DMCS_COLOR{1/2}. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Stefan Dösinger +--- + dlls/d3d8/tests/visual.c | 112 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 112 insertions(+) + +diff --git a/dlls/d3d8/tests/visual.c b/dlls/d3d8/tests/visual.c +index bed70d8..c60af69 100644 +--- a/dlls/d3d8/tests/visual.c ++++ b/dlls/d3d8/tests/visual.c +@@ -10279,6 +10279,117 @@ done: + DestroyWindow(window); + } + ++static void test_color_vertex(void) ++{ ++ IDirect3D8 *d3d; ++ IDirect3DDevice8 *device; ++ D3DCOLOR color; ++ ULONG refcount; ++ HWND window; ++ HRESULT hr; ++ D3DMATERIAL8 material; ++ unsigned int i; ++ ++ /* The idea here is to set up ambient light parameters in a way that the ambient color from the ++ * material is just passed through. The emissive color is just passed through anyway. The sum of ++ * ambient + emissive should allow deduction of where the material color came from. ++ * ++ * Note that in cases without a D3DFVF_DIFFUSE flag the first color value in the struct will be ++ * fed into the specular vertex color slot. */ ++ static const struct ++ { ++ DWORD fvf, color_vertex, ambient, emissive, result; ++ } ++ tests[] = ++ { ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, FALSE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x000000c0}, ++ ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x00ffff00}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_MATERIAL, D3DMCS_COLOR2, 0x0000ff80}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_MATERIAL, 0x00ff0040}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR1, 0x00ff0000}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR2, D3DMCS_COLOR2, 0x0000ff00}, ++ ++ {D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x00ff0080}, ++ {D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_MATERIAL, 0x000000c0}, ++ {D3DFVF_SPECULAR, TRUE, D3DMCS_MATERIAL, D3DMCS_COLOR2, 0x00ff0080}, ++ {D3DFVF_DIFFUSE, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x00ff0040}, ++ {D3DFVF_DIFFUSE, TRUE, D3DMCS_COLOR1, D3DMCS_MATERIAL, 0x00ff0040}, ++ {D3DFVF_DIFFUSE, TRUE, D3DMCS_COLOR2, D3DMCS_MATERIAL, 0x000000c0}, ++ ++ {0, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x000000c0}, ++ }; ++ static const struct ++ { ++ struct vec3 position; ++ DWORD diffuse; ++ DWORD specular; ++ } ++ quad[] = ++ { ++ {{-1.0f, -1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ {{-1.0f, 1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ {{ 1.0f, -1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ {{ 1.0f, 1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ }; ++ ++ window = create_window(); ++ ok(!!window, "Failed to create a window.\n"); ++ ++ d3d = Direct3DCreate8(D3D_SDK_VERSION); ++ ok(!!d3d, "Failed to create a D3D object.\n"); ++ if (!(device = create_device(d3d, window, window, TRUE))) ++ { ++ skip("Failed to create a D3D device, skipping tests.\n"); ++ IDirect3D8_Release(d3d); ++ DestroyWindow(window); ++ return; ++ } ++ ++ hr = IDirect3DDevice8_SetRenderState(device, D3DRS_LIGHTING, TRUE); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice8_SetRenderState(device, D3DRS_AMBIENT, 0xffffffff); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ ++ memset(&material, 0, sizeof(material)); ++ material.Ambient.b = 0.5; ++ material.Emissive.b = 0.25; ++ hr = IDirect3DDevice8_SetMaterial(device, &material); ++ ok(SUCCEEDED(hr), "Failed to set material, hr %#x\n", hr); ++ ++ for (i = 0; i < ARRAY_SIZE(tests); ++i) ++ { ++ hr = IDirect3DDevice8_SetRenderState(device, D3DRS_COLORVERTEX, tests[i].color_vertex); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice8_SetRenderState(device, D3DRS_AMBIENTMATERIALSOURCE, tests[i].ambient); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice8_SetRenderState(device, D3DRS_EMISSIVEMATERIALSOURCE, tests[i].emissive); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice8_SetVertexShader(device, D3DFVF_XYZ | tests[i].fvf); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ ++ hr = IDirect3DDevice8_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0x77777777, 0.0f, 0); ++ ok(SUCCEEDED(hr), "Failed to clear depth/stencil, hr %#x.\n", hr); ++ ++ hr = IDirect3DDevice8_BeginScene(device); ++ ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr); ++ hr = IDirect3DDevice8_DrawPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 2, quad, sizeof(quad[0])); ++ ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr); ++ hr = IDirect3DDevice8_EndScene(device); ++ ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr); ++ ++ color = getPixelColor(device, 320, 240); ++ ok(color_match(color, tests[i].result, 1), ++ "Expected color 0x%08x for test %u, got 0x%08x.\n", ++ tests[i].result, i, color); ++ } ++ ++ refcount = IDirect3DDevice8_Release(device); ++ ok(!refcount, "Device has %u references left.\n", refcount); ++ IDirect3D8_Release(d3d); ++ DestroyWindow(window); ++} ++ + START_TEST(visual) + { + D3DADAPTER_IDENTIFIER8 identifier; +@@ -10352,4 +10463,5 @@ START_TEST(visual) + test_drawindexedprimitiveup(); + test_map_synchronisation(); + test_viewport(); ++ test_color_vertex(); + } +-- +1.9.1 + diff --git a/patches/ml-patches/0004-ddraw-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch b/patches/ml-patches/0004-ddraw-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch new file mode 100644 index 00000000..26a62e89 --- /dev/null +++ b/patches/ml-patches/0004-ddraw-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch @@ -0,0 +1,172 @@ +From 32b2c4ee0b87bcfabccb5d84090c964094a29ed0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Stefan=20D=C3=B6singer?= +Date: Wed, 25 Jul 2018 22:00:45 +0200 +Subject: [PATCH 04/24] ddraw/tests: Add a test for D3DMCS_COLOR{1/2}. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +A ddraw4 version is on my TODO list. ddraw1 and ddraw2 cannot use +lighting and per-vertex color at the same time due to the predefined +D3D*VERTEX structs. ddraw4 can, and it has D3DLIGHTSTATE_COLORVERTEX, +but the material source states are missing. I assume that one or more of +the material properties then track the vertex color, but I have to find +out which. + +Signed-off-by: Stefan Dösinger +--- + dlls/ddraw/tests/ddraw7.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 133 insertions(+) + +diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c +index 35a45c0..bf34962 100644 +--- a/dlls/ddraw/tests/ddraw7.c ++++ b/dlls/ddraw/tests/ddraw7.c +@@ -14267,6 +14267,138 @@ static void test_viewport(void) + DestroyWindow(window); + } + ++static void test_color_vertex(void) ++{ ++ IDirectDrawSurface7 *rt; ++ IDirect3DDevice7 *device; ++ unsigned int i; ++ ULONG refcount; ++ HWND window; ++ HRESULT hr; ++ D3DMATERIAL7 material; ++ D3DCOLOR color; ++ ++ static struct ++ { ++ struct vec3 position; ++ DWORD diffuse; ++ DWORD specular; ++ } ++ quad_2c[] = ++ { ++ {{-1.0f, -1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ {{-1.0f, 1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ {{ 1.0f, -1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ {{ 1.0f, 1.0f, 0.0f}, 0xffff0000, 0xff00ff00}, ++ }; ++ static struct ++ { ++ struct vec3 position; ++ DWORD color; ++ } ++ quad_1c[] = ++ { ++ {{-1.0f, -1.0f, 0.0f}, 0xffff0000}, ++ {{-1.0f, 1.0f, 0.0f}, 0xffff0000}, ++ {{ 1.0f, -1.0f, 0.0f}, 0xffff0000}, ++ {{ 1.0f, 1.0f, 0.0f}, 0xffff0000}, ++ }; ++ static struct ++ { ++ struct vec3 position; ++ } ++ quad_0c[] = ++ { ++ {{-1.0f, -1.0f, 0.0f}}, ++ {{-1.0f, 1.0f, 0.0f}}, ++ {{ 1.0f, -1.0f, 0.0f}}, ++ {{ 1.0f, 1.0f, 0.0f}}, ++ }; ++ ++ /* The idea here is to set up ambient light parameters in a way that the ambient color from the ++ * material is just passed through. The emissive color is just passed through anyway. The sum of ++ * ambient + emissive should allow deduction of where the material color came from. */ ++ static const struct ++ { ++ DWORD fvf, color_vertex, ambient, emissive, result; ++ void *vtx; ++ } ++ tests[] = ++ { ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, FALSE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x000000c0, quad_2c}, ++ ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x00ffff00, quad_2c}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_MATERIAL, D3DMCS_COLOR2, 0x0000ff80, quad_2c}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_MATERIAL, 0x00ff0040, quad_2c}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR1, 0x00ff0000, quad_2c}, ++ {D3DFVF_DIFFUSE | D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR2, D3DMCS_COLOR2, 0x0000ff00, quad_2c}, ++ ++ {D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x00ff0080, quad_1c}, ++ {D3DFVF_SPECULAR, TRUE, D3DMCS_COLOR1, D3DMCS_MATERIAL, 0x000000c0, quad_1c}, ++ {D3DFVF_SPECULAR, TRUE, D3DMCS_MATERIAL, D3DMCS_COLOR2, 0x00ff0080, quad_1c}, ++ {D3DFVF_DIFFUSE, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x00ff0040, quad_1c}, ++ {D3DFVF_DIFFUSE, TRUE, D3DMCS_COLOR1, D3DMCS_MATERIAL, 0x00ff0040, quad_1c}, ++ {D3DFVF_DIFFUSE, TRUE, D3DMCS_COLOR2, D3DMCS_MATERIAL, 0x000000c0, quad_1c}, ++ ++ {0, TRUE, D3DMCS_COLOR1, D3DMCS_COLOR2, 0x000000c0, quad_0c}, ++ }; ++ ++ window = CreateWindowA("static", "d3d7_test", WS_OVERLAPPEDWINDOW, ++ 0, 0, 640, 480, 0, 0, 0, 0); ++ if (!(device = create_device(window, DDSCL_NORMAL))) ++ { ++ skip("Failed to create a 3D device, skipping test.\n"); ++ DestroyWindow(window); ++ return; ++ } ++ hr = IDirect3DDevice7_GetRenderTarget(device, &rt); ++ ok(SUCCEEDED(hr), "Failed to get render target, hr %#x.\n", hr); ++ ++ hr = IDirect3DDevice7_SetRenderState(device, D3DRENDERSTATE_LIGHTING, TRUE); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice7_SetRenderState(device, D3DRENDERSTATE_AMBIENT, 0xffffffff); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ ++ memset(&material, 0, sizeof(material)); ++ U3(U1(material).ambient).b = 0.5; ++ U3(U3(material).emissive).b = 0.25f; ++ hr = IDirect3DDevice7_SetMaterial(device, &material); ++ ok(SUCCEEDED(hr), "Failed to set material, hr %#x\n", hr); ++ ++ for (i = 0; i < ARRAY_SIZE(tests); ++i) ++ { ++ hr = IDirect3DDevice7_SetRenderState(device, D3DRENDERSTATE_COLORVERTEX, tests[i].color_vertex); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice7_SetRenderState(device, D3DRENDERSTATE_AMBIENTMATERIALSOURCE, tests[i].ambient); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice7_SetRenderState(device, D3DRENDERSTATE_EMISSIVEMATERIALSOURCE, tests[i].emissive); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ hr = IDirect3DDevice7_SetRenderState(device, D3DRENDERSTATE_ZENABLE, D3DZB_FALSE); ++ ok(SUCCEEDED(hr), "Failed to set render state, hr %#x.\n", hr); ++ ++ hr = IDirect3DDevice7_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0x77777777, 0.0f, 0); ++ ok(SUCCEEDED(hr), "Failed to clear depth/stencil, hr %#x.\n", hr); ++ ++ hr = IDirect3DDevice7_BeginScene(device); ++ ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr); ++ hr = IDirect3DDevice7_DrawPrimitive(device, D3DPT_TRIANGLESTRIP, D3DFVF_XYZ | tests[i].fvf, ++ tests[i].vtx, 4, 0); ++ ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr); ++ hr = IDirect3DDevice7_EndScene(device); ++ ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr); ++ ++ color = get_surface_color(rt, 320, 240); ++ ok(compare_color(color, tests[i].result, 1), ++ "Expected color 0x%08x for test %u, got 0x%08x.\n", ++ tests[i].result, i, color); ++ } ++ ++ IDirectDrawSurface7_Release(rt); ++ refcount = IDirect3DDevice7_Release(device); ++ ok(!refcount, "Device has %u references left.\n", refcount); ++ DestroyWindow(window); ++} ++ + START_TEST(ddraw7) + { + DDDEVICEIDENTIFIER2 identifier; +@@ -14402,4 +14534,5 @@ START_TEST(ddraw7) + test_clear(); + test_enum_surfaces(); + test_viewport(); ++ test_color_vertex(); + } +-- +1.9.1 + diff --git a/patches/ml-patches/0005-dsound-Correctly-calculate-angle-between-vectors-wit.patch b/patches/ml-patches/0005-dsound-Correctly-calculate-angle-between-vectors-wit.patch new file mode 100644 index 00000000..d0628e19 --- /dev/null +++ b/patches/ml-patches/0005-dsound-Correctly-calculate-angle-between-vectors-wit.patch @@ -0,0 +1,33 @@ +From 0eeb6d6b57cb8e1c50c65915799fbd4a7b2b6c43 Mon Sep 17 00:00:00 2001 +From: Andrew Eikum +Date: Tue, 24 Jul 2018 11:05:06 -0500 +Subject: [PATCH 05/24] dsound: Correctly calculate angle between vectors with + equal and opposite directions + +Signed-off-by: Andrew Eikum +--- + dlls/dsound/sound3d.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/dlls/dsound/sound3d.c b/dlls/dsound/sound3d.c +index 03fd3d4..118bb60 100644 +--- a/dlls/dsound/sound3d.c ++++ b/dlls/dsound/sound3d.c +@@ -111,7 +111,13 @@ static inline D3DVALUE AngleBetweenVectorsRad (const D3DVECTOR *a, const D3DVECT + return 0; + + cos = product/(la*lb); +- angle = acos(cos); ++ if(cos > 1.f){ ++ angle = 0; ++ }else if(cos < -1.f){ ++ angle = M_PI; ++ }else{ ++ angle = acos(cos); ++ } + TRACE("angle between (%f,%f,%f) and (%f,%f,%f) = %f radians (%f degrees)\n", a->x, a->y, a->z, b->x, + b->y, b->z, angle, RadToDeg(angle)); + return angle; +-- +1.9.1 + diff --git a/patches/ml-patches/0006-hidclass.sys-Unload-all-devices-before-unloading-a-m.patch b/patches/ml-patches/0006-hidclass.sys-Unload-all-devices-before-unloading-a-m.patch new file mode 100644 index 00000000..953bfb76 --- /dev/null +++ b/patches/ml-patches/0006-hidclass.sys-Unload-all-devices-before-unloading-a-m.patch @@ -0,0 +1,155 @@ +From c6c0b64be4f8505a769aa08dca8fa3078831aed5 Mon Sep 17 00:00:00 2001 +From: Aric Stewart +Date: Tue, 24 Jul 2018 08:16:45 -0500 +Subject: [PATCH 06/24] hidclass.sys: Unload all devices before unloading a + minidriver + +Signed-off-by: Aric Stewart +--- + dlls/hidclass.sys/hid.h | 8 ++++++++ + dlls/hidclass.sys/main.c | 8 ++++++++ + dlls/hidclass.sys/pnp.c | 35 +++++++++++++++++++++++++++++++---- + 3 files changed, 47 insertions(+), 4 deletions(-) + +diff --git a/dlls/hidclass.sys/hid.h b/dlls/hidclass.sys/hid.h +index 1829319..4e8ba3c 100644 +--- a/dlls/hidclass.sys/hid.h ++++ b/dlls/hidclass.sys/hid.h +@@ -70,6 +70,12 @@ void RingBuffer_Destroy(struct ReportRingBuffer *buffer) DECLSPEC_HIDDEN; + struct ReportRingBuffer* RingBuffer_Create(UINT buffer_size) DECLSPEC_HIDDEN; + NTSTATUS RingBuffer_SetSize(struct ReportRingBuffer *buffer, UINT size) DECLSPEC_HIDDEN; + ++typedef struct _hiddevice ++{ ++ struct list entry; ++ DEVICE_OBJECT *device; ++} hid_device; ++ + typedef struct _minidriver + { + struct list entry; +@@ -80,6 +86,7 @@ typedef struct _minidriver + + pAddDevice AddDevice; + PDRIVER_DISPATCH PNPDispatch; ++ struct list device_list; + } minidriver; + + NTSTATUS call_minidriver(ULONG code, DEVICE_OBJECT *device, void *in_buff, ULONG in_size, void *out_buff, ULONG out_size) DECLSPEC_HIDDEN; +@@ -100,6 +107,7 @@ NTSTATUS WINAPI HID_PNP_Dispatch(DEVICE_OBJECT *device, IRP *irp) DECLSPEC_HIDDE + + /* Pseudo-Plug and Play support*/ + NTSTATUS WINAPI PNP_AddDevice(DRIVER_OBJECT *driver, DEVICE_OBJECT* PDO) DECLSPEC_HIDDEN; ++NTSTATUS PNP_RemoveDevice(minidriver *minidriver, DEVICE_OBJECT* device, IRP* irp) DECLSPEC_HIDDEN; + + /* Parsing HID Report Descriptors into preparsed data */ + WINE_HIDP_PREPARSED_DATA* ParseDescriptor(BYTE *descriptor, unsigned int length) DECLSPEC_HIDDEN; +diff --git a/dlls/hidclass.sys/main.c b/dlls/hidclass.sys/main.c +index 1742cfe..8bb423b 100644 +--- a/dlls/hidclass.sys/main.c ++++ b/dlls/hidclass.sys/main.c +@@ -49,6 +49,12 @@ static VOID WINAPI UnloadDriver(DRIVER_OBJECT *driver) + md = find_minidriver(driver); + if (md) + { ++ hid_device *device, *next; ++ TRACE("%i devices to unload\n", list_count(&md->device_list)); ++ LIST_FOR_EACH_ENTRY_SAFE(device, next, &md->device_list, hid_device, entry) ++ { ++ PNP_RemoveDevice(md, device->device, NULL); ++ } + if (md->DriverUnload) + md->DriverUnload(md->minidriver.DriverObject); + list_remove(&md->entry); +@@ -82,6 +88,8 @@ NTSTATUS WINAPI HidRegisterMinidriver(HID_MINIDRIVER_REGISTRATION *registration) + driver->minidriver = *registration; + list_add_tail(&minidriver_list, &driver->entry); + ++ list_init(&driver->device_list); ++ + return STATUS_SUCCESS; + } + +diff --git a/dlls/hidclass.sys/pnp.c b/dlls/hidclass.sys/pnp.c +index 30d1045..c501a74 100644 +--- a/dlls/hidclass.sys/pnp.c ++++ b/dlls/hidclass.sys/pnp.c +@@ -75,6 +75,7 @@ static NTSTATUS get_device_id(DEVICE_OBJECT *device, BUS_QUERY_ID_TYPE type, WCH + + NTSTATUS WINAPI PNP_AddDevice(DRIVER_OBJECT *driver, DEVICE_OBJECT *PDO) + { ++ hid_device *hiddev; + DEVICE_OBJECT *device = NULL; + NTSTATUS status; + minidriver *minidriver; +@@ -96,13 +97,19 @@ NTSTATUS WINAPI PNP_AddDevice(DRIVER_OBJECT *driver, DEVICE_OBJECT *PDO) + TRACE("PDO add device(%p:%s)\n", PDO, debugstr_w(PDO_id)); + minidriver = find_minidriver(driver); + +- status = HID_CreateDevice(PDO, &minidriver->minidriver, &device); ++ hiddev = HeapAlloc(GetProcessHeap(), 0, sizeof(*hiddev)); ++ if (!hiddev) ++ return STATUS_NO_MEMORY; ++ ++ status = HID_CreateDevice(PDO, &minidriver->minidriver, &hiddev->device); + if (status != STATUS_SUCCESS) + { + ERR("Failed to create HID object (%x)\n",status); + HeapFree(GetProcessHeap(), 0, PDO_id); ++ HeapFree(GetProcessHeap(), 0, hiddev); + return status; + } ++ device = hiddev->device; + + ext = device->DeviceExtension; + InitializeListHead(&ext->irp_queue); +@@ -177,6 +184,8 @@ NTSTATUS WINAPI PNP_AddDevice(DRIVER_OBJECT *driver, DEVICE_OBJECT *PDO) + return STATUS_NOT_SUPPORTED; + } + ++ list_add_tail(&(minidriver->device_list), &hiddev->entry); ++ + ext->information.DescriptorSize = ext->preparseData->dwSize; + + lstrcpyW(ext->instance_id, device_enumeratorW); +@@ -200,6 +209,26 @@ NTSTATUS WINAPI PNP_AddDevice(DRIVER_OBJECT *driver, DEVICE_OBJECT *PDO) + return STATUS_SUCCESS; + } + ++NTSTATUS PNP_RemoveDevice(minidriver *minidriver, DEVICE_OBJECT *device, IRP* irp) ++{ ++ hid_device *hiddev; ++ NTSTATUS rc = STATUS_NOT_SUPPORTED; ++ ++ if (irp) ++ rc = minidriver->PNPDispatch(device, irp); ++ HID_DeleteDevice(&minidriver->minidriver, device); ++ LIST_FOR_EACH_ENTRY(hiddev, &minidriver->device_list, hid_device, entry) ++ { ++ if (hiddev->device == device) ++ { ++ list_remove(&hiddev->entry); ++ HeapFree(GetProcessHeap(), 0, hiddev); ++ break; ++ } ++ } ++ return rc; ++} ++ + NTSTATUS WINAPI HID_PNP_Dispatch(DEVICE_OBJECT *device, IRP *irp) + { + NTSTATUS rc = STATUS_NOT_SUPPORTED; +@@ -255,9 +284,7 @@ NTSTATUS WINAPI HID_PNP_Dispatch(DEVICE_OBJECT *device, IRP *irp) + } + case IRP_MN_REMOVE_DEVICE: + { +- rc = minidriver->PNPDispatch(device, irp); +- HID_DeleteDevice(&minidriver->minidriver, device); +- return rc; ++ return PNP_RemoveDevice(minidriver, device, irp); + } + default: + { +-- +1.9.1 + diff --git a/patches/ml-patches/0007-wine.inf-Add-Sources-key.patch b/patches/ml-patches/0007-wine.inf-Add-Sources-key.patch new file mode 100644 index 00000000..11858918 --- /dev/null +++ b/patches/ml-patches/0007-wine.inf-Add-Sources-key.patch @@ -0,0 +1,26 @@ +From 45cf0122c89190fe8264be3e9b5e4ab65814fa87 Mon Sep 17 00:00:00 2001 +From: Gijs Vermeulen +Date: Wed, 25 Jul 2018 01:52:06 +0200 +Subject: [PATCH 07/24] wine.inf: Add "Sources" key. + +Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44981 +Signed-off-by: Gijs Vermeulen +--- + loader/wine.inf.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/loader/wine.inf.in b/loader/wine.inf.in +index 9a76509..7774289 100644 +--- a/loader/wine.inf.in ++++ b/loader/wine.inf.in +@@ -3416,6 +3416,7 @@ HKLM,%CurrentVersionNT%\SvcHost,"netsvcs",0x00010008,"Schedule" + HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -a -r" + HKLM,"System\CurrentControlSet\Services\Eventlog\Application",,16 + HKLM,"System\CurrentControlSet\Services\Eventlog\System",,16 ++HKLM,"System\CurrentControlSet\Services\Eventlog\System","Sources",0x10000,"" + HKLM,"System\CurrentControlSet\Services\Tcpip\Parameters",,16 + HKLM,"System\CurrentControlSet\Services\VxD\MSTCP",,16 + HKLM,"System\CurrentControlSet\Services\Winsock\Parameters",,16 +-- +1.9.1 + diff --git a/patches/ml-patches/0008-programs-Allow-to-disable-MIME-type-associations.patch b/patches/ml-patches/0008-programs-Allow-to-disable-MIME-type-associations.patch new file mode 100644 index 00000000..12c0cb85 --- /dev/null +++ b/patches/ml-patches/0008-programs-Allow-to-disable-MIME-type-associations.patch @@ -0,0 +1,200 @@ +From 9448c872e54c1f930c213bd639c5650c98e3e89f Mon Sep 17 00:00:00 2001 +From: Dmitry Timoshkov +Date: Wed, 25 Jul 2018 15:22:57 +0800 +Subject: [PATCH 08/24] programs: Allow to disable MIME-type associations. + +This patch should at least mitigate the state of the bug 19182. + +Signed-off-by: Dmitry Timoshkov +--- + programs/winecfg/resource.h | 1 + + programs/winecfg/theme.c | 30 ++++++++++++++++++++-- + programs/winecfg/winecfg.rc | 40 ++++++++++++++++-------------- + programs/winemenubuilder/winemenubuilder.c | 23 ++++++++++++++++- + 4 files changed, 73 insertions(+), 21 deletions(-) + +diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h +index 0c0b038..2760e92 100644 +--- a/programs/winecfg/resource.h ++++ b/programs/winecfg/resource.h +@@ -176,6 +176,7 @@ + #define IDC_SYSPARAM_COLOR_TEXT 1415 + #define IDC_SYSPARAM_COLOR 1416 + #define IDC_SYSPARAM_FONT 1417 ++#define IDC_ENABLE_FILE_ASSOCIATIONS 1418 + + #define IDC_SYSPARAMS_BUTTON 8400 + #define IDC_SYSPARAMS_BUTTON_TEXT 8401 +diff --git a/programs/winecfg/theme.c b/programs/winecfg/theme.c +index f98dcc3..863bc6b 100644 +--- a/programs/winecfg/theme.c ++++ b/programs/winecfg/theme.c +@@ -1168,6 +1168,26 @@ static void on_select_font(HWND hDlg) + SendMessageW(GetParent(hDlg), PSM_CHANGED, 0, 0); + } + ++static void init_mime_types(HWND hDlg) ++{ ++ char *buf = get_reg_key(config_key, keypath("MIME-types"), "EnableFileAssociations", "Y"); ++ int state = IS_OPTION_TRUE(*buf) ? BST_CHECKED : BST_UNCHECKED; ++ ++ CheckDlgButton(hDlg, IDC_ENABLE_FILE_ASSOCIATIONS, state); ++ ++ HeapFree(GetProcessHeap(), 0, buf); ++} ++ ++static void update_mime_types(HWND hDlg) ++{ ++ const char *state = "Y"; ++ ++ if (IsDlgButtonChecked(hDlg, IDC_ENABLE_FILE_ASSOCIATIONS) != BST_CHECKED) ++ state = "N"; ++ ++ set_reg_key(config_key, keypath("MIME-types"), "EnableFileAssociations", state); ++} ++ + INT_PTR CALLBACK + ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) + { +@@ -1177,8 +1197,9 @@ ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) + init_shell_folder_listview_headers(hDlg); + update_shell_folder_listview(hDlg); + read_sysparams(hDlg); ++ init_mime_types(hDlg); + break; +- ++ + case WM_DESTROY: + free_theme_files(); + break; +@@ -1186,7 +1207,7 @@ ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) + case WM_SHOWWINDOW: + set_window_title(hDlg); + break; +- ++ + case WM_COMMAND: + switch(HIWORD(wParam)) { + case CBN_SELCHANGE: { +@@ -1296,6 +1317,10 @@ ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) + } + break; + } ++ ++ case IDC_ENABLE_FILE_ASSOCIATIONS: ++ update_mime_types(hDlg); ++ break; + } + break; + } +@@ -1314,6 +1339,7 @@ ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) + apply_sysparams(); + read_shell_folder_link_targets(); + update_shell_folder_listview(hDlg); ++ update_mime_types(hDlg); + SetWindowLongPtrW(hDlg, DWLP_MSGRESULT, PSNRET_NOERROR); + break; + } +diff --git a/programs/winecfg/winecfg.rc b/programs/winecfg/winecfg.rc +index 5908b49..d37a55e 100644 +--- a/programs/winecfg/winecfg.rc ++++ b/programs/winecfg/winecfg.rc +@@ -284,25 +284,29 @@ IDD_DESKTOP_INTEGRATION DIALOG 0, 0, 260, 220 + STYLE WS_CHILD | WS_DISABLED + FONT 8, "MS Shell Dlg" + BEGIN +- GROUPBOX "Appearance",IDC_STATIC,8,4,244,106 +- LTEXT "&Theme:",IDC_STATIC,15,16,130,8 +- COMBOBOX IDC_THEME_THEMECOMBO,15,26,130,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +- PUSHBUTTON "&Install theme...",IDC_THEME_INSTALL,152,26,93,14 +- LTEXT "&Color:",IDC_THEME_COLORTEXT,15,48,105,8 +- COMBOBOX IDC_THEME_COLORCOMBO,15,58,105,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +- LTEXT "&Size:",IDC_THEME_SIZETEXT,126,48,120,8 +- COMBOBOX IDC_THEME_SIZECOMBO,126,58,120,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +- LTEXT "It&em:",IDC_STATIC,15,80,105,8 +- COMBOBOX IDC_SYSPARAM_COMBO,15,90,105,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT +- LTEXT "C&olor:",IDC_SYSPARAM_COLOR_TEXT,126,80,25,8,WS_DISABLED +- PUSHBUTTON "",IDC_SYSPARAM_COLOR,126,90,25,13,WS_DISABLED | BS_OWNERDRAW +- LTEXT "Si&ze:",IDC_SYSPARAM_SIZE_TEXT,157,80,30,8,WS_DISABLED +- EDITTEXT IDC_SYSPARAM_SIZE,157,90,30,13,ES_AUTOHSCROLL | WS_TABSTOP | WS_DISABLED +- CONTROL "",IDC_SYSPARAM_SIZE_UD,UPDOWN_CLASSA,UDS_SETBUDDYINT | UDS_ALIGNRIGHT | WS_DISABLED, 185,90,15,13 +- PUSHBUTTON "&Font...",IDC_SYSPARAM_FONT,190,90,55,13,WS_DISABLED +- GROUPBOX "Folders",IDC_STATIC,8,114,244,100 ++ GROUPBOX "Appearance",IDC_STATIC,8,4,244,90 ++ LTEXT "&Theme:",IDC_STATIC,15,15,130,8 ++ COMBOBOX IDC_THEME_THEMECOMBO,15,25,130,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP ++ PUSHBUTTON "&Install theme...",IDC_THEME_INSTALL,152,25,93,13 ++ LTEXT "&Color:",IDC_THEME_COLORTEXT,15,40,105,8 ++ COMBOBOX IDC_THEME_COLORCOMBO,15,50,105,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP ++ LTEXT "&Size:",IDC_THEME_SIZETEXT,126,40,120,8 ++ COMBOBOX IDC_THEME_SIZECOMBO,126,50,120,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP ++ LTEXT "It&em:",IDC_STATIC,15,65,105,8 ++ COMBOBOX IDC_SYSPARAM_COMBO,15,75,105,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT ++ LTEXT "C&olor:",IDC_SYSPARAM_COLOR_TEXT,126,65,25,8,WS_DISABLED ++ PUSHBUTTON "",IDC_SYSPARAM_COLOR,126,75,25,13,WS_DISABLED | BS_OWNERDRAW ++ LTEXT "Si&ze:",IDC_SYSPARAM_SIZE_TEXT,157,65,30,8,WS_DISABLED ++ EDITTEXT IDC_SYSPARAM_SIZE,157,75,30,13,ES_AUTOHSCROLL | WS_TABSTOP | WS_DISABLED ++ CONTROL "",IDC_SYSPARAM_SIZE_UD,UPDOWN_CLASSA,UDS_SETBUDDYINT | UDS_ALIGNRIGHT | WS_DISABLED, 185,75,15,13 ++ ++ GROUPBOX "MIME types",IDC_STATIC,8,95,244,23 ++ CONTROL "Allow Wine to manage file &associations",IDC_ENABLE_FILE_ASSOCIATIONS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,105,230,8 ++ ++ PUSHBUTTON "&Font...",IDC_SYSPARAM_FONT,190,75,55,13,WS_DISABLED ++ GROUPBOX "Folders",IDC_STATIC,8,120,244,94 + CONTROL "",IDC_LIST_SFPATHS,"SysListView32",LVS_REPORT | LVS_AUTOARRANGE | LVS_ALIGNLEFT | +- LVS_SINGLESEL | WS_BORDER | WS_TABSTOP, 15,126,230,64 ++ LVS_SINGLESEL | WS_BORDER | WS_TABSTOP, 15,132,230,58 + CONTROL "&Link to:",IDC_LINK_SFPATH,"Button",BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED,15,195,65,13 + EDITTEXT IDC_EDIT_SFPATH,80,195,110,13,ES_AUTOHSCROLL|WS_TABSTOP|WS_DISABLED + PUSHBUTTON "B&rowse...",IDC_BROWSE_SFPATH,195,195,50,13,WS_DISABLED +diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c +index 0013b04..dd69ff9 100644 +--- a/programs/winemenubuilder/winemenubuilder.c ++++ b/programs/winemenubuilder/winemenubuilder.c +@@ -104,6 +104,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(menubuilder); + #define in_startmenu(csidl) ((csidl)==CSIDL_STARTMENU || \ + (csidl)==CSIDL_COMMON_STARTMENU) + ++#define IS_OPTION_TRUE(ch) \ ++ ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1') ++ + /* link file formats */ + + #include "pshpack1.h" +@@ -3619,6 +3622,23 @@ static BOOL init_xdg(void) + return FALSE; + } + ++static BOOL associations_enabled(void) ++{ ++ BOOL ret = TRUE; ++ HKEY hkey; ++ BYTE buf[32]; ++ DWORD len; ++ ++ if (!RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\MIME-types", &hkey)) ++ { ++ len = sizeof(buf); ++ if (!RegQueryValueExA(hkey, "EnableFileAssociations", NULL, NULL, buf, &len)) ++ ret = IS_OPTION_TRUE(buf[0]); ++ } ++ ++ return ret; ++} ++ + /*********************************************************************** + * + * wWinMain +@@ -3654,7 +3674,8 @@ int PASCAL wWinMain (HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int sh + break; + if( !strcmpW( token, dash_aW ) ) + { +- RefreshFileTypeAssociations(); ++ if (associations_enabled()) ++ RefreshFileTypeAssociations(); + continue; + } + if( !strcmpW( token, dash_rW ) ) +-- +1.9.1 + diff --git a/patches/ml-patches/0009-api-ms-win-devices-config-l1-1-0-Add-dll.patch b/patches/ml-patches/0009-api-ms-win-devices-config-l1-1-0-Add-dll.patch new file mode 100644 index 00000000..6e51768c --- /dev/null +++ b/patches/ml-patches/0009-api-ms-win-devices-config-l1-1-0-Add-dll.patch @@ -0,0 +1,114 @@ +From c5f3c80ec9c35af958a232a9deb8f98f2225b992 Mon Sep 17 00:00:00 2001 +From: Andrey Gusev +Date: Mon, 23 Jul 2018 15:07:39 +0300 +Subject: [PATCH 09/24] api-ms-win-devices-config-l1-1-0: Add dll. + +Signed-off-by: Andrey Gusev +--- + configure | 2 ++ + configure.ac | 1 + + dlls/api-ms-win-devices-config-l1-1-0/Makefile.in | 1 + + .../api-ms-win-devices-config-l1-1-0.spec | 38 ++++++++++++++++++++++ + tools/make_specfiles | 1 + + 5 files changed, 43 insertions(+) + create mode 100644 dlls/api-ms-win-devices-config-l1-1-0/Makefile.in + create mode 100644 dlls/api-ms-win-devices-config-l1-1-0/api-ms-win-devices-config-l1-1-0.spec + +diff --git a/configure b/configure +index 337ce91..fd58e15 100755 +--- a/configure ++++ b/configure +@@ -1045,6 +1045,7 @@ enable_api_ms_win_crt_stdio_l1_1_0 + enable_api_ms_win_crt_string_l1_1_0 + enable_api_ms_win_crt_time_l1_1_0 + enable_api_ms_win_crt_utility_l1_1_0 ++enable_api_ms_win_devices_config_l1_1_0 + enable_api_ms_win_devices_config_l1_1_1 + enable_api_ms_win_devices_query_l1_1_1 + enable_api_ms_win_downlevel_advapi32_l1_1_0 +@@ -19137,6 +19138,7 @@ wine_fn_config_makefile dlls/api-ms-win-crt-stdio-l1-1-0 enable_api_ms_win_crt_s + wine_fn_config_makefile dlls/api-ms-win-crt-string-l1-1-0 enable_api_ms_win_crt_string_l1_1_0 + wine_fn_config_makefile dlls/api-ms-win-crt-time-l1-1-0 enable_api_ms_win_crt_time_l1_1_0 + wine_fn_config_makefile dlls/api-ms-win-crt-utility-l1-1-0 enable_api_ms_win_crt_utility_l1_1_0 ++wine_fn_config_makefile dlls/api-ms-win-devices-config-l1-1-0 enable_api_ms_win_devices_config_l1_1_0 + wine_fn_config_makefile dlls/api-ms-win-devices-config-l1-1-1 enable_api_ms_win_devices_config_l1_1_1 + wine_fn_config_makefile dlls/api-ms-win-devices-query-l1-1-1 enable_api_ms_win_devices_query_l1_1_1 + wine_fn_config_makefile dlls/api-ms-win-downlevel-advapi32-l1-1-0 enable_api_ms_win_downlevel_advapi32_l1_1_0 +diff --git a/configure.ac b/configure.ac +index be247ea..ddf7ee3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2998,6 +2998,7 @@ WINE_CONFIG_MAKEFILE(dlls/api-ms-win-crt-stdio-l1-1-0) + WINE_CONFIG_MAKEFILE(dlls/api-ms-win-crt-string-l1-1-0) + WINE_CONFIG_MAKEFILE(dlls/api-ms-win-crt-time-l1-1-0) + WINE_CONFIG_MAKEFILE(dlls/api-ms-win-crt-utility-l1-1-0) ++WINE_CONFIG_MAKEFILE(dlls/api-ms-win-devices-config-l1-1-0) + WINE_CONFIG_MAKEFILE(dlls/api-ms-win-devices-config-l1-1-1) + WINE_CONFIG_MAKEFILE(dlls/api-ms-win-devices-query-l1-1-1) + WINE_CONFIG_MAKEFILE(dlls/api-ms-win-downlevel-advapi32-l1-1-0) +diff --git a/dlls/api-ms-win-devices-config-l1-1-0/Makefile.in b/dlls/api-ms-win-devices-config-l1-1-0/Makefile.in +new file mode 100644 +index 0000000..1e11946 +--- /dev/null ++++ b/dlls/api-ms-win-devices-config-l1-1-0/Makefile.in +@@ -0,0 +1 @@ ++MODULE = api-ms-win-devices-config-l1-1-0.dll +diff --git a/dlls/api-ms-win-devices-config-l1-1-0/api-ms-win-devices-config-l1-1-0.spec b/dlls/api-ms-win-devices-config-l1-1-0/api-ms-win-devices-config-l1-1-0.spec +new file mode 100644 +index 0000000..fcd3aaa +--- /dev/null ++++ b/dlls/api-ms-win-devices-config-l1-1-0/api-ms-win-devices-config-l1-1-0.spec +@@ -0,0 +1,38 @@ ++@ stub CM_Delete_Class_Key ++@ stub CM_Delete_DevNode_Key ++@ stub CM_Delete_Device_Interface_KeyW ++@ stub CM_Disable_DevNode ++@ stub CM_Enable_DevNode ++@ stdcall CM_Get_Child(ptr long long) setupapi.CM_Get_Child ++@ stub CM_Get_Class_PropertyW ++@ stub CM_Get_Class_Property_Keys ++@ stdcall CM_Get_Class_Registry_PropertyW(ptr long ptr ptr long long ptr) setupapi.CM_Get_Class_Registry_PropertyW ++@ stub CM_Get_Depth ++@ stub CM_Get_DevNode_PropertyW ++@ stub CM_Get_DevNode_Property_Keys ++@ stdcall CM_Get_DevNode_Registry_PropertyW(long long ptr ptr ptr long) setupapi.CM_Get_DevNode_Registry_PropertyW ++@ stdcall CM_Get_DevNode_Status(ptr ptr long long) setupapi.CM_Get_DevNode_Status ++@ stdcall CM_Get_Device_IDW(ptr ptr long long) setupapi.CM_Get_Device_IDW ++@ stdcall CM_Get_Device_ID_ListW(wstr ptr long long) setupapi.CM_Get_Device_ID_ListW ++@ stdcall CM_Get_Device_ID_List_SizeW(ptr wstr long) setupapi.CM_Get_Device_ID_List_SizeW ++@ stdcall CM_Get_Device_ID_Size(ptr ptr long) setupapi.CM_Get_Device_ID_Size ++@ stub CM_Get_Device_Interface_ListW ++@ stdcall CM_Get_Device_Interface_List_SizeW(ptr ptr wstr long) setupapi.CM_Get_Device_Interface_List_SizeW ++@ stub CM_Get_Device_Interface_PropertyW ++@ stub CM_Get_Device_Interface_Property_KeysW ++@ stdcall CM_Get_Parent(ptr long long) setupapi.CM_Get_Parent ++@ stub CM_Get_Sibling ++@ stdcall CM_Locate_DevNodeW(ptr wstr long) setupapi.CM_Locate_DevNodeW ++@ stub CM_Open_Class_KeyW ++@ stdcall CM_Open_DevNode_Key(long long long long ptr long) setupapi.CM_Open_DevNode_Key ++@ stub CM_Open_Device_Interface_KeyW ++@ stub CM_Query_And_Remove_SubTreeW ++@ stub CM_Register_Notification ++@ stub CM_Set_Class_PropertyW ++@ stdcall CM_Set_Class_Registry_PropertyW(ptr long ptr long long ptr) setupapi.CM_Set_Class_Registry_PropertyW ++@ stub CM_Set_DevNode_PropertyW ++@ stub CM_Set_DevNode_Registry_PropertyW ++@ stub CM_Set_Device_Interface_PropertyW ++@ stub CM_Setup_DevNode ++@ stub CM_Uninstall_DevNode ++@ stub CM_Unregister_Notification +diff --git a/tools/make_specfiles b/tools/make_specfiles +index 4faf665..cd3af87 100755 +--- a/tools/make_specfiles ++++ b/tools/make_specfiles +@@ -105,6 +105,7 @@ my @dll_groups = + [ + "setupapi", + "cfgmgr32", ++ "api-ms-win-devices-config-l1-1-0", + "api-ms-win-devices-config-l1-1-1", + "api-ms-win-devices-query-l1-1-1", + ], +-- +1.9.1 + diff --git a/patches/ml-patches/0010-wnet-Make-WNetGetUniversalNameW-return-required-size.patch b/patches/ml-patches/0010-wnet-Make-WNetGetUniversalNameW-return-required-size.patch new file mode 100644 index 00000000..01a7da15 --- /dev/null +++ b/patches/ml-patches/0010-wnet-Make-WNetGetUniversalNameW-return-required-size.patch @@ -0,0 +1,50 @@ +From 569cd096daa90aa4d4fb8602453843f73feb7fe6 Mon Sep 17 00:00:00 2001 +From: Fabian Maurer +Date: Fri, 20 Jul 2018 21:05:05 +0200 +Subject: [PATCH 10/24] wnet: Make WNetGetUniversalNameW return required size + when buffer is too small and add test + +The pointer is set to the required size not only when the input size +is 0, but generally when it is too small. + +Signed-off-by: Fabian Maurer +--- + dlls/mpr/tests/mpr.c | 5 ++++- + dlls/mpr/wnet.c | 1 + + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/dlls/mpr/tests/mpr.c b/dlls/mpr/tests/mpr.c +index fc067d9..3e5ca09 100644 +--- a/dlls/mpr/tests/mpr.c ++++ b/dlls/mpr/tests/mpr.c +@@ -51,11 +51,14 @@ static void test_WNetGetUniversalName(void) + + ok(info_size == sizeof(buffer), "Got wrong size: %u\n", info_size); + +- fail_size = 0; ++ fail_size = 1; + ret = WNetGetUniversalNameA(driveA, UNIVERSAL_NAME_INFO_LEVEL, + buffer, &fail_size); + if(drive_type == DRIVE_REMOTE) ++ { + todo_wine ok(ret == WN_BAD_VALUE || ret == WN_MORE_DATA, "WNetGetUniversalNameA failed: %08x\n", ret); ++ ok(fail_size > 1, "Got %d\n", fail_size); ++ } + else + ok(ret == WN_NOT_CONNECTED || ret == WN_NO_NET_OR_BAD_PATH, + "(%s) WNetGetUniversalNameW gave wrong error: %u\n", driveA, ret); +diff --git a/dlls/mpr/wnet.c b/dlls/mpr/wnet.c +index ad4f1dd..a2f8a04 100644 +--- a/dlls/mpr/wnet.c ++++ b/dlls/mpr/wnet.c +@@ -2385,6 +2385,7 @@ DWORD WINAPI WNetGetUniversalNameW ( LPCWSTR lpLocalPath, DWORD dwInfoLevel, + size = sizeof(*info) + (lstrlenW(lpLocalPath) + 1) * sizeof(WCHAR); + if (*lpBufferSize < size) + { ++ *lpBufferSize = size; + err = WN_MORE_DATA; + break; + } +-- +1.9.1 + diff --git a/patches/ml-patches/0011-msvcp90-Fix-EOF-delimiter-handling-in-basic_istream-.patch b/patches/ml-patches/0011-msvcp90-Fix-EOF-delimiter-handling-in-basic_istream-.patch new file mode 100644 index 00000000..d2980793 --- /dev/null +++ b/patches/ml-patches/0011-msvcp90-Fix-EOF-delimiter-handling-in-basic_istream-.patch @@ -0,0 +1,43 @@ +From 98b0a706020f3728e01cc7d38a6bba8ed8dd91f5 Mon Sep 17 00:00:00 2001 +From: Piotr Caban +Date: Thu, 26 Jul 2018 14:40:21 +0200 +Subject: [PATCH 11/24] msvcp90: Fix EOF delimiter handling in + basic_istream::ignore. + +Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45495 + +Signed-off-by: Piotr Caban +--- + dlls/msvcp60/ios.c | 2 +- + dlls/msvcp90/ios.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dlls/msvcp60/ios.c b/dlls/msvcp60/ios.c +index 8a5813e..518c8da 100644 +--- a/dlls/msvcp60/ios.c ++++ b/dlls/msvcp60/ios.c +@@ -8101,7 +8101,7 @@ basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *thi + break; + } + +- if(ch==(unsigned char)delim) ++ if(ch==delim) + break; + + this->count++; +diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c +index 6a82db6..e71d30f 100644 +--- a/dlls/msvcp90/ios.c ++++ b/dlls/msvcp90/ios.c +@@ -8583,7 +8583,7 @@ basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *thi + break; + } + +- if(ch==(unsigned char)delim) ++ if(ch==delim) + break; + + this->count++; +-- +1.9.1 + diff --git a/patches/ml-patches/0012-ntoskrnl-Emulate-sti-cli-instructions-on-x86_64.patch b/patches/ml-patches/0012-ntoskrnl-Emulate-sti-cli-instructions-on-x86_64.patch new file mode 100644 index 00000000..aa12d23e --- /dev/null +++ b/patches/ml-patches/0012-ntoskrnl-Emulate-sti-cli-instructions-on-x86_64.patch @@ -0,0 +1,33 @@ +From 7a654e3796602a21c0e8cd93f12e16446ea26678 Mon Sep 17 00:00:00 2001 +From: Fabian Maurer +Date: Sat, 28 Jul 2018 16:31:46 +0200 +Subject: [PATCH 12/24] ntoskrnl: Emulate sti/cli instructions on x86_64 + +Fixes bug 45521. +Thanks to Anastasius Focht for the clear bug report. + +Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45521 +Signed-off-by: Fabian Maurer +--- + dlls/ntoskrnl.exe/instr.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/dlls/ntoskrnl.exe/instr.c b/dlls/ntoskrnl.exe/instr.c +index b2dac58..67cdd32 100644 +--- a/dlls/ntoskrnl.exe/instr.c ++++ b/dlls/ntoskrnl.exe/instr.c +@@ -815,6 +815,11 @@ static DWORD emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context ) + } + break; /* Unable to emulate it */ + } ++ ++ case 0xfa: /* cli */ ++ case 0xfb: /* sti */ ++ context->Rip += prefixlen + 1; ++ return ExceptionContinueExecution; + } + return ExceptionContinueSearch; /* Unable to emulate it */ + } +-- +1.9.1 + diff --git a/patches/ml-patches/0013-winebus.sys-Do-not-report-HID-report-read-errors-unc.patch b/patches/ml-patches/0013-winebus.sys-Do-not-report-HID-report-read-errors-unc.patch new file mode 100644 index 00000000..d6527812 --- /dev/null +++ b/patches/ml-patches/0013-winebus.sys-Do-not-report-HID-report-read-errors-unc.patch @@ -0,0 +1,198 @@ +From 6b416c0b1c963ced6ec11ccf46b9e99650267297 Mon Sep 17 00:00:00 2001 +From: Kai Krakow +Date: Sat, 28 Jul 2018 10:24:04 +0200 +Subject: [PATCH 13/24] winebus.sys: Do not report HID report read errors + unconditionally + +Device reports may come in faster than our consumers could possibly read +them, this is especially true for multi-axis events: When you move a +stick across its range, it will always generate at least two events, one +for the x axis, and one for the y axis. This is not really an error +situation, so let's report this situation only once at most. If we +already know the multi-event situation, let's skip logging this +completely: We won't loose any information anyway because the report +contains a complete device state and only axis positions were updated. + +Thus, this commit adds a parameter to process_hid_report() to let it +know if we are currently processing reports that are known to be sent +multiple times in sequence (with updated reports). + +Also, if our consumers are slow to respond, then report the issue only +once and not per each occurrence during the duration of one consumer +read cycle. + +Finally, this is not really an error, it's a warning at most, thus +degrade the error message to a warning to not pollute peoples consoles +and logs with unimportant stuff. + +Especially during gaming I was seeing screens over screens full of only +this single log message. This commit fixes it. + +Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=43125 +CC: Aric Stewart +Signed-off-by: Aric Stewart +Signed-off-by: Kai Krakow +--- + dlls/winebus.sys/bus.h | 2 +- + dlls/winebus.sys/bus_iohid.c | 2 +- + dlls/winebus.sys/bus_sdl.c | 12 ++++++------ + dlls/winebus.sys/bus_udev.c | 4 ++-- + dlls/winebus.sys/main.c | 18 +++++++++++++++--- + 5 files changed, 25 insertions(+), 13 deletions(-) + +diff --git a/dlls/winebus.sys/bus.h b/dlls/winebus.sys/bus.h +index bf93c04..1e2989e 100644 +--- a/dlls/winebus.sys/bus.h ++++ b/dlls/winebus.sys/bus.h +@@ -45,7 +45,7 @@ DEVICE_OBJECT *bus_create_hid_device(DRIVER_OBJECT *driver, const WCHAR *busidW, + DEVICE_OBJECT *bus_find_hid_device(const platform_vtbl *vtbl, void *platform_dev) DECLSPEC_HIDDEN; + void bus_remove_hid_device(DEVICE_OBJECT *device) DECLSPEC_HIDDEN; + NTSTATUS WINAPI hid_internal_dispatch(DEVICE_OBJECT *device, IRP *irp) DECLSPEC_HIDDEN; +-void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length) DECLSPEC_HIDDEN; ++void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length, BOOL warn_multi_events) DECLSPEC_HIDDEN; + DEVICE_OBJECT* bus_enumerate_hid_devices(const platform_vtbl *vtbl, enum_func function, void* context) DECLSPEC_HIDDEN; + + /* General Bus Functions */ +diff --git a/dlls/winebus.sys/bus_iohid.c b/dlls/winebus.sys/bus_iohid.c +index 501a40d..74e5d82 100644 +--- a/dlls/winebus.sys/bus_iohid.c ++++ b/dlls/winebus.sys/bus_iohid.c +@@ -135,7 +135,7 @@ static void handle_IOHIDDeviceIOHIDReportCallback(void *context, + uint32_t reportID, uint8_t *report, CFIndex report_length) + { + DEVICE_OBJECT *device = (DEVICE_OBJECT*)context; +- process_hid_report(device, report, report_length); ++ process_hid_report(device, report, report_length, TRUE); + } + + static int compare_platform_device(DEVICE_OBJECT *device, void *platform_dev) +diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c +index 159727f..99a206c 100644 +--- a/dlls/winebus.sys/bus_sdl.c ++++ b/dlls/winebus.sys/bus_sdl.c +@@ -683,7 +683,7 @@ static BOOL set_report_from_event(SDL_Event *event) + + set_button_value(ie->button, ie->state, private->report_buffer); + +- process_hid_report(device, private->report_buffer, private->buffer_length); ++ process_hid_report(device, private->report_buffer, private->buffer_length, TRUE); + break; + } + case SDL_JOYAXISMOTION: +@@ -693,7 +693,7 @@ static BOOL set_report_from_event(SDL_Event *event) + if (ie->axis < 6) + { + set_axis_value(private, ie->axis, ie->value); +- process_hid_report(device, private->report_buffer, private->buffer_length); ++ process_hid_report(device, private->report_buffer, private->buffer_length, FALSE); + } + break; + } +@@ -702,7 +702,7 @@ static BOOL set_report_from_event(SDL_Event *event) + SDL_JoyBallEvent *ie = &event->jball; + + set_ball_value(private, ie->ball, ie->xrel, ie->yrel); +- process_hid_report(device, private->report_buffer, private->buffer_length); ++ process_hid_report(device, private->report_buffer, private->buffer_length, FALSE); + break; + } + case SDL_JOYHATMOTION: +@@ -710,7 +710,7 @@ static BOOL set_report_from_event(SDL_Event *event) + SDL_JoyHatEvent *ie = &event->jhat; + + set_hat_value(private, ie->hat, ie->value); +- process_hid_report(device, private->report_buffer, private->buffer_length); ++ process_hid_report(device, private->report_buffer, private->buffer_length, TRUE); + break; + } + default: +@@ -765,7 +765,7 @@ static BOOL set_mapped_report_from_event(SDL_Event *event) + if (usage >= 0) + { + set_button_value(usage, ie->state, private->report_buffer); +- process_hid_report(device, private->report_buffer, private->buffer_length); ++ process_hid_report(device, private->report_buffer, private->buffer_length, TRUE); + } + break; + } +@@ -774,7 +774,7 @@ static BOOL set_mapped_report_from_event(SDL_Event *event) + SDL_ControllerAxisEvent *ie = &event->caxis; + + set_axis_value(private, ie->axis, ie->value); +- process_hid_report(device, private->report_buffer, private->buffer_length); ++ process_hid_report(device, private->report_buffer, private->buffer_length, FALSE); + break; + } + default: +diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c +index d34e18c..47b9758 100644 +--- a/dlls/winebus.sys/bus_udev.c ++++ b/dlls/winebus.sys/bus_udev.c +@@ -768,7 +768,7 @@ static DWORD CALLBACK device_report_thread(void *args) + else if (size == 0) + TRACE_(hid_report)("Failed to read report\n"); + else +- process_hid_report(device, report_buffer, size); ++ process_hid_report(device, report_buffer, size, TRUE); + } + return 0; + } +@@ -979,7 +979,7 @@ static DWORD CALLBACK lnxev_device_report_thread(void *args) + else if (size == 0) + TRACE_(hid_report)("Failed to read report\n"); + else if (set_report_from_event(private, &ie)) +- process_hid_report(device, private->current_report_buffer, private->buffer_length); ++ process_hid_report(device, private->current_report_buffer, private->buffer_length, TRUE); + } + return 0; + } +diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c +index 2f3c05a..624ddd5 100644 +--- a/dlls/winebus.sys/main.c ++++ b/dlls/winebus.sys/main.c +@@ -614,11 +614,12 @@ NTSTATUS WINAPI hid_internal_dispatch(DEVICE_OBJECT *device, IRP *irp) + return status; + } + +-void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length) ++void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length, BOOL warn_multi_events) + { + struct device_extension *ext = (struct device_extension*)device->DeviceExtension; + IRP *irp; + LIST_ENTRY *entry; ++ static int overwrite_reported; + + if (!length || !report) + return; +@@ -641,8 +642,18 @@ void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length) + ext->buffer_size = length; + } + +- if (!ext->last_report_read) +- ERR_(hid_report)("Device reports coming in too fast, last report not read yet!\n"); ++ /* ++ * Device reports may come in faster than our consumers could possibly ++ * read them, this is especially true for multi-axis events: When you move ++ * a stick across its range, it will always generate at least two events, ++ * one for the x axis, and one for the y axis. This is not really an error ++ * situation, so let's report this situation only once at most. If we ++ * already know the multi-event situation, let's skip logging this ++ * completely: We won't loose any information anyway because the report ++ * contains a complete device state and only axis positions were updated. ++ */ ++ if (warn_multi_events && !ext->last_report_read && !overwrite_reported++) ++ WARN_(hid_report)("Device reports coming in too fast, last report not read yet!\n"); + + memcpy(ext->last_report, report, length); + ext->last_report_size = length; +@@ -659,6 +670,7 @@ void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length) + irp->UserBuffer, &irp->IoStatus.Information); + ext->last_report_read = TRUE; + IoCompleteRequest(irp, IO_NO_INCREMENT); ++ overwrite_reported = 0; + } + LeaveCriticalSection(&ext->report_cs); + } +-- +1.9.1 + diff --git a/patches/ml-patches/0014-odbc32-Rename-functions-to-avoid-conflicts-with-nati.patch b/patches/ml-patches/0014-odbc32-Rename-functions-to-avoid-conflicts-with-nati.patch new file mode 100644 index 00000000..c0994b25 --- /dev/null +++ b/patches/ml-patches/0014-odbc32-Rename-functions-to-avoid-conflicts-with-nati.patch @@ -0,0 +1,1365 @@ +From 6520e0216aff376650c3e9c10de49eb616abe3be Mon Sep 17 00:00:00 2001 +From: Daniel Lehman +Date: Thu, 14 Jun 2018 09:43:02 -0700 +Subject: [PATCH 14/24] odbc32: Rename functions to avoid conflicts with native + drivers. + +Signed-off-by: Daniel Lehman +--- + dlls/odbc32/odbc32.spec | 232 ++++++++++++++++++++++----------------------- + dlls/odbc32/proxyodbc.c | 247 +++++++++++++++++++++++++----------------------- + 2 files changed, 243 insertions(+), 236 deletions(-) + +diff --git a/dlls/odbc32/odbc32.spec b/dlls/odbc32/odbc32.spec +index ccb540b..7363f3e 100644 +--- a/dlls/odbc32/odbc32.spec ++++ b/dlls/odbc32/odbc32.spec +@@ -1,81 +1,81 @@ +- 1 stdcall SQLAllocConnect(long ptr) +- 2 stdcall SQLAllocEnv(ptr) +- 3 stdcall SQLAllocStmt(long ptr) +- 4 stdcall SQLBindCol(long long long ptr long ptr) +- 5 stdcall SQLCancel(long) +- 6 stdcall SQLColAttributes(long long long ptr long ptr ptr) +- 7 stdcall SQLConnect(long str long str long str long) +- 8 stdcall SQLDescribeCol(long long str long ptr ptr ptr ptr ptr) +- 9 stdcall SQLDisconnect(long) +- 10 stdcall SQLError(long long long str ptr str long ptr) +- 11 stdcall SQLExecDirect(long str long) +- 12 stdcall SQLExecute(long) +- 13 stdcall SQLFetch(long) +- 14 stdcall SQLFreeConnect(long) +- 15 stdcall SQLFreeEnv(long) +- 16 stdcall SQLFreeStmt(long long ) +- 17 stdcall SQLGetCursorName(long str long ptr) +- 18 stdcall SQLNumResultCols(long ptr) +- 19 stdcall SQLPrepare(long str long) +- 20 stdcall SQLRowCount(long ptr) +- 21 stdcall SQLSetCursorName(long str long) +- 22 stdcall SQLSetParam(long long long long long long ptr ptr) +- 23 stdcall SQLTransact(long long long) +- 24 stdcall SQLAllocHandle(long long ptr) +- 25 stdcall SQLBindParam(long long long long long long ptr ptr) +- 26 stdcall SQLCloseCursor(long) +- 27 stdcall SQLColAttribute(long long long ptr long ptr ptr) +- 28 stdcall SQLCopyDesc(long long) +- 29 stdcall SQLEndTran(long long long) +- 30 stdcall SQLFetchScroll(long long long) +- 31 stdcall SQLFreeHandle(long long) +- 32 stdcall SQLGetConnectAttr(long long ptr long ptr) +- 33 stdcall SQLGetDescField(long long long ptr long ptr) +- 34 stdcall SQLGetDescRec(long long str long ptr ptr ptr ptr ptr ptr ptr) +- 35 stdcall SQLGetDiagField(long long long long ptr long ptr) +- 36 stdcall SQLGetDiagRec(long long long str ptr str long ptr) +- 37 stdcall SQLGetEnvAttr(long long ptr long ptr) +- 38 stdcall SQLGetStmtAttr(long long ptr long ptr) +- 39 stdcall SQLSetConnectAttr(long long ptr long) +- 40 stdcall SQLColumns(long str long str long str long str long) +- 41 stdcall SQLDriverConnect(long long str long str long ptr long) +- 42 stdcall SQLGetConnectOption(long long ptr) +- 43 stdcall SQLGetData(long long long ptr long ptr) +- 44 stdcall SQLGetFunctions(long long ptr) +- 45 stdcall SQLGetInfo(long long ptr long ptr) +- 46 stdcall SQLGetStmtOption(long long ptr) +- 47 stdcall SQLGetTypeInfo(long long) +- 48 stdcall SQLParamData(long ptr) +- 49 stdcall SQLPutData(long ptr long) +- 50 stdcall SQLSetConnectOption(long long long) +- 51 stdcall SQLSetStmtOption(long long long) +- 52 stdcall SQLSpecialColumns(long long str long str long str long long long) +- 53 stdcall SQLStatistics(long str long str long str long long long) +- 54 stdcall SQLTables(long str long str long str long str long) +- 55 stdcall SQLBrowseConnect(long str long str long ptr) +- 56 stdcall SQLColumnPrivileges(long str long str long str long str long) +- 57 stdcall SQLDataSources(long long str long ptr str long ptr) +- 58 stdcall SQLDescribeParam(long long ptr ptr ptr ptr) +- 59 stdcall SQLExtendedFetch(long long long ptr ptr) +- 60 stdcall SQLForeignKeys(long str long str long str long str long str long str long) +- 61 stdcall SQLMoreResults(long) +- 62 stdcall SQLNativeSql(long str long str long ptr) +- 63 stdcall SQLNumParams(long ptr) +- 64 stdcall SQLParamOptions(long long ptr) +- 65 stdcall SQLPrimaryKeys(long str long str long str long) +- 66 stdcall SQLProcedureColumns(long str long str long str long str long) +- 67 stdcall SQLProcedures(long str long str long str long) +- 68 stdcall SQLSetPos(long long long long) +- 69 stdcall SQLSetScrollOptions(long long long long) +- 70 stdcall SQLTablePrivileges(long str long str long str long) +- 71 stdcall SQLDrivers(long long str long ptr str long ptr) +- 72 stdcall SQLBindParameter(long long long long long long long ptr long ptr) +- 73 stdcall SQLSetDescField(long long long ptr long) +- 74 stdcall SQLSetDescRec(long long long long long long long ptr ptr ptr) +- 75 stdcall SQLSetEnvAttr(long long ptr long) +- 76 stdcall SQLSetStmtAttr(long long ptr long) +- 77 stdcall SQLAllocHandleStd(long long ptr) +- 78 stdcall SQLBulkOperations(long long) ++ 1 stdcall SQLAllocConnect(long ptr) ODBC32_SQLAllocConnect ++ 2 stdcall SQLAllocEnv(ptr) ODBC32_SQLAllocEnv ++ 3 stdcall SQLAllocStmt(long ptr) ODBC32_SQLAllocStmt ++ 4 stdcall SQLBindCol(long long long ptr long ptr) ODBC32_SQLBindCol ++ 5 stdcall SQLCancel(long) ODBC32_SQLCancel ++ 6 stdcall SQLColAttributes(long long long ptr long ptr ptr) ODBC32_SQLColAttributes ++ 7 stdcall SQLConnect(long str long str long str long) ODBC32_SQLConnect ++ 8 stdcall SQLDescribeCol(long long str long ptr ptr ptr ptr ptr) ODBC32_SQLDescribeCol ++ 9 stdcall SQLDisconnect(long) ODBC32_SQLDisconnect ++ 10 stdcall SQLError(long long long str ptr str long ptr) ODBC32_SQLError ++ 11 stdcall SQLExecDirect(long str long) ODBC32_SQLExecDirect ++ 12 stdcall SQLExecute(long) ODBC32_SQLExecute ++ 13 stdcall SQLFetch(long) ODBC32_SQLFetch ++ 14 stdcall SQLFreeConnect(long) ODBC32_SQLFreeConnect ++ 15 stdcall SQLFreeEnv(long) ODBC32_SQLFreeEnv ++ 16 stdcall SQLFreeStmt(long long ) ODBC32_SQLFreeStmt ++ 17 stdcall SQLGetCursorName(long str long ptr) ODBC32_SQLGetCursorName ++ 18 stdcall SQLNumResultCols(long ptr) ODBC32_SQLNumResultCols ++ 19 stdcall SQLPrepare(long str long) ODBC32_SQLPrepare ++ 20 stdcall SQLRowCount(long ptr) ODBC32_SQLRowCount ++ 21 stdcall SQLSetCursorName(long str long) ODBC32_SQLSetCursorName ++ 22 stdcall SQLSetParam(long long long long long long ptr ptr) ODBC32_SQLSetParam ++ 23 stdcall SQLTransact(long long long) ODBC32_SQLTransact ++ 24 stdcall SQLAllocHandle(long long ptr) ODBC32_SQLAllocHandle ++ 25 stdcall SQLBindParam(long long long long long long ptr ptr) ODBC32_SQLBindParam ++ 26 stdcall SQLCloseCursor(long) ODBC32_SQLCloseCursor ++ 27 stdcall SQLColAttribute(long long long ptr long ptr ptr) ODBC32_SQLColAttribute ++ 28 stdcall SQLCopyDesc(long long) ODBC32_SQLCopyDesc ++ 29 stdcall SQLEndTran(long long long) ODBC32_SQLEndTran ++ 30 stdcall SQLFetchScroll(long long long) ODBC32_SQLFetchScroll ++ 31 stdcall SQLFreeHandle(long long) ODBC32_SQLFreeHandle ++ 32 stdcall SQLGetConnectAttr(long long ptr long ptr) ODBC32_SQLGetConnectAttr ++ 33 stdcall SQLGetDescField(long long long ptr long ptr) ODBC32_SQLGetDescField ++ 34 stdcall SQLGetDescRec(long long str long ptr ptr ptr ptr ptr ptr ptr) ODBC32_SQLGetDescRec ++ 35 stdcall SQLGetDiagField(long long long long ptr long ptr) ODBC32_SQLGetDiagField ++ 36 stdcall SQLGetDiagRec(long long long str ptr str long ptr) ODBC32_SQLGetDiagRec ++ 37 stdcall SQLGetEnvAttr(long long ptr long ptr) ODBC32_SQLGetEnvAttr ++ 38 stdcall SQLGetStmtAttr(long long ptr long ptr) ODBC32_SQLGetStmtAttr ++ 39 stdcall SQLSetConnectAttr(long long ptr long) ODBC32_SQLSetConnectAttr ++ 40 stdcall SQLColumns(long str long str long str long str long) ODBC32_SQLColumns ++ 41 stdcall SQLDriverConnect(long long str long str long ptr long) ODBC32_SQLDriverConnect ++ 42 stdcall SQLGetConnectOption(long long ptr) ODBC32_SQLGetConnectOption ++ 43 stdcall SQLGetData(long long long ptr long ptr) ODBC32_SQLGetData ++ 44 stdcall SQLGetFunctions(long long ptr) ODBC32_SQLGetFunctions ++ 45 stdcall SQLGetInfo(long long ptr long ptr) ODBC32_SQLGetInfo ++ 46 stdcall SQLGetStmtOption(long long ptr) ODBC32_SQLGetStmtOption ++ 47 stdcall SQLGetTypeInfo(long long) ODBC32_SQLGetTypeInfo ++ 48 stdcall SQLParamData(long ptr) ODBC32_SQLParamData ++ 49 stdcall SQLPutData(long ptr long) ODBC32_SQLPutData ++ 50 stdcall SQLSetConnectOption(long long long) ODBC32_SQLSetConnectOption ++ 51 stdcall SQLSetStmtOption(long long long) ODBC32_SQLSetStmtOption ++ 52 stdcall SQLSpecialColumns(long long str long str long str long long long) ODBC32_SQLSpecialColumns ++ 53 stdcall SQLStatistics(long str long str long str long long long) ODBC32_SQLStatistics ++ 54 stdcall SQLTables(long str long str long str long str long) ODBC32_SQLTables ++ 55 stdcall SQLBrowseConnect(long str long str long ptr) ODBC32_SQLBrowseConnect ++ 56 stdcall SQLColumnPrivileges(long str long str long str long str long) ODBC32_SQLColumnPrivileges ++ 57 stdcall SQLDataSources(long long str long ptr str long ptr) ODBC32_SQLDataSources ++ 58 stdcall SQLDescribeParam(long long ptr ptr ptr ptr) ODBC32_SQLDescribeParam ++ 59 stdcall SQLExtendedFetch(long long long ptr ptr) ODBC32_SQLExtendedFetch ++ 60 stdcall SQLForeignKeys(long str long str long str long str long str long str long) ODBC32_SQLForeignKeys ++ 61 stdcall SQLMoreResults(long) ODBC32_SQLMoreResults ++ 62 stdcall SQLNativeSql(long str long str long ptr) ODBC32_SQLNativeSql ++ 63 stdcall SQLNumParams(long ptr) ODBC32_SQLNumParams ++ 64 stdcall SQLParamOptions(long long ptr) ODBC32_SQLParamOptions ++ 65 stdcall SQLPrimaryKeys(long str long str long str long) ODBC32_SQLPrimaryKeys ++ 66 stdcall SQLProcedureColumns(long str long str long str long str long) ODBC32_SQLProcedureColumns ++ 67 stdcall SQLProcedures(long str long str long str long) ODBC32_SQLProcedures ++ 68 stdcall SQLSetPos(long long long long) ODBC32_SQLSetPos ++ 69 stdcall SQLSetScrollOptions(long long long long) ODBC32_SQLSetScrollOptions ++ 70 stdcall SQLTablePrivileges(long str long str long str long) ODBC32_SQLTablePrivileges ++ 71 stdcall SQLDrivers(long long str long ptr str long ptr) ODBC32_SQLDrivers ++ 72 stdcall SQLBindParameter(long long long long long long long ptr long ptr) ODBC32_SQLBindParameter ++ 73 stdcall SQLSetDescField(long long long ptr long) ODBC32_SQLSetDescField ++ 74 stdcall SQLSetDescRec(long long long long long long long ptr ptr ptr) ODBC32_SQLSetDescRec ++ 75 stdcall SQLSetEnvAttr(long long ptr long) ODBC32_SQLSetEnvAttr ++ 76 stdcall SQLSetStmtAttr(long long ptr long) ODBC32_SQLSetStmtAttr ++ 77 stdcall SQLAllocHandleStd(long long ptr) ODBC32_SQLAllocHandleStd ++ 78 stdcall SQLBulkOperations(long long) ODBC32_SQLBulkOperations + 79 stub CloseODBCPerfData + 80 stub CollectODBCPerfData + 81 stub CursorLibLockDbc +@@ -86,43 +86,43 @@ + 86 stub ODBSetTryWaitValue + 89 stub ODBCSharedPerfMon + 90 stub ODBCSharedVSFlag +-106 stdcall SQLColAttributesW(long long long ptr long ptr ptr) +-107 stdcall SQLConnectW(long wstr long wstr long wstr long) +-108 stdcall SQLDescribeColW(long long wstr long ptr ptr ptr ptr ptr) +-110 stdcall SQLErrorW(long long long wstr ptr wstr long ptr) +-111 stdcall SQLExecDirectW(long wstr long) +-117 stdcall SQLGetCursorNameW(long wstr long ptr) +-119 stdcall SQLPrepareW(long wstr long) +-121 stdcall SQLSetCursorNameW(long wstr long) +-127 stdcall SQLColAttributeW(long long long ptr long ptr ptr) +-132 stdcall SQLGetConnectAttrW(long long ptr long ptr) +-133 stdcall SQLGetDescFieldW(long long long ptr long ptr) +-134 stdcall SQLGetDescRecW(long long wstr long ptr ptr ptr ptr ptr ptr ptr) +-135 stdcall SQLGetDiagFieldW(long long long long ptr long ptr) +-136 stdcall SQLGetDiagRecW(long long long wstr ptr wstr long ptr) +-138 stdcall SQLGetStmtAttrW(long long ptr long ptr) +-139 stdcall SQLSetConnectAttrW(long long ptr long) +-140 stdcall SQLColumnsW(long wstr long wstr long wstr long wstr long) +-141 stdcall SQLDriverConnectW(long long wstr long wstr long ptr long) +-142 stdcall SQLGetConnectOptionW(long long ptr) +-145 stdcall SQLGetInfoW(long long ptr long ptr) +-147 stdcall SQLGetTypeInfoW(long long) +-150 stdcall SQLSetConnectOptionW(long long long) +-152 stdcall SQLSpecialColumnsW(long long wstr long wstr long wstr long long long) +-153 stdcall SQLStatisticsW(long wstr long wstr long wstr long long long) +-154 stdcall SQLTablesW(long wstr long wstr long wstr long wstr long) +-155 stdcall SQLBrowseConnectW(long wstr long wstr long ptr) +-156 stdcall SQLColumnPrivilegesW(long wstr long wstr long wstr long wstr long) +-157 stdcall SQLDataSourcesW(long long wstr long ptr wstr long ptr) +-160 stdcall SQLForeignKeysW(long wstr long wstr long wstr long wstr long wstr long wstr long) +-162 stdcall SQLNativeSqlW(long wstr long wstr long ptr) +-165 stdcall SQLPrimaryKeysW(long wstr long wstr long wstr long) +-166 stdcall SQLProcedureColumnsW(long wstr long wstr long wstr long wstr long) +-167 stdcall SQLProceduresW(long wstr long wstr long wstr long) +-170 stdcall SQLTablePrivilegesW(long wstr long wstr long wstr long) +-171 stdcall SQLDriversW(long long wstr long ptr wstr long ptr) +-173 stdcall SQLSetDescFieldW(long long long ptr long) +-176 stdcall SQLSetStmtAttrW(long long ptr long) ++106 stdcall SQLColAttributesW(long long long ptr long ptr ptr) ODBC32_SQLColAttributesW ++107 stdcall SQLConnectW(long wstr long wstr long wstr long) ODBC32_SQLConnectW ++108 stdcall SQLDescribeColW(long long wstr long ptr ptr ptr ptr ptr) ODBC32_SQLDescribeColW ++110 stdcall SQLErrorW(long long long wstr ptr wstr long ptr) ODBC32_SQLErrorW ++111 stdcall SQLExecDirectW(long wstr long) ODBC32_SQLExecDirectW ++117 stdcall SQLGetCursorNameW(long wstr long ptr) ODBC32_SQLGetCursorNameW ++119 stdcall SQLPrepareW(long wstr long) ODBC32_SQLPrepareW ++121 stdcall SQLSetCursorNameW(long wstr long) ODBC32_SQLSetCursorNameW ++127 stdcall SQLColAttributeW(long long long ptr long ptr ptr) ODBC32_SQLColAttributeW ++132 stdcall SQLGetConnectAttrW(long long ptr long ptr) ODBC32_SQLGetConnectAttrW ++133 stdcall SQLGetDescFieldW(long long long ptr long ptr) ODBC32_SQLGetDescFieldW ++134 stdcall SQLGetDescRecW(long long wstr long ptr ptr ptr ptr ptr ptr ptr) ODBC32_SQLGetDescRecW ++135 stdcall SQLGetDiagFieldW(long long long long ptr long ptr) ODBC32_SQLGetDiagFieldW ++136 stdcall SQLGetDiagRecW(long long long wstr ptr wstr long ptr) ODBC32_SQLGetDiagRecW ++138 stdcall SQLGetStmtAttrW(long long ptr long ptr) ODBC32_SQLGetStmtAttrW ++139 stdcall SQLSetConnectAttrW(long long ptr long) ODBC32_SQLSetConnectAttrW ++140 stdcall SQLColumnsW(long wstr long wstr long wstr long wstr long) ODBC32_SQLColumnsW ++141 stdcall SQLDriverConnectW(long long wstr long wstr long ptr long) ODBC32_SQLDriverConnectW ++142 stdcall SQLGetConnectOptionW(long long ptr) ODBC32_SQLGetConnectOptionW ++145 stdcall SQLGetInfoW(long long ptr long ptr) ODBC32_SQLGetInfoW ++147 stdcall SQLGetTypeInfoW(long long) ODBC32_SQLGetTypeInfoW ++150 stdcall SQLSetConnectOptionW(long long long) ODBC32_SQLSetConnectOptionW ++152 stdcall SQLSpecialColumnsW(long long wstr long wstr long wstr long long long) ODBC32_SQLSpecialColumnsW ++153 stdcall SQLStatisticsW(long wstr long wstr long wstr long long long) ODBC32_SQLStatisticsW ++154 stdcall SQLTablesW(long wstr long wstr long wstr long wstr long) ODBC32_SQLTablesW ++155 stdcall SQLBrowseConnectW(long wstr long wstr long ptr) ODBC32_SQLBrowseConnectW ++156 stdcall SQLColumnPrivilegesW(long wstr long wstr long wstr long wstr long) ODBC32_SQLColumnPrivilegesW ++157 stdcall SQLDataSourcesW(long long wstr long ptr wstr long ptr) ODBC32_SQLDataSourcesW ++160 stdcall SQLForeignKeysW(long wstr long wstr long wstr long wstr long wstr long wstr long) ODBC32_SQLForeignKeysW ++162 stdcall SQLNativeSqlW(long wstr long wstr long ptr) ODBC32_SQLNativeSqlW ++165 stdcall SQLPrimaryKeysW(long wstr long wstr long wstr long) ODBC32_SQLPrimaryKeysW ++166 stdcall SQLProcedureColumnsW(long wstr long wstr long wstr long wstr long) ODBC32_SQLProcedureColumnsW ++167 stdcall SQLProceduresW(long wstr long wstr long wstr long) ODBC32_SQLProceduresW ++170 stdcall SQLTablePrivilegesW(long wstr long wstr long wstr long) ODBC32_SQLTablePrivilegesW ++171 stdcall SQLDriversW(long long wstr long ptr wstr long ptr) ODBC32_SQLDriversW ++173 stdcall SQLSetDescFieldW(long long long ptr long) ODBC32_SQLSetDescFieldW ++176 stdcall SQLSetStmtAttrW(long long ptr long) ODBC32_SQLSetStmtAttrW + 206 stub SQLColAttributesA + 207 stub SQLConnectA + 208 stub SQLDescribeColA +@@ -150,7 +150,7 @@ + 254 stub SQLTablesA + 255 stub SQLBrowseConnectA + 256 stub SQLColumnPrivilegesA +-257 stdcall SQLDataSourcesA(long long str long ptr str long ptr) ++257 stdcall SQLDataSourcesA(long long str long ptr str long ptr) ODBC32_SQLDataSourcesA + 260 stub SQLForeignKeysA + 262 stub SQLNativeSqlA + 265 stub SQLPrimaryKeysA +diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c +index 7e434cb..75f94a8 100644 +--- a/dlls/odbc32/proxyodbc.c ++++ b/dlls/odbc32/proxyodbc.c +@@ -175,6 +175,13 @@ static SQLRETURN (*pSQLTransact)(SQLHENV,SQLHDBC,SQLUSMALLINT); + static void *dmHandle; + static int nErrorType; + ++SQLRETURN WINAPI ODBC32_SQLAllocEnv(SQLHENV *); ++SQLRETURN WINAPI ODBC32_SQLFreeEnv(SQLHENV); ++SQLRETURN WINAPI ODBC32_SQLDataSources(SQLHENV, SQLUSMALLINT, SQLCHAR *, SQLSMALLINT, ++ SQLSMALLINT *, SQLCHAR *, SQLSMALLINT, SQLSMALLINT *); ++SQLRETURN WINAPI ODBC32_SQLDrivers(SQLHENV, SQLUSMALLINT, SQLCHAR *, SQLSMALLINT, SQLSMALLINT *, ++ SQLCHAR *, SQLSMALLINT, SQLSMALLINT *); ++ + /*********************************************************************** + * ODBC_ReplicateODBCInstToRegistry + * +@@ -218,7 +225,7 @@ static void ODBC_ReplicateODBCInstToRegistry (SQLHENV hEnv) + + success = TRUE; + dirn = SQL_FETCH_FIRST; +- while ((sql_ret = SQLDrivers (hEnv, dirn, (SQLCHAR*)desc, sizeof(desc), ++ while ((sql_ret = ODBC32_SQLDrivers (hEnv, dirn, (SQLCHAR*)desc, sizeof(desc), + &sizedesc, NULL, 0, NULL)) == SQL_SUCCESS || + sql_ret == SQL_SUCCESS_WITH_INFO) + { +@@ -345,7 +352,7 @@ static void ODBC_ReplicateODBCToRegistry (BOOL is_user, SQLHENV hEnv) + { + success = TRUE; + dirn = is_user ? SQL_FETCH_FIRST_USER : SQL_FETCH_FIRST_SYSTEM; +- while ((sql_ret = SQLDataSources (hEnv, dirn, ++ while ((sql_ret = ODBC32_SQLDataSources (hEnv, dirn, + (SQLCHAR*)dsn, sizeof(dsn), &sizedsn, + (SQLCHAR*)desc, sizeof(desc), &sizedesc)) == SQL_SUCCESS + || sql_ret == SQL_SUCCESS_WITH_INFO) +@@ -445,13 +452,13 @@ static void ODBC_ReplicateToRegistry (void) + SQLRETURN sql_ret; + SQLHENV hEnv; + +- if ((sql_ret = SQLAllocEnv (&hEnv)) == SQL_SUCCESS) ++ if ((sql_ret = ODBC32_SQLAllocEnv (&hEnv)) == SQL_SUCCESS) + { + ODBC_ReplicateODBCInstToRegistry (hEnv); + ODBC_ReplicateODBCToRegistry (FALSE /* system dsns */, hEnv); + ODBC_ReplicateODBCToRegistry (TRUE /* user dsns */, hEnv); + +- if ((sql_ret = SQLFreeEnv (hEnv)) != SQL_SUCCESS) ++ if ((sql_ret = ODBC32_SQLFreeEnv (hEnv)) != SQL_SUCCESS) + { + TRACE ("Error %d freeing the SQL environment.\n", (int)sql_ret); + } +@@ -671,7 +678,7 @@ static BOOL ODBC_LoadDMFunctions(void) + /************************************************************************* + * SQLAllocConnect [ODBC32.001] + */ +-SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle) ++SQLRETURN WINAPI ODBC32_SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle) + { + SQLRETURN ret; + TRACE("(EnvironmentHandle %p)\n",EnvironmentHandle); +@@ -692,7 +699,7 @@ SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionH + /************************************************************************* + * SQLAllocEnv [ODBC32.002] + */ +-SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle) ++SQLRETURN WINAPI ODBC32_SQLAllocEnv(SQLHENV *EnvironmentHandle) + { + SQLRETURN ret; + TRACE("\n"); +@@ -713,7 +720,7 @@ SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle) + /************************************************************************* + * SQLAllocHandle [ODBC32.024] + */ +-SQLRETURN WINAPI SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandle) ++SQLRETURN WINAPI ODBC32_SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandle) + { + SQLRETURN ret; + TRACE("(Type %d, Handle %p)\n", HandleType, InputHandle); +@@ -745,7 +752,7 @@ SQLRETURN WINAPI SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, S + /************************************************************************* + * SQLAllocStmt [ODBC32.003] + */ +-SQLRETURN WINAPI SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle) ++SQLRETURN WINAPI ODBC32_SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle) + { + SQLRETURN ret; + +@@ -767,7 +774,7 @@ SQLRETURN WINAPI SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandl + /************************************************************************* + * SQLAllocHandleStd [ODBC32.077] + */ +-SQLRETURN WINAPI SQLAllocHandleStd( SQLSMALLINT HandleType, ++SQLRETURN WINAPI ODBC32_SQLAllocHandleStd( SQLSMALLINT HandleType, + SQLHANDLE InputHandle, SQLHANDLE *OutputHandle) + { + TRACE("ProxyODBC: SQLAllocHandleStd.\n"); +@@ -796,7 +803,7 @@ SQLRETURN WINAPI SQLAllocHandleStd( SQLSMALLINT HandleType, + /************************************************************************* + * SQLBindCol [ODBC32.004] + */ +-SQLRETURN WINAPI SQLBindCol(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLBindCol(SQLHSTMT StatementHandle, + SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, + SQLPOINTER TargetValue, SQLLEN BufferLength, + SQLLEN *StrLen_or_Ind) +@@ -817,7 +824,7 @@ SQLRETURN WINAPI SQLBindCol(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLBindParam [ODBC32.025] + */ +-SQLRETURN WINAPI SQLBindParam(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLBindParam(SQLHSTMT StatementHandle, + SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, + SQLSMALLINT ParameterType, SQLULEN LengthPrecision, + SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, +@@ -835,7 +842,7 @@ SQLRETURN WINAPI SQLBindParam(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLCancel [ODBC32.005] + */ +-SQLRETURN WINAPI SQLCancel(SQLHSTMT StatementHandle) ++SQLRETURN WINAPI ODBC32_SQLCancel(SQLHSTMT StatementHandle) + { + TRACE("\n"); + +@@ -847,7 +854,7 @@ SQLRETURN WINAPI SQLCancel(SQLHSTMT StatementHandle) + /************************************************************************* + * SQLCloseCursor [ODBC32.026] + */ +-SQLRETURN WINAPI SQLCloseCursor(SQLHSTMT StatementHandle) ++SQLRETURN WINAPI ODBC32_SQLCloseCursor(SQLHSTMT StatementHandle) + { + SQLRETURN ret; + TRACE("(Handle %p)\n", StatementHandle); +@@ -863,7 +870,7 @@ SQLRETURN WINAPI SQLCloseCursor(SQLHSTMT StatementHandle) + /************************************************************************* + * SQLColAttribute [ODBC32.027] + */ +-SQLRETURN WINAPI SQLColAttribute (SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLColAttribute (SQLHSTMT StatementHandle, + SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, + SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, + SQLSMALLINT *StringLength, SQLLEN *NumericAttribute) +@@ -879,7 +886,7 @@ SQLRETURN WINAPI SQLColAttribute (SQLHSTMT StatementHandle, + /************************************************************************* + * SQLColumns [ODBC32.040] + */ +-SQLRETURN WINAPI SQLColumns(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLColumns(SQLHSTMT StatementHandle, + SQLCHAR *CatalogName, SQLSMALLINT NameLength1, + SQLCHAR *SchemaName, SQLSMALLINT NameLength2, + SQLCHAR *TableName, SQLSMALLINT NameLength3, +@@ -896,7 +903,7 @@ SQLRETURN WINAPI SQLColumns(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLConnect [ODBC32.007] + */ +-SQLRETURN WINAPI SQLConnect(SQLHDBC ConnectionHandle, ++SQLRETURN WINAPI ODBC32_SQLConnect(SQLHDBC ConnectionHandle, + SQLCHAR *ServerName, SQLSMALLINT NameLength1, + SQLCHAR *UserName, SQLSMALLINT NameLength2, + SQLCHAR *Authentication, SQLSMALLINT NameLength3) +@@ -917,7 +924,7 @@ SQLRETURN WINAPI SQLConnect(SQLHDBC ConnectionHandle, + /************************************************************************* + * SQLCopyDesc [ODBC32.028] + */ +-SQLRETURN WINAPI SQLCopyDesc(SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle) ++SQLRETURN WINAPI ODBC32_SQLCopyDesc(SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle) + { + TRACE("\n"); + +@@ -929,7 +936,7 @@ SQLRETURN WINAPI SQLCopyDesc(SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandl + /************************************************************************* + * SQLDataSources [ODBC32.057] + */ +-SQLRETURN WINAPI SQLDataSources(SQLHENV EnvironmentHandle, ++SQLRETURN WINAPI ODBC32_SQLDataSources(SQLHENV EnvironmentHandle, + SQLUSMALLINT Direction, SQLCHAR *ServerName, + SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1, + SQLCHAR *Description, SQLSMALLINT BufferLength2, +@@ -957,7 +964,7 @@ SQLRETURN WINAPI SQLDataSources(SQLHENV EnvironmentHandle, + return ret; + } + +-SQLRETURN WINAPI SQLDataSourcesA(SQLHENV EnvironmentHandle, ++SQLRETURN WINAPI ODBC32_SQLDataSourcesA(SQLHENV EnvironmentHandle, + SQLUSMALLINT Direction, SQLCHAR *ServerName, + SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1, + SQLCHAR *Description, SQLSMALLINT BufferLength2, +@@ -987,7 +994,7 @@ SQLRETURN WINAPI SQLDataSourcesA(SQLHENV EnvironmentHandle, + /************************************************************************* + * SQLDescribeCol [ODBC32.008] + */ +-SQLRETURN WINAPI SQLDescribeCol(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLDescribeCol(SQLHSTMT StatementHandle, + SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName, + SQLSMALLINT BufferLength, SQLSMALLINT *NameLength, + SQLSMALLINT *DataType, SQLULEN *ColumnSize, +@@ -1004,7 +1011,7 @@ SQLRETURN WINAPI SQLDescribeCol(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLDisconnect [ODBC32.009] + */ +-SQLRETURN WINAPI SQLDisconnect(SQLHDBC ConnectionHandle) ++SQLRETURN WINAPI ODBC32_SQLDisconnect(SQLHDBC ConnectionHandle) + { + SQLRETURN ret; + TRACE("(Handle %p)\n", ConnectionHandle); +@@ -1020,7 +1027,7 @@ SQLRETURN WINAPI SQLDisconnect(SQLHDBC ConnectionHandle) + /************************************************************************* + * SQLEndTran [ODBC32.029] + */ +-SQLRETURN WINAPI SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType) ++SQLRETURN WINAPI ODBC32_SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType) + { + TRACE("\n"); + +@@ -1032,7 +1039,7 @@ SQLRETURN WINAPI SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLIN + /************************************************************************* + * SQLError [ODBC32.010] + */ +-SQLRETURN WINAPI SQLError(SQLHENV EnvironmentHandle, ++SQLRETURN WINAPI ODBC32_SQLError(SQLHENV EnvironmentHandle, + SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle, + SQLCHAR *Sqlstate, SQLINTEGER *NativeError, + SQLCHAR *MessageText, SQLSMALLINT BufferLength, +@@ -1059,7 +1066,7 @@ SQLRETURN WINAPI SQLError(SQLHENV EnvironmentHandle, + /************************************************************************* + * SQLExecDirect [ODBC32.011] + */ +-SQLRETURN WINAPI SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength) ++SQLRETURN WINAPI ODBC32_SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength) + { + TRACE("\n"); + +@@ -1071,7 +1078,7 @@ SQLRETURN WINAPI SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, + /************************************************************************* + * SQLExecute [ODBC32.012] + */ +-SQLRETURN WINAPI SQLExecute(SQLHSTMT StatementHandle) ++SQLRETURN WINAPI ODBC32_SQLExecute(SQLHSTMT StatementHandle) + { + TRACE("\n"); + +@@ -1083,7 +1090,7 @@ SQLRETURN WINAPI SQLExecute(SQLHSTMT StatementHandle) + /************************************************************************* + * SQLFetch [ODBC32.013] + */ +-SQLRETURN WINAPI SQLFetch(SQLHSTMT StatementHandle) ++SQLRETURN WINAPI ODBC32_SQLFetch(SQLHSTMT StatementHandle) + { + TRACE("\n"); + +@@ -1095,7 +1102,7 @@ SQLRETURN WINAPI SQLFetch(SQLHSTMT StatementHandle) + /************************************************************************* + * SQLFetchScroll [ODBC32.030] + */ +-SQLRETURN WINAPI SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLLEN FetchOffset) ++SQLRETURN WINAPI ODBC32_SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLLEN FetchOffset) + { + TRACE("\n"); + +@@ -1107,7 +1114,7 @@ SQLRETURN WINAPI SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrien + /************************************************************************* + * SQLFreeConnect [ODBC32.014] + */ +-SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle) ++SQLRETURN WINAPI ODBC32_SQLFreeConnect(SQLHDBC ConnectionHandle) + { + SQLRETURN ret; + TRACE("(Handle %p)\n", ConnectionHandle); +@@ -1123,7 +1130,7 @@ SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle) + /************************************************************************* + * SQLFreeEnv [ODBC32.015] + */ +-SQLRETURN WINAPI SQLFreeEnv(SQLHENV EnvironmentHandle) ++SQLRETURN WINAPI ODBC32_SQLFreeEnv(SQLHENV EnvironmentHandle) + { + SQLRETURN ret; + TRACE("(EnvironmentHandle %p)\n",EnvironmentHandle); +@@ -1139,7 +1146,7 @@ SQLRETURN WINAPI SQLFreeEnv(SQLHENV EnvironmentHandle) + /************************************************************************* + * SQLFreeHandle [ODBC32.031] + */ +-SQLRETURN WINAPI SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle) ++SQLRETURN WINAPI ODBC32_SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle) + { + SQLRETURN ret; + TRACE("(Type %d, Handle %p)\n", HandleType, Handle); +@@ -1155,7 +1162,7 @@ SQLRETURN WINAPI SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle) + /************************************************************************* + * SQLFreeStmt [ODBC32.016] + */ +-SQLRETURN WINAPI SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option) ++SQLRETURN WINAPI ODBC32_SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option) + { + SQLRETURN ret; + TRACE("(Handle %p, Option %d)\n", StatementHandle, Option); +@@ -1171,7 +1178,7 @@ SQLRETURN WINAPI SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option) + /************************************************************************* + * SQLGetConnectAttr [ODBC32.032] + */ +-SQLRETURN WINAPI SQLGetConnectAttr(SQLHDBC ConnectionHandle, ++SQLRETURN WINAPI ODBC32_SQLGetConnectAttr(SQLHDBC ConnectionHandle, + SQLINTEGER Attribute, SQLPOINTER Value, + SQLINTEGER BufferLength, SQLINTEGER *StringLength) + { +@@ -1186,7 +1193,7 @@ SQLRETURN WINAPI SQLGetConnectAttr(SQLHDBC ConnectionHandle, + /************************************************************************* + * SQLGetConnectOption [ODBC32.042] + */ +-SQLRETURN WINAPI SQLGetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value) ++SQLRETURN WINAPI ODBC32_SQLGetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value) + { + TRACE("\n"); + +@@ -1198,7 +1205,7 @@ SQLRETURN WINAPI SQLGetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Opti + /************************************************************************* + * SQLGetCursorName [ODBC32.017] + */ +-SQLRETURN WINAPI SQLGetCursorName(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLGetCursorName(SQLHSTMT StatementHandle, + SQLCHAR *CursorName, SQLSMALLINT BufferLength, + SQLSMALLINT *NameLength) + { +@@ -1212,7 +1219,7 @@ SQLRETURN WINAPI SQLGetCursorName(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLGetData [ODBC32.043] + */ +-SQLRETURN WINAPI SQLGetData(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLGetData(SQLHSTMT StatementHandle, + SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, + SQLPOINTER TargetValue, SQLLEN BufferLength, + SQLLEN *StrLen_or_Ind) +@@ -1228,7 +1235,7 @@ SQLRETURN WINAPI SQLGetData(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLGetDescField [ODBC32.033] + */ +-SQLRETURN WINAPI SQLGetDescField(SQLHDESC DescriptorHandle, ++SQLRETURN WINAPI ODBC32_SQLGetDescField(SQLHDESC DescriptorHandle, + SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, + SQLPOINTER Value, SQLINTEGER BufferLength, + SQLINTEGER *StringLength) +@@ -1244,7 +1251,7 @@ SQLRETURN WINAPI SQLGetDescField(SQLHDESC DescriptorHandle, + /************************************************************************* + * SQLGetDescRec [ODBC32.034] + */ +-SQLRETURN WINAPI SQLGetDescRec(SQLHDESC DescriptorHandle, ++SQLRETURN WINAPI ODBC32_SQLGetDescRec(SQLHDESC DescriptorHandle, + SQLSMALLINT RecNumber, SQLCHAR *Name, + SQLSMALLINT BufferLength, SQLSMALLINT *StringLength, + SQLSMALLINT *Type, SQLSMALLINT *SubType, +@@ -1262,7 +1269,7 @@ SQLRETURN WINAPI SQLGetDescRec(SQLHDESC DescriptorHandle, + /************************************************************************* + * SQLGetDiagField [ODBC32.035] + */ +-SQLRETURN WINAPI SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle, ++SQLRETURN WINAPI ODBC32_SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle, + SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, + SQLPOINTER DiagInfo, SQLSMALLINT BufferLength, + SQLSMALLINT *StringLength) +@@ -1278,7 +1285,7 @@ SQLRETURN WINAPI SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle, + /************************************************************************* + * SQLGetDiagRec [ODBC32.036] + */ +-SQLRETURN WINAPI SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle, ++SQLRETURN WINAPI ODBC32_SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle, + SQLSMALLINT RecNumber, SQLCHAR *Sqlstate, + SQLINTEGER *NativeError, SQLCHAR *MessageText, + SQLSMALLINT BufferLength, SQLSMALLINT *TextLength) +@@ -1294,7 +1301,7 @@ SQLRETURN WINAPI SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle, + /************************************************************************* + * SQLGetEnvAttr [ODBC32.037] + */ +-SQLRETURN WINAPI SQLGetEnvAttr(SQLHENV EnvironmentHandle, ++SQLRETURN WINAPI ODBC32_SQLGetEnvAttr(SQLHENV EnvironmentHandle, + SQLINTEGER Attribute, SQLPOINTER Value, + SQLINTEGER BufferLength, SQLINTEGER *StringLength) + { +@@ -1308,7 +1315,7 @@ SQLRETURN WINAPI SQLGetEnvAttr(SQLHENV EnvironmentHandle, + /************************************************************************* + * SQLGetFunctions [ODBC32.044] + */ +-SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported) ++SQLRETURN WINAPI ODBC32_SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported) + { + TRACE("\n"); + +@@ -1320,7 +1327,7 @@ SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT Function + /************************************************************************* + * SQLGetInfo [ODBC32.045] + */ +-SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle, ++SQLRETURN WINAPI ODBC32_SQLGetInfo(SQLHDBC ConnectionHandle, + SQLUSMALLINT InfoType, SQLPOINTER InfoValue, + SQLSMALLINT BufferLength, SQLSMALLINT *StringLength) + { +@@ -1334,7 +1341,7 @@ SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle, + /************************************************************************* + * SQLGetStmtAttr [ODBC32.038] + */ +-SQLRETURN WINAPI SQLGetStmtAttr(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLGetStmtAttr(SQLHSTMT StatementHandle, + SQLINTEGER Attribute, SQLPOINTER Value, + SQLINTEGER BufferLength, SQLINTEGER *StringLength) + { +@@ -1348,7 +1355,7 @@ SQLRETURN WINAPI SQLGetStmtAttr(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLGetStmtOption [ODBC32.046] + */ +-SQLRETURN WINAPI SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value) ++SQLRETURN WINAPI ODBC32_SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value) + { + TRACE("\n"); + +@@ -1360,7 +1367,7 @@ SQLRETURN WINAPI SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, + /************************************************************************* + * SQLGetTypeInfo [ODBC32.047] + */ +-SQLRETURN WINAPI SQLGetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType) ++SQLRETURN WINAPI ODBC32_SQLGetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType) + { + TRACE("\n"); + +@@ -1372,7 +1379,7 @@ SQLRETURN WINAPI SQLGetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType) + /************************************************************************* + * SQLNumResultCols [ODBC32.018] + */ +-SQLRETURN WINAPI SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnCount) ++SQLRETURN WINAPI ODBC32_SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnCount) + { + TRACE("\n"); + +@@ -1384,7 +1391,7 @@ SQLRETURN WINAPI SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnC + /************************************************************************* + * SQLParamData [ODBC32.048] + */ +-SQLRETURN WINAPI SQLParamData(SQLHSTMT StatementHandle, SQLPOINTER *Value) ++SQLRETURN WINAPI ODBC32_SQLParamData(SQLHSTMT StatementHandle, SQLPOINTER *Value) + { + TRACE("\n"); + +@@ -1396,7 +1403,7 @@ SQLRETURN WINAPI SQLParamData(SQLHSTMT StatementHandle, SQLPOINTER *Value) + /************************************************************************* + * SQLPrepare [ODBC32.019] + */ +-SQLRETURN WINAPI SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength) ++SQLRETURN WINAPI ODBC32_SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength) + { + TRACE("\n"); + +@@ -1408,7 +1415,7 @@ SQLRETURN WINAPI SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQ + /************************************************************************* + * SQLPutData [ODBC32.049] + */ +-SQLRETURN WINAPI SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLLEN StrLen_or_Ind) ++SQLRETURN WINAPI ODBC32_SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLLEN StrLen_or_Ind) + { + TRACE("\n"); + +@@ -1420,7 +1427,7 @@ SQLRETURN WINAPI SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLLEN St + /************************************************************************* + * SQLRowCount [ODBC32.020] + */ +-SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle, SQLLEN *RowCount) ++SQLRETURN WINAPI ODBC32_SQLRowCount(SQLHSTMT StatementHandle, SQLLEN *RowCount) + { + TRACE("\n"); + +@@ -1432,7 +1439,7 @@ SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle, SQLLEN *RowCount) + /************************************************************************* + * SQLSetConnectAttr [ODBC32.039] + */ +-SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, ++SQLRETURN WINAPI ODBC32_SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, + SQLPOINTER Value, SQLINTEGER StringLength) + { + TRACE("\n"); +@@ -1445,7 +1452,7 @@ SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribut + /************************************************************************* + * SQLSetConnectOption [ODBC32.050] + */ +-SQLRETURN WINAPI SQLSetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLULEN Value) ++SQLRETURN WINAPI ODBC32_SQLSetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLULEN Value) + { + TRACE("\n"); + +@@ -1457,7 +1464,7 @@ SQLRETURN WINAPI SQLSetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Opti + /************************************************************************* + * SQLSetCursorName [ODBC32.021] + */ +-SQLRETURN WINAPI SQLSetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, SQLSMALLINT NameLength) ++SQLRETURN WINAPI ODBC32_SQLSetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, SQLSMALLINT NameLength) + { + TRACE("\n"); + +@@ -1469,7 +1476,7 @@ SQLRETURN WINAPI SQLSetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, + /************************************************************************* + * SQLSetDescField [ODBC32.073] + */ +-SQLRETURN WINAPI SQLSetDescField(SQLHDESC DescriptorHandle, ++SQLRETURN WINAPI ODBC32_SQLSetDescField(SQLHDESC DescriptorHandle, + SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, + SQLPOINTER Value, SQLINTEGER BufferLength) + { +@@ -1483,7 +1490,7 @@ SQLRETURN WINAPI SQLSetDescField(SQLHDESC DescriptorHandle, + /************************************************************************* + * SQLSetDescRec [ODBC32.074] + */ +-SQLRETURN WINAPI SQLSetDescRec(SQLHDESC DescriptorHandle, ++SQLRETURN WINAPI ODBC32_SQLSetDescRec(SQLHDESC DescriptorHandle, + SQLSMALLINT RecNumber, SQLSMALLINT Type, + SQLSMALLINT SubType, SQLLEN Length, + SQLSMALLINT Precision, SQLSMALLINT Scale, +@@ -1501,7 +1508,7 @@ SQLRETURN WINAPI SQLSetDescRec(SQLHDESC DescriptorHandle, + /************************************************************************* + * SQLSetEnvAttr [ODBC32.075] + */ +-SQLRETURN WINAPI SQLSetEnvAttr(SQLHENV EnvironmentHandle, ++SQLRETURN WINAPI ODBC32_SQLSetEnvAttr(SQLHENV EnvironmentHandle, + SQLINTEGER Attribute, SQLPOINTER Value, + SQLINTEGER StringLength) + { +@@ -1515,7 +1522,7 @@ SQLRETURN WINAPI SQLSetEnvAttr(SQLHENV EnvironmentHandle, + /************************************************************************* + * SQLSetParam [ODBC32.022] + */ +-SQLRETURN WINAPI SQLSetParam(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLSetParam(SQLHSTMT StatementHandle, + SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, + SQLSMALLINT ParameterType, SQLULEN LengthPrecision, + SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, +@@ -1532,7 +1539,7 @@ SQLRETURN WINAPI SQLSetParam(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLSetStmtAttr [ODBC32.076] + */ +-SQLRETURN WINAPI SQLSetStmtAttr(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLSetStmtAttr(SQLHSTMT StatementHandle, + SQLINTEGER Attribute, SQLPOINTER Value, + SQLINTEGER StringLength) + { +@@ -1546,7 +1553,7 @@ SQLRETURN WINAPI SQLSetStmtAttr(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLSetStmtOption [ODBC32.051] + */ +-SQLRETURN WINAPI SQLSetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLULEN Value) ++SQLRETURN WINAPI ODBC32_SQLSetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLULEN Value) + { + TRACE("\n"); + +@@ -1558,7 +1565,7 @@ SQLRETURN WINAPI SQLSetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, + /************************************************************************* + * SQLSpecialColumns [ODBC32.052] + */ +-SQLRETURN WINAPI SQLSpecialColumns(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLSpecialColumns(SQLHSTMT StatementHandle, + SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName, + SQLSMALLINT NameLength1, SQLCHAR *SchemaName, + SQLSMALLINT NameLength2, SQLCHAR *TableName, +@@ -1575,7 +1582,7 @@ SQLRETURN WINAPI SQLSpecialColumns(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLStatistics [ODBC32.053] + */ +-SQLRETURN WINAPI SQLStatistics(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLStatistics(SQLHSTMT StatementHandle, + SQLCHAR *CatalogName, SQLSMALLINT NameLength1, + SQLCHAR *SchemaName, SQLSMALLINT NameLength2, + SQLCHAR *TableName, SQLSMALLINT NameLength3, +@@ -1592,7 +1599,7 @@ SQLRETURN WINAPI SQLStatistics(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLTables [ODBC32.054] + */ +-SQLRETURN WINAPI SQLTables(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLTables(SQLHSTMT StatementHandle, + SQLCHAR *CatalogName, SQLSMALLINT NameLength1, + SQLCHAR *SchemaName, SQLSMALLINT NameLength2, + SQLCHAR *TableName, SQLSMALLINT NameLength3, +@@ -1609,7 +1616,7 @@ SQLRETURN WINAPI SQLTables(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLTransact [ODBC32.023] + */ +-SQLRETURN WINAPI SQLTransact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, ++SQLRETURN WINAPI ODBC32_SQLTransact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, + SQLUSMALLINT CompletionType) + { + TRACE("\n"); +@@ -1622,7 +1629,7 @@ SQLRETURN WINAPI SQLTransact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle + /************************************************************************* + * SQLBrowseConnect [ODBC32.055] + */ +-SQLRETURN WINAPI SQLBrowseConnect( ++SQLRETURN WINAPI ODBC32_SQLBrowseConnect( + SQLHDBC hdbc, + SQLCHAR *szConnStrIn, + SQLSMALLINT cbConnStrIn, +@@ -1640,7 +1647,7 @@ SQLRETURN WINAPI SQLBrowseConnect( + /************************************************************************* + * SQLBulkOperations [ODBC32.078] + */ +-SQLRETURN WINAPI SQLBulkOperations( ++SQLRETURN WINAPI ODBC32_SQLBulkOperations( + SQLHSTMT StatementHandle, + SQLSMALLINT Operation) + { +@@ -1654,7 +1661,7 @@ SQLRETURN WINAPI SQLBulkOperations( + /************************************************************************* + * SQLColAttributes [ODBC32.006] + */ +-SQLRETURN WINAPI SQLColAttributes( ++SQLRETURN WINAPI ODBC32_SQLColAttributes( + SQLHSTMT hstmt, + SQLUSMALLINT icol, + SQLUSMALLINT fDescType, +@@ -1673,7 +1680,7 @@ SQLRETURN WINAPI SQLColAttributes( + /************************************************************************* + * SQLColumnPrivileges [ODBC32.056] + */ +-SQLRETURN WINAPI SQLColumnPrivileges( ++SQLRETURN WINAPI ODBC32_SQLColumnPrivileges( + SQLHSTMT hstmt, + SQLCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, +@@ -1695,7 +1702,7 @@ SQLRETURN WINAPI SQLColumnPrivileges( + /************************************************************************* + * SQLDescribeParam [ODBC32.058] + */ +-SQLRETURN WINAPI SQLDescribeParam( ++SQLRETURN WINAPI ODBC32_SQLDescribeParam( + SQLHSTMT hstmt, + SQLUSMALLINT ipar, + SQLSMALLINT *pfSqlType, +@@ -1713,7 +1720,7 @@ SQLRETURN WINAPI SQLDescribeParam( + /************************************************************************* + * SQLExtendedFetch [ODBC32.059] + */ +-SQLRETURN WINAPI SQLExtendedFetch( ++SQLRETURN WINAPI ODBC32_SQLExtendedFetch( + SQLHSTMT hstmt, + SQLUSMALLINT fFetchType, + SQLLEN irow, +@@ -1730,7 +1737,7 @@ SQLRETURN WINAPI SQLExtendedFetch( + /************************************************************************* + * SQLForeignKeys [ODBC32.060] + */ +-SQLRETURN WINAPI SQLForeignKeys( ++SQLRETURN WINAPI ODBC32_SQLForeignKeys( + SQLHSTMT hstmt, + SQLCHAR *szPkCatalogName, + SQLSMALLINT cbPkCatalogName, +@@ -1757,7 +1764,7 @@ SQLRETURN WINAPI SQLForeignKeys( + /************************************************************************* + * SQLMoreResults [ODBC32.061] + */ +-SQLRETURN WINAPI SQLMoreResults(SQLHSTMT hstmt) ++SQLRETURN WINAPI ODBC32_SQLMoreResults(SQLHSTMT hstmt) + { + TRACE("\n"); + +@@ -1769,7 +1776,7 @@ SQLRETURN WINAPI SQLMoreResults(SQLHSTMT hstmt) + /************************************************************************* + * SQLNativeSql [ODBC32.062] + */ +-SQLRETURN WINAPI SQLNativeSql( ++SQLRETURN WINAPI ODBC32_SQLNativeSql( + SQLHDBC hdbc, + SQLCHAR *szSqlStrIn, + SQLINTEGER cbSqlStrIn, +@@ -1787,7 +1794,7 @@ SQLRETURN WINAPI SQLNativeSql( + /************************************************************************* + * SQLNumParams [ODBC32.063] + */ +-SQLRETURN WINAPI SQLNumParams( ++SQLRETURN WINAPI ODBC32_SQLNumParams( + SQLHSTMT hstmt, + SQLSMALLINT *pcpar) + { +@@ -1801,7 +1808,7 @@ SQLRETURN WINAPI SQLNumParams( + /************************************************************************* + * SQLParamOptions [ODBC32.064] + */ +-SQLRETURN WINAPI SQLParamOptions( ++SQLRETURN WINAPI ODBC32_SQLParamOptions( + SQLHSTMT hstmt, + SQLULEN crow, + SQLULEN *pirow) +@@ -1816,7 +1823,7 @@ SQLRETURN WINAPI SQLParamOptions( + /************************************************************************* + * SQLPrimaryKeys [ODBC32.065] + */ +-SQLRETURN WINAPI SQLPrimaryKeys( ++SQLRETURN WINAPI ODBC32_SQLPrimaryKeys( + SQLHSTMT hstmt, + SQLCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, +@@ -1836,7 +1843,7 @@ SQLRETURN WINAPI SQLPrimaryKeys( + /************************************************************************* + * SQLProcedureColumns [ODBC32.066] + */ +-SQLRETURN WINAPI SQLProcedureColumns( ++SQLRETURN WINAPI ODBC32_SQLProcedureColumns( + SQLHSTMT hstmt, + SQLCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, +@@ -1858,7 +1865,7 @@ SQLRETURN WINAPI SQLProcedureColumns( + /************************************************************************* + * SQLProcedures [ODBC32.067] + */ +-SQLRETURN WINAPI SQLProcedures( ++SQLRETURN WINAPI ODBC32_SQLProcedures( + SQLHSTMT hstmt, + SQLCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, +@@ -1878,7 +1885,7 @@ SQLRETURN WINAPI SQLProcedures( + /************************************************************************* + * SQLSetPos [ODBC32.068] + */ +-SQLRETURN WINAPI SQLSetPos( ++SQLRETURN WINAPI ODBC32_SQLSetPos( + SQLHSTMT hstmt, + SQLSETPOSIROW irow, + SQLUSMALLINT fOption, +@@ -1894,7 +1901,7 @@ SQLRETURN WINAPI SQLSetPos( + /************************************************************************* + * SQLTablePrivileges [ODBC32.070] + */ +-SQLRETURN WINAPI SQLTablePrivileges( ++SQLRETURN WINAPI ODBC32_SQLTablePrivileges( + SQLHSTMT hstmt, + SQLCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, +@@ -1914,7 +1921,7 @@ SQLRETURN WINAPI SQLTablePrivileges( + /************************************************************************* + * SQLDrivers [ODBC32.071] + */ +-SQLRETURN WINAPI SQLDrivers( ++SQLRETURN WINAPI ODBC32_SQLDrivers( + SQLHENV henv, + SQLUSMALLINT fDirection, + SQLCHAR *szDriverDesc, +@@ -1943,7 +1950,7 @@ SQLRETURN WINAPI SQLDrivers( + /************************************************************************* + * SQLBindParameter [ODBC32.072] + */ +-SQLRETURN WINAPI SQLBindParameter( ++SQLRETURN WINAPI ODBC32_SQLBindParameter( + SQLHSTMT hstmt, + SQLUSMALLINT ipar, + SQLSMALLINT fParamType, +@@ -1966,7 +1973,7 @@ SQLRETURN WINAPI SQLBindParameter( + /************************************************************************* + * SQLDriverConnect [ODBC32.041] + */ +-SQLRETURN WINAPI SQLDriverConnect( ++SQLRETURN WINAPI ODBC32_SQLDriverConnect( + SQLHDBC hdbc, + SQLHWND hwnd, + SQLCHAR *conn_str_in, +@@ -1992,7 +1999,7 @@ SQLRETURN WINAPI SQLDriverConnect( + /************************************************************************* + * SQLSetScrollOptions [ODBC32.069] + */ +-SQLRETURN WINAPI SQLSetScrollOptions( ++SQLRETURN WINAPI ODBC32_SQLSetScrollOptions( + SQLHSTMT statement_handle, + SQLUSMALLINT f_concurrency, + SQLLEN crow_keyset, +@@ -2037,7 +2044,7 @@ static BOOL SQLColAttributes_KnownStringAttribute(SQLUSMALLINT fDescType) + /************************************************************************* + * SQLColAttributesW [ODBC32.106] + */ +-SQLRETURN WINAPI SQLColAttributesW( ++SQLRETURN WINAPI ODBC32_SQLColAttributesW( + SQLHSTMT hstmt, + SQLUSMALLINT icol, + SQLUSMALLINT fDescType, +@@ -2071,7 +2078,7 @@ SQLRETURN WINAPI SQLColAttributesW( + /************************************************************************* + * SQLConnectW [ODBC32.107] + */ +-SQLRETURN WINAPI SQLConnectW(SQLHDBC ConnectionHandle, ++SQLRETURN WINAPI ODBC32_SQLConnectW(SQLHDBC ConnectionHandle, + WCHAR *ServerName, SQLSMALLINT NameLength1, + WCHAR *UserName, SQLSMALLINT NameLength2, + WCHAR *Authentication, SQLSMALLINT NameLength3) +@@ -2091,7 +2098,7 @@ SQLRETURN WINAPI SQLConnectW(SQLHDBC ConnectionHandle, + /************************************************************************* + * SQLDescribeColW [ODBC32.108] + */ +-SQLRETURN WINAPI SQLDescribeColW(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLDescribeColW(SQLHSTMT StatementHandle, + SQLUSMALLINT ColumnNumber, WCHAR *ColumnName, + SQLSMALLINT BufferLength, SQLSMALLINT *NameLength, + SQLSMALLINT *DataType, SQLULEN *ColumnSize, +@@ -2120,7 +2127,7 @@ SQLRETURN WINAPI SQLDescribeColW(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLErrorW [ODBC32.110] + */ +-SQLRETURN WINAPI SQLErrorW(SQLHENV EnvironmentHandle, ++SQLRETURN WINAPI ODBC32_SQLErrorW(SQLHENV EnvironmentHandle, + SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle, + WCHAR *Sqlstate, SQLINTEGER *NativeError, + WCHAR *MessageText, SQLSMALLINT BufferLength, +@@ -2136,7 +2143,7 @@ SQLRETURN WINAPI SQLErrorW(SQLHENV EnvironmentHandle, + /************************************************************************* + * SQLExecDirectW [ODBC32.111] + */ +-SQLRETURN WINAPI SQLExecDirectW(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLExecDirectW(SQLHSTMT StatementHandle, + WCHAR *StatementText, SQLINTEGER TextLength) + { + TRACE("\n"); +@@ -2148,7 +2155,7 @@ SQLRETURN WINAPI SQLExecDirectW(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLGetCursorNameW [ODBC32.117] + */ +-SQLRETURN WINAPI SQLGetCursorNameW(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLGetCursorNameW(SQLHSTMT StatementHandle, + WCHAR *CursorName, SQLSMALLINT BufferLength, + SQLSMALLINT *NameLength) + { +@@ -2161,7 +2168,7 @@ SQLRETURN WINAPI SQLGetCursorNameW(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLPrepareW [ODBC32.119] + */ +-SQLRETURN WINAPI SQLPrepareW(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLPrepareW(SQLHSTMT StatementHandle, + WCHAR *StatementText, SQLINTEGER TextLength) + { + TRACE("\n"); +@@ -2173,7 +2180,7 @@ SQLRETURN WINAPI SQLPrepareW(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLSetCursorNameW [ODBC32.121] + */ +-SQLRETURN WINAPI SQLSetCursorNameW(SQLHSTMT StatementHandle, WCHAR *CursorName, SQLSMALLINT NameLength) ++SQLRETURN WINAPI ODBC32_SQLSetCursorNameW(SQLHSTMT StatementHandle, WCHAR *CursorName, SQLSMALLINT NameLength) + { + TRACE("\n"); + +@@ -2184,7 +2191,7 @@ SQLRETURN WINAPI SQLSetCursorNameW(SQLHSTMT StatementHandle, WCHAR *CursorName, + /************************************************************************* + * SQLColAttributeW [ODBC32.127] + */ +-SQLRETURN WINAPI SQLColAttributeW (SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLColAttributeW (SQLHSTMT StatementHandle, + SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, + SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, + SQLSMALLINT *StringLength, SQLLEN *NumericAttribute) +@@ -2216,7 +2223,7 @@ SQLRETURN WINAPI SQLColAttributeW (SQLHSTMT StatementHandle, + /************************************************************************* + * SQLGetConnectAttrW [ODBC32.132] + */ +-SQLRETURN WINAPI SQLGetConnectAttrW(SQLHDBC ConnectionHandle, ++SQLRETURN WINAPI ODBC32_SQLGetConnectAttrW(SQLHDBC ConnectionHandle, + SQLINTEGER Attribute, SQLPOINTER Value, + SQLINTEGER BufferLength, SQLINTEGER *StringLength) + { +@@ -2230,7 +2237,7 @@ SQLRETURN WINAPI SQLGetConnectAttrW(SQLHDBC ConnectionHandle, + /************************************************************************* + * SQLGetDescFieldW [ODBC32.133] + */ +-SQLRETURN WINAPI SQLGetDescFieldW(SQLHDESC DescriptorHandle, ++SQLRETURN WINAPI ODBC32_SQLGetDescFieldW(SQLHDESC DescriptorHandle, + SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, + SQLPOINTER Value, SQLINTEGER BufferLength, + SQLINTEGER *StringLength) +@@ -2245,7 +2252,7 @@ SQLRETURN WINAPI SQLGetDescFieldW(SQLHDESC DescriptorHandle, + /************************************************************************* + * SQLGetDescRecW [ODBC32.134] + */ +-SQLRETURN WINAPI SQLGetDescRecW(SQLHDESC DescriptorHandle, ++SQLRETURN WINAPI ODBC32_SQLGetDescRecW(SQLHDESC DescriptorHandle, + SQLSMALLINT RecNumber, WCHAR *Name, + SQLSMALLINT BufferLength, SQLSMALLINT *StringLength, + SQLSMALLINT *Type, SQLSMALLINT *SubType, +@@ -2262,7 +2269,7 @@ SQLRETURN WINAPI SQLGetDescRecW(SQLHDESC DescriptorHandle, + /************************************************************************* + * SQLGetDiagFieldW [ODBC32.135] + */ +-SQLRETURN WINAPI SQLGetDiagFieldW(SQLSMALLINT HandleType, SQLHANDLE Handle, ++SQLRETURN WINAPI ODBC32_SQLGetDiagFieldW(SQLSMALLINT HandleType, SQLHANDLE Handle, + SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, + SQLPOINTER DiagInfo, SQLSMALLINT BufferLength, + SQLSMALLINT *StringLength) +@@ -2277,7 +2284,7 @@ SQLRETURN WINAPI SQLGetDiagFieldW(SQLSMALLINT HandleType, SQLHANDLE Handle, + /************************************************************************* + * SQLGetDiagRecW [ODBC32.136] + */ +-SQLRETURN WINAPI SQLGetDiagRecW(SQLSMALLINT HandleType, SQLHANDLE Handle, ++SQLRETURN WINAPI ODBC32_SQLGetDiagRecW(SQLSMALLINT HandleType, SQLHANDLE Handle, + SQLSMALLINT RecNumber, WCHAR *Sqlstate, + SQLINTEGER *NativeError, WCHAR *MessageText, + SQLSMALLINT BufferLength, SQLSMALLINT *TextLength) +@@ -2292,7 +2299,7 @@ SQLRETURN WINAPI SQLGetDiagRecW(SQLSMALLINT HandleType, SQLHANDLE Handle, + /************************************************************************* + * SQLGetStmtAttrW [ODBC32.138] + */ +-SQLRETURN WINAPI SQLGetStmtAttrW(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLGetStmtAttrW(SQLHSTMT StatementHandle, + SQLINTEGER Attribute, SQLPOINTER Value, + SQLINTEGER BufferLength, SQLINTEGER *StringLength) + { +@@ -2320,7 +2327,7 @@ SQLRETURN WINAPI SQLGetStmtAttrW(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLSetConnectAttrW [ODBC32.139] + */ +-SQLRETURN WINAPI SQLSetConnectAttrW(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, ++SQLRETURN WINAPI ODBC32_SQLSetConnectAttrW(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, + SQLPOINTER Value, SQLINTEGER StringLength) + { + TRACE("\n"); +@@ -2332,7 +2339,7 @@ SQLRETURN WINAPI SQLSetConnectAttrW(SQLHDBC ConnectionHandle, SQLINTEGER Attribu + /************************************************************************* + * SQLColumnsW [ODBC32.140] + */ +-SQLRETURN WINAPI SQLColumnsW(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLColumnsW(SQLHSTMT StatementHandle, + WCHAR *CatalogName, SQLSMALLINT NameLength1, + WCHAR *SchemaName, SQLSMALLINT NameLength2, + WCHAR *TableName, SQLSMALLINT NameLength3, +@@ -2348,7 +2355,7 @@ SQLRETURN WINAPI SQLColumnsW(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLDriverConnectW [ODBC32.141] + */ +-SQLRETURN WINAPI SQLDriverConnectW( ++SQLRETURN WINAPI ODBC32_SQLDriverConnectW( + SQLHDBC hdbc, + SQLHWND hwnd, + WCHAR *conn_str_in, +@@ -2369,7 +2376,7 @@ SQLRETURN WINAPI SQLDriverConnectW( + /************************************************************************* + * SQLGetConnectOptionW [ODBC32.142] + */ +-SQLRETURN WINAPI SQLGetConnectOptionW(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value) ++SQLRETURN WINAPI ODBC32_SQLGetConnectOptionW(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value) + { + TRACE("\n"); + +@@ -2380,7 +2387,7 @@ SQLRETURN WINAPI SQLGetConnectOptionW(SQLHDBC ConnectionHandle, SQLUSMALLINT Opt + /************************************************************************* + * SQLGetInfoW [ODBC32.145] + */ +-SQLRETURN WINAPI SQLGetInfoW(SQLHDBC ConnectionHandle, ++SQLRETURN WINAPI ODBC32_SQLGetInfoW(SQLHDBC ConnectionHandle, + SQLUSMALLINT InfoType, SQLPOINTER InfoValue, + SQLSMALLINT BufferLength, SQLSMALLINT *StringLength) + { +@@ -2401,7 +2408,7 @@ SQLRETURN WINAPI SQLGetInfoW(SQLHDBC ConnectionHandle, + /************************************************************************* + * SQLGetTypeInfoW [ODBC32.147] + */ +-SQLRETURN WINAPI SQLGetTypeInfoW(SQLHSTMT StatementHandle, SQLSMALLINT DataType) ++SQLRETURN WINAPI ODBC32_SQLGetTypeInfoW(SQLHSTMT StatementHandle, SQLSMALLINT DataType) + { + TRACE("\n"); + +@@ -2412,7 +2419,7 @@ SQLRETURN WINAPI SQLGetTypeInfoW(SQLHSTMT StatementHandle, SQLSMALLINT DataType) + /************************************************************************* + * SQLSetConnectOptionW [ODBC32.150] + */ +-SQLRETURN WINAPI SQLSetConnectOptionW(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLLEN Value) ++SQLRETURN WINAPI ODBC32_SQLSetConnectOptionW(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLLEN Value) + { + TRACE("\n"); + +@@ -2423,7 +2430,7 @@ SQLRETURN WINAPI SQLSetConnectOptionW(SQLHDBC ConnectionHandle, SQLUSMALLINT Opt + /************************************************************************* + * SQLSpecialColumnsW [ODBC32.152] + */ +-SQLRETURN WINAPI SQLSpecialColumnsW(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLSpecialColumnsW(SQLHSTMT StatementHandle, + SQLUSMALLINT IdentifierType, SQLWCHAR *CatalogName, + SQLSMALLINT NameLength1, SQLWCHAR *SchemaName, + SQLSMALLINT NameLength2, SQLWCHAR *TableName, +@@ -2438,7 +2445,7 @@ SQLRETURN WINAPI SQLSpecialColumnsW(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLStatisticsW [ODBC32.153] + */ +-SQLRETURN WINAPI SQLStatisticsW(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLStatisticsW(SQLHSTMT StatementHandle, + SQLWCHAR *CatalogName, SQLSMALLINT NameLength1, + SQLWCHAR *SchemaName, SQLSMALLINT NameLength2, + SQLWCHAR *TableName, SQLSMALLINT NameLength3, +@@ -2454,7 +2461,7 @@ SQLRETURN WINAPI SQLStatisticsW(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLTablesW [ODBC32.154] + */ +-SQLRETURN WINAPI SQLTablesW(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLTablesW(SQLHSTMT StatementHandle, + SQLWCHAR *CatalogName, SQLSMALLINT NameLength1, + SQLWCHAR *SchemaName, SQLSMALLINT NameLength2, + SQLWCHAR *TableName, SQLSMALLINT NameLength3, +@@ -2470,7 +2477,7 @@ SQLRETURN WINAPI SQLTablesW(SQLHSTMT StatementHandle, + /************************************************************************* + * SQLBrowseConnectW [ODBC32.155] + */ +-SQLRETURN WINAPI SQLBrowseConnectW( ++SQLRETURN WINAPI ODBC32_SQLBrowseConnectW( + SQLHDBC hdbc, + SQLWCHAR *szConnStrIn, + SQLSMALLINT cbConnStrIn, +@@ -2488,7 +2495,7 @@ SQLRETURN WINAPI SQLBrowseConnectW( + /************************************************************************* + * SQLColumnPrivilegesW [ODBC32.156] + */ +-SQLRETURN WINAPI SQLColumnPrivilegesW( ++SQLRETURN WINAPI ODBC32_SQLColumnPrivilegesW( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, +@@ -2509,7 +2516,7 @@ SQLRETURN WINAPI SQLColumnPrivilegesW( + /************************************************************************* + * SQLDataSourcesW [ODBC32.157] + */ +-SQLRETURN WINAPI SQLDataSourcesW(SQLHENV EnvironmentHandle, ++SQLRETURN WINAPI ODBC32_SQLDataSourcesW(SQLHENV EnvironmentHandle, + SQLUSMALLINT Direction, WCHAR *ServerName, + SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1, + WCHAR *Description, SQLSMALLINT BufferLength2, +@@ -2540,7 +2547,7 @@ SQLRETURN WINAPI SQLDataSourcesW(SQLHENV EnvironmentHandle, + /************************************************************************* + * SQLForeignKeysW [ODBC32.160] + */ +-SQLRETURN WINAPI SQLForeignKeysW( ++SQLRETURN WINAPI ODBC32_SQLForeignKeysW( + SQLHSTMT hstmt, + SQLWCHAR *szPkCatalogName, + SQLSMALLINT cbPkCatalogName, +@@ -2566,7 +2573,7 @@ SQLRETURN WINAPI SQLForeignKeysW( + /************************************************************************* + * SQLNativeSqlW [ODBC32.162] + */ +-SQLRETURN WINAPI SQLNativeSqlW( ++SQLRETURN WINAPI ODBC32_SQLNativeSqlW( + SQLHDBC hdbc, + SQLWCHAR *szSqlStrIn, + SQLINTEGER cbSqlStrIn, +@@ -2583,7 +2590,7 @@ SQLRETURN WINAPI SQLNativeSqlW( + /************************************************************************* + * SQLPrimaryKeysW [ODBC32.165] + */ +-SQLRETURN WINAPI SQLPrimaryKeysW( ++SQLRETURN WINAPI ODBC32_SQLPrimaryKeysW( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, +@@ -2602,7 +2609,7 @@ SQLRETURN WINAPI SQLPrimaryKeysW( + /************************************************************************* + * SQLProcedureColumnsW [ODBC32.166] + */ +-SQLRETURN WINAPI SQLProcedureColumnsW( ++SQLRETURN WINAPI ODBC32_SQLProcedureColumnsW( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, +@@ -2623,7 +2630,7 @@ SQLRETURN WINAPI SQLProcedureColumnsW( + /************************************************************************* + * SQLProceduresW [ODBC32.167] + */ +-SQLRETURN WINAPI SQLProceduresW( ++SQLRETURN WINAPI ODBC32_SQLProceduresW( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, +@@ -2642,7 +2649,7 @@ SQLRETURN WINAPI SQLProceduresW( + /************************************************************************* + * SQLTablePrivilegesW [ODBC32.170] + */ +-SQLRETURN WINAPI SQLTablePrivilegesW( ++SQLRETURN WINAPI ODBC32_SQLTablePrivilegesW( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, +@@ -2661,7 +2668,7 @@ SQLRETURN WINAPI SQLTablePrivilegesW( + /************************************************************************* + * SQLDriversW [ODBC32.171] + */ +-SQLRETURN WINAPI SQLDriversW( ++SQLRETURN WINAPI ODBC32_SQLDriversW( + SQLHENV henv, + SQLUSMALLINT fDirection, + SQLWCHAR *szDriverDesc, +@@ -2689,7 +2696,7 @@ SQLRETURN WINAPI SQLDriversW( + /************************************************************************* + * SQLSetDescFieldW [ODBC32.173] + */ +-SQLRETURN WINAPI SQLSetDescFieldW(SQLHDESC DescriptorHandle, ++SQLRETURN WINAPI ODBC32_SQLSetDescFieldW(SQLHDESC DescriptorHandle, + SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, + SQLPOINTER Value, SQLINTEGER BufferLength) + { +@@ -2702,7 +2709,7 @@ SQLRETURN WINAPI SQLSetDescFieldW(SQLHDESC DescriptorHandle, + /************************************************************************* + * SQLSetStmtAttrW [ODBC32.176] + */ +-SQLRETURN WINAPI SQLSetStmtAttrW(SQLHSTMT StatementHandle, ++SQLRETURN WINAPI ODBC32_SQLSetStmtAttrW(SQLHSTMT StatementHandle, + SQLINTEGER Attribute, SQLPOINTER Value, + SQLINTEGER StringLength) + { +-- +1.9.1 + diff --git a/patches/ml-patches/0015-winmm-Don-t-crash-in-waveOutOpen-when-nSamplesPerSec.patch b/patches/ml-patches/0015-winmm-Don-t-crash-in-waveOutOpen-when-nSamplesPerSec.patch new file mode 100644 index 00000000..b4e475d1 --- /dev/null +++ b/patches/ml-patches/0015-winmm-Don-t-crash-in-waveOutOpen-when-nSamplesPerSec.patch @@ -0,0 +1,65 @@ +From 5fa2778cf0726855905b3318b115a05fd2ced4a4 Mon Sep 17 00:00:00 2001 +From: Fabian Maurer +Date: Thu, 2 Aug 2018 17:33:43 +0200 +Subject: [PATCH] winmm: Don't crash in waveOutOpen when nSamplesPerSec is 0 + and add tests + +Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45530 +Signed-off-by: Fabian Maurer +--- + dlls/winmm/tests/wave.c | 20 ++++++++++++++++++++ + dlls/winmm/waveform.c | 7 +++++++ + 2 files changed, 27 insertions(+) + +diff --git a/dlls/winmm/tests/wave.c b/dlls/winmm/tests/wave.c +index b402e21..e490040 100644 +--- a/dlls/winmm/tests/wave.c ++++ b/dlls/winmm/tests/wave.c +@@ -1415,6 +1415,26 @@ static void wave_out_test_device(UINT_PTR device) + } else + trace("waveOutOpen(%s): 32 bit float samples not supported\n", + dev_name(device)); ++ ++ /* Test invalid parameters */ ++ ++ format.wFormatTag = WAVE_FORMAT_PCM; ++ format.nChannels = 1; ++ format.nSamplesPerSec = 11025; ++ format.nBlockAlign = 1; ++ format.nAvgBytesPerSec = 11025 * 1; ++ format.wBitsPerSample = 8; ++ format.cbSize = 0; ++ ++ format.nAvgBytesPerSec = 0; ++ rc = waveOutOpen(&wout, 0, &format, 0, 0, 0); ++ ok(rc == MMSYSERR_NOERROR, "Got %d\n", rc); ++ waveOutClose(wout); ++ format.nAvgBytesPerSec = 11025 * 1; ++ ++ format.nSamplesPerSec = 0; ++ rc = waveOutOpen(&wout, 0, &format, 0, 0, 0); ++ ok(rc == MMSYSERR_INVALPARAM || rc == WAVERR_BADFORMAT, "Got %d\n", rc); /* XP and lower return WAVERR_BADFORMAT */ + } + + static void wave_out_tests(void) +diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c +index 045bf4a..0a259c0 100644 +--- a/dlls/winmm/waveform.c ++++ b/dlls/winmm/waveform.c +@@ -1088,6 +1088,13 @@ static LRESULT WINMM_OpenDevice(WINMM_Device *device, WINMM_OpenInfo *info, + } + + if(info->format->wFormatTag == WAVE_FORMAT_PCM){ ++ ++ if (info->format->nSamplesPerSec == 0) ++ { ++ ret = MMSYSERR_INVALPARAM; ++ goto error; ++ } ++ + /* we aren't guaranteed that the struct in lpFormat is a full + * WAVEFORMATEX struct, which IAC::IsFormatSupported requires */ + device->orig_fmt = HeapAlloc(GetProcessHeap(), 0, sizeof(WAVEFORMATEX)); +-- +1.9.1 + diff --git a/patches/ml-patches/0016-msi-Generate-unique-names-for-32-and-64-bit-custom-a.patch b/patches/ml-patches/0016-msi-Generate-unique-names-for-32-and-64-bit-custom-a.patch new file mode 100644 index 00000000..5d97956c --- /dev/null +++ b/patches/ml-patches/0016-msi-Generate-unique-names-for-32-and-64-bit-custom-a.patch @@ -0,0 +1,63 @@ +From 47e5c48c7eadb3dd96d5fa3eb130f75f6c371c4b Mon Sep 17 00:00:00 2001 +From: Zebediah Figura +Date: Mon, 30 Jul 2018 14:11:11 -0500 +Subject: [PATCH 16/24] msi: Generate unique names for 32- and 64-bit custom + action server pipes. + +Signed-off-by: Zebediah Figura +--- + dlls/msi/custom.c | 6 ++++-- + programs/msiexec/msiexec.c | 4 ++-- + 2 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/dlls/msi/custom.c b/dlls/msi/custom.c +index 1a8a982..51755f2 100644 +--- a/dlls/msi/custom.c ++++ b/dlls/msi/custom.c +@@ -590,7 +590,7 @@ UINT CDECL __wine_msi_call_dll_function(const GUID *guid) + + static DWORD custom_start_server(MSIPACKAGE *package, DWORD arch) + { +- static const WCHAR pipe_name[] = {'\\','\\','.','\\','p','i','p','e','\\','m','s','i','c','a','_','%','x',0}; ++ static const WCHAR pipe_name[] = {'\\','\\','.','\\','p','i','p','e','\\','m','s','i','c','a','_','%','x','_','%','d',0}; + static const WCHAR msiexecW[] = {'\\','m','s','i','e','x','e','c','.','e','x','e',0}; + static const WCHAR argsW[] = {'%','s',' ','-','E','m','b','e','d','d','i','n','g',' ','%','d',0}; + +@@ -606,9 +606,11 @@ static DWORD custom_start_server(MSIPACKAGE *package, DWORD arch) + (arch == SCS_64BIT_BINARY && package->custom_server_64_process)) + return ERROR_SUCCESS; + +- sprintfW(buffer, pipe_name, GetCurrentProcessId()); ++ sprintfW(buffer, pipe_name, GetCurrentProcessId(), arch == SCS_32BIT_BINARY ? 32 : 64); + pipe = CreateNamedPipeW(buffer, PIPE_ACCESS_DUPLEX, 0, 1, sizeof(DWORD64), + sizeof(GUID), 0, NULL); ++ if (pipe == INVALID_HANDLE_VALUE) ++ ERR("Failed to create custom action client pipe: %u\n", GetLastError()); + + if (sizeof(void *) == 8 && arch == SCS_32BIT_BINARY) + GetSystemWow64DirectoryW(path, MAX_PATH - sizeof(msiexecW)/sizeof(WCHAR)); +diff --git a/programs/msiexec/msiexec.c b/programs/msiexec/msiexec.c +index 47cef7e..ead3bfb 100644 +--- a/programs/msiexec/msiexec.c ++++ b/programs/msiexec/msiexec.c +@@ -406,7 +406,7 @@ static DWORD CALLBACK custom_action_thread(void *arg) + + static int custom_action_server(const WCHAR *arg) + { +- static const WCHAR pipe_name[] = {'\\','\\','.','\\','p','i','p','e','\\','m','s','i','c','a','_','%','x',0}; ++ static const WCHAR pipe_name[] = {'\\','\\','.','\\','p','i','p','e','\\','m','s','i','c','a','_','%','x','_','%','d',0}; + DWORD client_pid = atoiW(arg); + DWORD64 thread64; + WCHAR buffer[24]; +@@ -423,7 +423,7 @@ static int custom_action_server(const WCHAR *arg) + return 1; + } + +- sprintfW(buffer, pipe_name, client_pid); ++ sprintfW(buffer, pipe_name, client_pid, sizeof(void *) * 8); + pipe = CreateFileW(buffer, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + if (pipe == INVALID_HANDLE_VALUE) + { +-- +1.9.1 + diff --git a/patches/ml-patches/0017-winevulkan-Expose-driver-vkGetInstanceProcAddr-via-w.patch b/patches/ml-patches/0017-winevulkan-Expose-driver-vkGetInstanceProcAddr-via-w.patch new file mode 100644 index 00000000..54c7861d --- /dev/null +++ b/patches/ml-patches/0017-winevulkan-Expose-driver-vkGetInstanceProcAddr-via-w.patch @@ -0,0 +1,62 @@ +From 29c5d550d65f9d03be8319eeec75904ecdc88ce9 Mon Sep 17 00:00:00 2001 +From: Jacek Caban +Date: Fri, 27 Jul 2018 15:30:49 +0200 +Subject: [PATCH 17/24] winevulkan: Expose driver vkGetInstanceProcAddr via + winevulkan exports. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Józef Kucia +Signed-off-by: Jacek Caban +--- + dlls/winevulkan/make_vulkan | 1 + + dlls/winevulkan/vulkan.c | 10 ++++++++++ + dlls/winevulkan/winevulkan.spec | 1 + + 3 files changed, 12 insertions(+) + +diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan +index fe742b7..fae6ab0 100755 +--- a/dlls/winevulkan/make_vulkan ++++ b/dlls/winevulkan/make_vulkan +@@ -2282,6 +2282,7 @@ class VkGenerator(object): + self._generate_copyright(f, spec_file=True) + f.write("@ stdcall vk_icdGetInstanceProcAddr(ptr str) wine_vk_icdGetInstanceProcAddr\n") + f.write("@ stdcall vk_icdNegotiateLoaderICDInterfaceVersion(ptr) wine_vk_icdNegotiateLoaderICDInterfaceVersion\n") ++ f.write("@ cdecl -norelay native_vkGetInstanceProcAddrWINE(ptr str)\n") + + # Export symbols for all Vulkan Core functions. + for func in self.registry.funcs.values(): +diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c +index 0bb68c2..bd652a5 100644 +--- a/dlls/winevulkan/vulkan.c ++++ b/dlls/winevulkan/vulkan.c +@@ -1163,3 +1163,13 @@ static void *wine_vk_get_global_proc_addr(const char *name) + } + return NULL; + } ++ ++/* ++ * Wrapper around driver vkGetInstanceProcAddr implementation. ++ * Allows winelib applications to access Vulkan functions with Wine ++ * additions and native ABI. ++ */ ++void *native_vkGetInstanceProcAddrWINE(VkInstance instance, const char *name) ++{ ++ return vk_funcs->p_vkGetInstanceProcAddr(instance, name); ++} +diff --git a/dlls/winevulkan/winevulkan.spec b/dlls/winevulkan/winevulkan.spec +index 8aab0fe..f979458 100644 +--- a/dlls/winevulkan/winevulkan.spec ++++ b/dlls/winevulkan/winevulkan.spec +@@ -36,6 +36,7 @@ + + @ stdcall vk_icdGetInstanceProcAddr(ptr str) wine_vk_icdGetInstanceProcAddr + @ stdcall vk_icdNegotiateLoaderICDInterfaceVersion(ptr) wine_vk_icdNegotiateLoaderICDInterfaceVersion ++@ cdecl -norelay native_vkGetInstanceProcAddrWINE(ptr str) + @ stdcall wine_vkAcquireNextImage2KHR(ptr ptr ptr) + @ stdcall wine_vkAcquireNextImageKHR(ptr int64 int64 int64 int64 ptr) + @ stdcall wine_vkAllocateCommandBuffers(ptr ptr ptr) +-- +1.9.1 + diff --git a/patches/ml-patches/0018-winevulkan-Mark-ICD-and-thunking-functions-as-privat.patch b/patches/ml-patches/0018-winevulkan-Mark-ICD-and-thunking-functions-as-privat.patch new file mode 100644 index 00000000..5c5b06ad --- /dev/null +++ b/patches/ml-patches/0018-winevulkan-Mark-ICD-and-thunking-functions-as-privat.patch @@ -0,0 +1,425 @@ +From cef9ec3da9c0861b03a6b98fe318b21add0f6f16 Mon Sep 17 00:00:00 2001 +From: Jacek Caban +Date: Fri, 27 Jul 2018 15:31:01 +0200 +Subject: [PATCH 18/24] winevulkan: Mark ICD and thunking functions as private. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We don't need them in importlib. We use them only for vulkan-1 +forwarding, which doesn't need an importlib. + +Signed-off-by: Józef Kucia +Signed-off-by: Jacek Caban +--- + dlls/winevulkan/make_vulkan | 6 +- + dlls/winevulkan/winevulkan.spec | 360 ++++++++++++++++++++-------------------- + 2 files changed, 183 insertions(+), 183 deletions(-) + +diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan +index fae6ab0..73bba78 100755 +--- a/dlls/winevulkan/make_vulkan ++++ b/dlls/winevulkan/make_vulkan +@@ -647,7 +647,7 @@ class VkFunction(object): + spec = "" + params = " ".join([p.spec() for p in self.params]) + if prefix is not None: +- spec += "@ stdcall {0}{1}({2})".format(prefix, self.name, params) ++ spec += "@ stdcall -private {0}{1}({2})".format(prefix, self.name, params) + else: + spec += "@ stdcall {0}({1})".format(self.name, params) + +@@ -2280,8 +2280,8 @@ class VkGenerator(object): + + def generate_vulkan_spec(self, f): + self._generate_copyright(f, spec_file=True) +- f.write("@ stdcall vk_icdGetInstanceProcAddr(ptr str) wine_vk_icdGetInstanceProcAddr\n") +- f.write("@ stdcall vk_icdNegotiateLoaderICDInterfaceVersion(ptr) wine_vk_icdNegotiateLoaderICDInterfaceVersion\n") ++ f.write("@ stdcall -private vk_icdGetInstanceProcAddr(ptr str) wine_vk_icdGetInstanceProcAddr\n") ++ f.write("@ stdcall -private vk_icdNegotiateLoaderICDInterfaceVersion(ptr) wine_vk_icdNegotiateLoaderICDInterfaceVersion\n") + f.write("@ cdecl -norelay native_vkGetInstanceProcAddrWINE(ptr str)\n") + + # Export symbols for all Vulkan Core functions. +diff --git a/dlls/winevulkan/winevulkan.spec b/dlls/winevulkan/winevulkan.spec +index f979458..b075e9f 100644 +--- a/dlls/winevulkan/winevulkan.spec ++++ b/dlls/winevulkan/winevulkan.spec +@@ -34,195 +34,195 @@ + # but only in their entirety and only with respect to the Combined Software. + # + +-@ stdcall vk_icdGetInstanceProcAddr(ptr str) wine_vk_icdGetInstanceProcAddr +-@ stdcall vk_icdNegotiateLoaderICDInterfaceVersion(ptr) wine_vk_icdNegotiateLoaderICDInterfaceVersion ++@ stdcall -private vk_icdGetInstanceProcAddr(ptr str) wine_vk_icdGetInstanceProcAddr ++@ stdcall -private vk_icdNegotiateLoaderICDInterfaceVersion(ptr) wine_vk_icdNegotiateLoaderICDInterfaceVersion + @ cdecl -norelay native_vkGetInstanceProcAddrWINE(ptr str) +-@ stdcall wine_vkAcquireNextImage2KHR(ptr ptr ptr) +-@ stdcall wine_vkAcquireNextImageKHR(ptr int64 int64 int64 int64 ptr) +-@ stdcall wine_vkAllocateCommandBuffers(ptr ptr ptr) +-@ stdcall wine_vkAllocateDescriptorSets(ptr ptr ptr) +-@ stdcall wine_vkAllocateMemory(ptr ptr ptr ptr) +-@ stdcall wine_vkBeginCommandBuffer(ptr ptr) +-@ stdcall wine_vkBindBufferMemory(ptr int64 int64 int64) +-@ stdcall wine_vkBindBufferMemory2(ptr long ptr) +-@ stdcall wine_vkBindImageMemory(ptr int64 int64 int64) +-@ stdcall wine_vkBindImageMemory2(ptr long ptr) +-@ stdcall wine_vkCmdBeginQuery(ptr int64 long long) +-@ stdcall wine_vkCmdBeginRenderPass(ptr ptr long) +-@ stdcall wine_vkCmdBindDescriptorSets(ptr long int64 long long ptr long ptr) +-@ stdcall wine_vkCmdBindIndexBuffer(ptr int64 int64 long) +-@ stdcall wine_vkCmdBindPipeline(ptr long int64) +-@ stdcall wine_vkCmdBindVertexBuffers(ptr long long ptr ptr) +-@ stdcall wine_vkCmdBlitImage(ptr int64 long int64 long long ptr long) +-@ stdcall wine_vkCmdClearAttachments(ptr long ptr long ptr) +-@ stdcall wine_vkCmdClearColorImage(ptr int64 long ptr long ptr) +-@ stdcall wine_vkCmdClearDepthStencilImage(ptr int64 long ptr long ptr) +-@ stdcall wine_vkCmdCopyBuffer(ptr int64 int64 long ptr) +-@ stdcall wine_vkCmdCopyBufferToImage(ptr int64 int64 long long ptr) +-@ stdcall wine_vkCmdCopyImage(ptr int64 long int64 long long ptr) +-@ stdcall wine_vkCmdCopyImageToBuffer(ptr int64 long int64 long ptr) +-@ stdcall wine_vkCmdCopyQueryPoolResults(ptr int64 long long int64 int64 int64 long) +-@ stdcall wine_vkCmdDispatch(ptr long long long) +-@ stdcall wine_vkCmdDispatchBase(ptr long long long long long long) +-@ stdcall wine_vkCmdDispatchIndirect(ptr int64 int64) +-@ stdcall wine_vkCmdDraw(ptr long long long long) +-@ stdcall wine_vkCmdDrawIndexed(ptr long long long long long) +-@ stdcall wine_vkCmdDrawIndexedIndirect(ptr int64 int64 long long) +-@ stdcall wine_vkCmdDrawIndirect(ptr int64 int64 long long) +-@ stdcall wine_vkCmdEndQuery(ptr int64 long) +-@ stdcall wine_vkCmdEndRenderPass(ptr) +-@ stdcall wine_vkCmdExecuteCommands(ptr long ptr) +-@ stdcall wine_vkCmdFillBuffer(ptr int64 int64 int64 long) +-@ stdcall wine_vkCmdNextSubpass(ptr long) +-@ stdcall wine_vkCmdPipelineBarrier(ptr long long long long ptr long ptr long ptr) +-@ stdcall wine_vkCmdPushConstants(ptr int64 long long long ptr) +-@ stdcall wine_vkCmdResetEvent(ptr int64 long) +-@ stdcall wine_vkCmdResetQueryPool(ptr int64 long long) +-@ stdcall wine_vkCmdResolveImage(ptr int64 long int64 long long ptr) +-@ stdcall wine_vkCmdSetBlendConstants(ptr ptr) +-@ stdcall wine_vkCmdSetDepthBias(ptr float float float) +-@ stdcall wine_vkCmdSetDepthBounds(ptr float float) +-@ stdcall wine_vkCmdSetDeviceMask(ptr long) +-@ stdcall wine_vkCmdSetEvent(ptr int64 long) +-@ stdcall wine_vkCmdSetLineWidth(ptr float) +-@ stdcall wine_vkCmdSetScissor(ptr long long ptr) +-@ stdcall wine_vkCmdSetStencilCompareMask(ptr long long) +-@ stdcall wine_vkCmdSetStencilReference(ptr long long) +-@ stdcall wine_vkCmdSetStencilWriteMask(ptr long long) +-@ stdcall wine_vkCmdSetViewport(ptr long long ptr) +-@ stdcall wine_vkCmdUpdateBuffer(ptr int64 int64 int64 ptr) +-@ stdcall wine_vkCmdWaitEvents(ptr long ptr long long long ptr long ptr long ptr) +-@ stdcall wine_vkCmdWriteTimestamp(ptr long int64 long) +-@ stdcall wine_vkCreateBuffer(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateBufferView(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateCommandPool(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateComputePipelines(ptr int64 long ptr ptr ptr) +-@ stdcall wine_vkCreateDescriptorPool(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateDescriptorSetLayout(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateDescriptorUpdateTemplate(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateDevice(ptr ptr ptr ptr) ++@ stdcall -private wine_vkAcquireNextImage2KHR(ptr ptr ptr) ++@ stdcall -private wine_vkAcquireNextImageKHR(ptr int64 int64 int64 int64 ptr) ++@ stdcall -private wine_vkAllocateCommandBuffers(ptr ptr ptr) ++@ stdcall -private wine_vkAllocateDescriptorSets(ptr ptr ptr) ++@ stdcall -private wine_vkAllocateMemory(ptr ptr ptr ptr) ++@ stdcall -private wine_vkBeginCommandBuffer(ptr ptr) ++@ stdcall -private wine_vkBindBufferMemory(ptr int64 int64 int64) ++@ stdcall -private wine_vkBindBufferMemory2(ptr long ptr) ++@ stdcall -private wine_vkBindImageMemory(ptr int64 int64 int64) ++@ stdcall -private wine_vkBindImageMemory2(ptr long ptr) ++@ stdcall -private wine_vkCmdBeginQuery(ptr int64 long long) ++@ stdcall -private wine_vkCmdBeginRenderPass(ptr ptr long) ++@ stdcall -private wine_vkCmdBindDescriptorSets(ptr long int64 long long ptr long ptr) ++@ stdcall -private wine_vkCmdBindIndexBuffer(ptr int64 int64 long) ++@ stdcall -private wine_vkCmdBindPipeline(ptr long int64) ++@ stdcall -private wine_vkCmdBindVertexBuffers(ptr long long ptr ptr) ++@ stdcall -private wine_vkCmdBlitImage(ptr int64 long int64 long long ptr long) ++@ stdcall -private wine_vkCmdClearAttachments(ptr long ptr long ptr) ++@ stdcall -private wine_vkCmdClearColorImage(ptr int64 long ptr long ptr) ++@ stdcall -private wine_vkCmdClearDepthStencilImage(ptr int64 long ptr long ptr) ++@ stdcall -private wine_vkCmdCopyBuffer(ptr int64 int64 long ptr) ++@ stdcall -private wine_vkCmdCopyBufferToImage(ptr int64 int64 long long ptr) ++@ stdcall -private wine_vkCmdCopyImage(ptr int64 long int64 long long ptr) ++@ stdcall -private wine_vkCmdCopyImageToBuffer(ptr int64 long int64 long ptr) ++@ stdcall -private wine_vkCmdCopyQueryPoolResults(ptr int64 long long int64 int64 int64 long) ++@ stdcall -private wine_vkCmdDispatch(ptr long long long) ++@ stdcall -private wine_vkCmdDispatchBase(ptr long long long long long long) ++@ stdcall -private wine_vkCmdDispatchIndirect(ptr int64 int64) ++@ stdcall -private wine_vkCmdDraw(ptr long long long long) ++@ stdcall -private wine_vkCmdDrawIndexed(ptr long long long long long) ++@ stdcall -private wine_vkCmdDrawIndexedIndirect(ptr int64 int64 long long) ++@ stdcall -private wine_vkCmdDrawIndirect(ptr int64 int64 long long) ++@ stdcall -private wine_vkCmdEndQuery(ptr int64 long) ++@ stdcall -private wine_vkCmdEndRenderPass(ptr) ++@ stdcall -private wine_vkCmdExecuteCommands(ptr long ptr) ++@ stdcall -private wine_vkCmdFillBuffer(ptr int64 int64 int64 long) ++@ stdcall -private wine_vkCmdNextSubpass(ptr long) ++@ stdcall -private wine_vkCmdPipelineBarrier(ptr long long long long ptr long ptr long ptr) ++@ stdcall -private wine_vkCmdPushConstants(ptr int64 long long long ptr) ++@ stdcall -private wine_vkCmdResetEvent(ptr int64 long) ++@ stdcall -private wine_vkCmdResetQueryPool(ptr int64 long long) ++@ stdcall -private wine_vkCmdResolveImage(ptr int64 long int64 long long ptr) ++@ stdcall -private wine_vkCmdSetBlendConstants(ptr ptr) ++@ stdcall -private wine_vkCmdSetDepthBias(ptr float float float) ++@ stdcall -private wine_vkCmdSetDepthBounds(ptr float float) ++@ stdcall -private wine_vkCmdSetDeviceMask(ptr long) ++@ stdcall -private wine_vkCmdSetEvent(ptr int64 long) ++@ stdcall -private wine_vkCmdSetLineWidth(ptr float) ++@ stdcall -private wine_vkCmdSetScissor(ptr long long ptr) ++@ stdcall -private wine_vkCmdSetStencilCompareMask(ptr long long) ++@ stdcall -private wine_vkCmdSetStencilReference(ptr long long) ++@ stdcall -private wine_vkCmdSetStencilWriteMask(ptr long long) ++@ stdcall -private wine_vkCmdSetViewport(ptr long long ptr) ++@ stdcall -private wine_vkCmdUpdateBuffer(ptr int64 int64 int64 ptr) ++@ stdcall -private wine_vkCmdWaitEvents(ptr long ptr long long long ptr long ptr long ptr) ++@ stdcall -private wine_vkCmdWriteTimestamp(ptr long int64 long) ++@ stdcall -private wine_vkCreateBuffer(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateBufferView(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateCommandPool(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateComputePipelines(ptr int64 long ptr ptr ptr) ++@ stdcall -private wine_vkCreateDescriptorPool(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateDescriptorSetLayout(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateDescriptorUpdateTemplate(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateDevice(ptr ptr ptr ptr) + @ stub vkCreateDisplayModeKHR + @ stub vkCreateDisplayPlaneSurfaceKHR +-@ stdcall wine_vkCreateEvent(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateFence(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateFramebuffer(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateGraphicsPipelines(ptr int64 long ptr ptr ptr) +-@ stdcall wine_vkCreateImage(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateImageView(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateInstance(ptr ptr ptr) +-@ stdcall wine_vkCreatePipelineCache(ptr ptr ptr ptr) +-@ stdcall wine_vkCreatePipelineLayout(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateQueryPool(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateRenderPass(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateSampler(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateSamplerYcbcrConversion(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateSemaphore(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateShaderModule(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateEvent(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateFence(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateFramebuffer(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateGraphicsPipelines(ptr int64 long ptr ptr ptr) ++@ stdcall -private wine_vkCreateImage(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateImageView(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateInstance(ptr ptr ptr) ++@ stdcall -private wine_vkCreatePipelineCache(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreatePipelineLayout(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateQueryPool(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateRenderPass(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateSampler(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateSamplerYcbcrConversion(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateSemaphore(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateShaderModule(ptr ptr ptr ptr) + @ stub vkCreateSharedSwapchainsKHR +-@ stdcall wine_vkCreateSwapchainKHR(ptr ptr ptr ptr) +-@ stdcall wine_vkCreateWin32SurfaceKHR(ptr ptr ptr ptr) +-@ stdcall wine_vkDestroyBuffer(ptr int64 ptr) +-@ stdcall wine_vkDestroyBufferView(ptr int64 ptr) +-@ stdcall wine_vkDestroyCommandPool(ptr int64 ptr) +-@ stdcall wine_vkDestroyDescriptorPool(ptr int64 ptr) +-@ stdcall wine_vkDestroyDescriptorSetLayout(ptr int64 ptr) +-@ stdcall wine_vkDestroyDescriptorUpdateTemplate(ptr int64 ptr) +-@ stdcall wine_vkDestroyDevice(ptr ptr) +-@ stdcall wine_vkDestroyEvent(ptr int64 ptr) +-@ stdcall wine_vkDestroyFence(ptr int64 ptr) +-@ stdcall wine_vkDestroyFramebuffer(ptr int64 ptr) +-@ stdcall wine_vkDestroyImage(ptr int64 ptr) +-@ stdcall wine_vkDestroyImageView(ptr int64 ptr) +-@ stdcall wine_vkDestroyInstance(ptr ptr) +-@ stdcall wine_vkDestroyPipeline(ptr int64 ptr) +-@ stdcall wine_vkDestroyPipelineCache(ptr int64 ptr) +-@ stdcall wine_vkDestroyPipelineLayout(ptr int64 ptr) +-@ stdcall wine_vkDestroyQueryPool(ptr int64 ptr) +-@ stdcall wine_vkDestroyRenderPass(ptr int64 ptr) +-@ stdcall wine_vkDestroySampler(ptr int64 ptr) +-@ stdcall wine_vkDestroySamplerYcbcrConversion(ptr int64 ptr) +-@ stdcall wine_vkDestroySemaphore(ptr int64 ptr) +-@ stdcall wine_vkDestroyShaderModule(ptr int64 ptr) +-@ stdcall wine_vkDestroySurfaceKHR(ptr int64 ptr) +-@ stdcall wine_vkDestroySwapchainKHR(ptr int64 ptr) +-@ stdcall wine_vkDeviceWaitIdle(ptr) +-@ stdcall wine_vkEndCommandBuffer(ptr) +-@ stdcall wine_vkEnumerateDeviceExtensionProperties(ptr str ptr ptr) +-@ stdcall wine_vkEnumerateDeviceLayerProperties(ptr ptr ptr) +-@ stdcall wine_vkEnumerateInstanceExtensionProperties(str ptr ptr) +-@ stdcall wine_vkEnumerateInstanceLayerProperties(ptr ptr) +-@ stdcall wine_vkEnumerateInstanceVersion(ptr) +-@ stdcall wine_vkEnumeratePhysicalDeviceGroups(ptr ptr ptr) +-@ stdcall wine_vkEnumeratePhysicalDevices(ptr ptr ptr) +-@ stdcall wine_vkFlushMappedMemoryRanges(ptr long ptr) +-@ stdcall wine_vkFreeCommandBuffers(ptr int64 long ptr) +-@ stdcall wine_vkFreeDescriptorSets(ptr int64 long ptr) +-@ stdcall wine_vkFreeMemory(ptr int64 ptr) +-@ stdcall wine_vkGetBufferMemoryRequirements(ptr int64 ptr) +-@ stdcall wine_vkGetBufferMemoryRequirements2(ptr ptr ptr) +-@ stdcall wine_vkGetDescriptorSetLayoutSupport(ptr ptr ptr) +-@ stdcall wine_vkGetDeviceGroupPeerMemoryFeatures(ptr long long long long) +-@ stdcall wine_vkGetDeviceGroupPresentCapabilitiesKHR(ptr ptr) +-@ stdcall wine_vkGetDeviceGroupSurfacePresentModesKHR(ptr int64 long) +-@ stdcall wine_vkGetDeviceMemoryCommitment(ptr int64 ptr) +-@ stdcall wine_vkGetDeviceProcAddr(ptr str) +-@ stdcall wine_vkGetDeviceQueue(ptr long long ptr) +-@ stdcall wine_vkGetDeviceQueue2(ptr ptr ptr) ++@ stdcall -private wine_vkCreateSwapchainKHR(ptr ptr ptr ptr) ++@ stdcall -private wine_vkCreateWin32SurfaceKHR(ptr ptr ptr ptr) ++@ stdcall -private wine_vkDestroyBuffer(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyBufferView(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyCommandPool(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyDescriptorPool(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyDescriptorSetLayout(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyDescriptorUpdateTemplate(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyDevice(ptr ptr) ++@ stdcall -private wine_vkDestroyEvent(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyFence(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyFramebuffer(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyImage(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyImageView(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyInstance(ptr ptr) ++@ stdcall -private wine_vkDestroyPipeline(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyPipelineCache(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyPipelineLayout(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyQueryPool(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyRenderPass(ptr int64 ptr) ++@ stdcall -private wine_vkDestroySampler(ptr int64 ptr) ++@ stdcall -private wine_vkDestroySamplerYcbcrConversion(ptr int64 ptr) ++@ stdcall -private wine_vkDestroySemaphore(ptr int64 ptr) ++@ stdcall -private wine_vkDestroyShaderModule(ptr int64 ptr) ++@ stdcall -private wine_vkDestroySurfaceKHR(ptr int64 ptr) ++@ stdcall -private wine_vkDestroySwapchainKHR(ptr int64 ptr) ++@ stdcall -private wine_vkDeviceWaitIdle(ptr) ++@ stdcall -private wine_vkEndCommandBuffer(ptr) ++@ stdcall -private wine_vkEnumerateDeviceExtensionProperties(ptr str ptr ptr) ++@ stdcall -private wine_vkEnumerateDeviceLayerProperties(ptr ptr ptr) ++@ stdcall -private wine_vkEnumerateInstanceExtensionProperties(str ptr ptr) ++@ stdcall -private wine_vkEnumerateInstanceLayerProperties(ptr ptr) ++@ stdcall -private wine_vkEnumerateInstanceVersion(ptr) ++@ stdcall -private wine_vkEnumeratePhysicalDeviceGroups(ptr ptr ptr) ++@ stdcall -private wine_vkEnumeratePhysicalDevices(ptr ptr ptr) ++@ stdcall -private wine_vkFlushMappedMemoryRanges(ptr long ptr) ++@ stdcall -private wine_vkFreeCommandBuffers(ptr int64 long ptr) ++@ stdcall -private wine_vkFreeDescriptorSets(ptr int64 long ptr) ++@ stdcall -private wine_vkFreeMemory(ptr int64 ptr) ++@ stdcall -private wine_vkGetBufferMemoryRequirements(ptr int64 ptr) ++@ stdcall -private wine_vkGetBufferMemoryRequirements2(ptr ptr ptr) ++@ stdcall -private wine_vkGetDescriptorSetLayoutSupport(ptr ptr ptr) ++@ stdcall -private wine_vkGetDeviceGroupPeerMemoryFeatures(ptr long long long long) ++@ stdcall -private wine_vkGetDeviceGroupPresentCapabilitiesKHR(ptr ptr) ++@ stdcall -private wine_vkGetDeviceGroupSurfacePresentModesKHR(ptr int64 long) ++@ stdcall -private wine_vkGetDeviceMemoryCommitment(ptr int64 ptr) ++@ stdcall -private wine_vkGetDeviceProcAddr(ptr str) ++@ stdcall -private wine_vkGetDeviceQueue(ptr long long ptr) ++@ stdcall -private wine_vkGetDeviceQueue2(ptr ptr ptr) + @ stub vkGetDisplayModePropertiesKHR + @ stub vkGetDisplayPlaneCapabilitiesKHR + @ stub vkGetDisplayPlaneSupportedDisplaysKHR +-@ stdcall wine_vkGetEventStatus(ptr int64) +-@ stdcall wine_vkGetFenceStatus(ptr int64) +-@ stdcall wine_vkGetImageMemoryRequirements(ptr int64 ptr) +-@ stdcall wine_vkGetImageMemoryRequirements2(ptr ptr ptr) +-@ stdcall wine_vkGetImageSparseMemoryRequirements(ptr int64 ptr ptr) +-@ stdcall wine_vkGetImageSparseMemoryRequirements2(ptr ptr ptr ptr) +-@ stdcall wine_vkGetImageSubresourceLayout(ptr int64 ptr ptr) +-@ stdcall wine_vkGetInstanceProcAddr(ptr str) ++@ stdcall -private wine_vkGetEventStatus(ptr int64) ++@ stdcall -private wine_vkGetFenceStatus(ptr int64) ++@ stdcall -private wine_vkGetImageMemoryRequirements(ptr int64 ptr) ++@ stdcall -private wine_vkGetImageMemoryRequirements2(ptr ptr ptr) ++@ stdcall -private wine_vkGetImageSparseMemoryRequirements(ptr int64 ptr ptr) ++@ stdcall -private wine_vkGetImageSparseMemoryRequirements2(ptr ptr ptr ptr) ++@ stdcall -private wine_vkGetImageSubresourceLayout(ptr int64 ptr ptr) ++@ stdcall -private wine_vkGetInstanceProcAddr(ptr str) + @ stub vkGetPhysicalDeviceDisplayPlanePropertiesKHR + @ stub vkGetPhysicalDeviceDisplayPropertiesKHR + @ stub vkGetPhysicalDeviceExternalBufferProperties + @ stub vkGetPhysicalDeviceExternalFenceProperties + @ stub vkGetPhysicalDeviceExternalSemaphoreProperties +-@ stdcall wine_vkGetPhysicalDeviceFeatures(ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceFeatures2(ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceFormatProperties(ptr long ptr) +-@ stdcall wine_vkGetPhysicalDeviceFormatProperties2(ptr long ptr) +-@ stdcall wine_vkGetPhysicalDeviceImageFormatProperties(ptr long long long long long ptr) +-@ stdcall wine_vkGetPhysicalDeviceImageFormatProperties2(ptr ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceMemoryProperties(ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceMemoryProperties2(ptr ptr) +-@ stdcall wine_vkGetPhysicalDevicePresentRectanglesKHR(ptr int64 ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceProperties(ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceProperties2(ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceQueueFamilyProperties(ptr ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceQueueFamilyProperties2(ptr ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceSparseImageFormatProperties(ptr long long long long long ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceSparseImageFormatProperties2(ptr ptr ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(ptr int64 ptr) +-@ stdcall wine_vkGetPhysicalDeviceSurfaceFormatsKHR(ptr int64 ptr ptr) +-@ stdcall wine_vkGetPhysicalDeviceSurfacePresentModesKHR(ptr int64 ptr long) +-@ stdcall wine_vkGetPhysicalDeviceSurfaceSupportKHR(ptr long int64 ptr) +-@ stdcall wine_vkGetPhysicalDeviceWin32PresentationSupportKHR(ptr long) +-@ stdcall wine_vkGetPipelineCacheData(ptr int64 ptr ptr) +-@ stdcall wine_vkGetQueryPoolResults(ptr int64 long long long ptr int64 long) +-@ stdcall wine_vkGetRenderAreaGranularity(ptr int64 ptr) +-@ stdcall wine_vkGetSwapchainImagesKHR(ptr int64 ptr ptr) +-@ stdcall wine_vkInvalidateMappedMemoryRanges(ptr long ptr) +-@ stdcall wine_vkMapMemory(ptr int64 int64 int64 long ptr) +-@ stdcall wine_vkMergePipelineCaches(ptr int64 long ptr) +-@ stdcall wine_vkQueueBindSparse(ptr long ptr int64) +-@ stdcall wine_vkQueuePresentKHR(ptr ptr) +-@ stdcall wine_vkQueueSubmit(ptr long ptr int64) +-@ stdcall wine_vkQueueWaitIdle(ptr) +-@ stdcall wine_vkResetCommandBuffer(ptr long) +-@ stdcall wine_vkResetCommandPool(ptr int64 long) +-@ stdcall wine_vkResetDescriptorPool(ptr int64 long) +-@ stdcall wine_vkResetEvent(ptr int64) +-@ stdcall wine_vkResetFences(ptr long ptr) +-@ stdcall wine_vkSetEvent(ptr int64) +-@ stdcall wine_vkTrimCommandPool(ptr int64 long) +-@ stdcall wine_vkUnmapMemory(ptr int64) +-@ stdcall wine_vkUpdateDescriptorSetWithTemplate(ptr int64 int64 ptr) +-@ stdcall wine_vkUpdateDescriptorSets(ptr long ptr long ptr) +-@ stdcall wine_vkWaitForFences(ptr long ptr long int64) ++@ stdcall -private wine_vkGetPhysicalDeviceFeatures(ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceFeatures2(ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceFormatProperties(ptr long ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceFormatProperties2(ptr long ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceImageFormatProperties(ptr long long long long long ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceImageFormatProperties2(ptr ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceMemoryProperties(ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceMemoryProperties2(ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDevicePresentRectanglesKHR(ptr int64 ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceProperties(ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceProperties2(ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceQueueFamilyProperties(ptr ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceQueueFamilyProperties2(ptr ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceSparseImageFormatProperties(ptr long long long long long ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceSparseImageFormatProperties2(ptr ptr ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(ptr int64 ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceSurfaceFormatsKHR(ptr int64 ptr ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceSurfacePresentModesKHR(ptr int64 ptr long) ++@ stdcall -private wine_vkGetPhysicalDeviceSurfaceSupportKHR(ptr long int64 ptr) ++@ stdcall -private wine_vkGetPhysicalDeviceWin32PresentationSupportKHR(ptr long) ++@ stdcall -private wine_vkGetPipelineCacheData(ptr int64 ptr ptr) ++@ stdcall -private wine_vkGetQueryPoolResults(ptr int64 long long long ptr int64 long) ++@ stdcall -private wine_vkGetRenderAreaGranularity(ptr int64 ptr) ++@ stdcall -private wine_vkGetSwapchainImagesKHR(ptr int64 ptr ptr) ++@ stdcall -private wine_vkInvalidateMappedMemoryRanges(ptr long ptr) ++@ stdcall -private wine_vkMapMemory(ptr int64 int64 int64 long ptr) ++@ stdcall -private wine_vkMergePipelineCaches(ptr int64 long ptr) ++@ stdcall -private wine_vkQueueBindSparse(ptr long ptr int64) ++@ stdcall -private wine_vkQueuePresentKHR(ptr ptr) ++@ stdcall -private wine_vkQueueSubmit(ptr long ptr int64) ++@ stdcall -private wine_vkQueueWaitIdle(ptr) ++@ stdcall -private wine_vkResetCommandBuffer(ptr long) ++@ stdcall -private wine_vkResetCommandPool(ptr int64 long) ++@ stdcall -private wine_vkResetDescriptorPool(ptr int64 long) ++@ stdcall -private wine_vkResetEvent(ptr int64) ++@ stdcall -private wine_vkResetFences(ptr long ptr) ++@ stdcall -private wine_vkSetEvent(ptr int64) ++@ stdcall -private wine_vkTrimCommandPool(ptr int64 long) ++@ stdcall -private wine_vkUnmapMemory(ptr int64) ++@ stdcall -private wine_vkUpdateDescriptorSetWithTemplate(ptr int64 int64 ptr) ++@ stdcall -private wine_vkUpdateDescriptorSets(ptr long ptr long ptr) ++@ stdcall -private wine_vkWaitForFences(ptr long ptr long int64) +-- +1.9.1 + diff --git a/patches/ml-patches/0019-wmp-Make-it-possible-to-query-IUnknown-from-IWMPCont.patch b/patches/ml-patches/0019-wmp-Make-it-possible-to-query-IUnknown-from-IWMPCont.patch new file mode 100644 index 00000000..0953e7a5 --- /dev/null +++ b/patches/ml-patches/0019-wmp-Make-it-possible-to-query-IUnknown-from-IWMPCont.patch @@ -0,0 +1,67 @@ +From 0c8b27474062d1908a821c4887fb49d8f5711406 Mon Sep 17 00:00:00 2001 +From: Nikolay Sivov +Date: Tue, 31 Jul 2018 15:40:08 +0300 +Subject: [PATCH 19/24] wmp: Make it possible to query IUnknown from + IWMPControls. + +Signed-off-by: Nikolay Sivov +--- + dlls/wmp/player.c | 4 +++- + dlls/wmp/tests/oleobj.c | 10 ++++++++-- + 2 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/dlls/wmp/player.c b/dlls/wmp/player.c +index 97fd66b..56b408f 100644 +--- a/dlls/wmp/player.c ++++ b/dlls/wmp/player.c +@@ -1365,7 +1365,9 @@ static const IWMPNetworkVtbl WMPNetworkVtbl = { + + static HRESULT WINAPI WMPControls_QueryInterface(IWMPControls *iface, REFIID riid, void **ppv) + { +- if(IsEqualGUID(riid, &IID_IDispatch)) { ++ if(IsEqualGUID(riid, &IID_IUnknown)) { ++ *ppv = iface; ++ }else if(IsEqualGUID(riid, &IID_IDispatch)) { + *ppv = iface; + }else if(IsEqualGUID(riid, &IID_IWMPControls)) { + *ppv = iface; +diff --git a/dlls/wmp/tests/oleobj.c b/dlls/wmp/tests/oleobj.c +index 6dfaa1c..472b985 100644 +--- a/dlls/wmp/tests/oleobj.c ++++ b/dlls/wmp/tests/oleobj.c +@@ -889,7 +889,6 @@ static void test_ConnectionPoint(IOleObject *unk) + IConnectionPoint_Release(point); + } + +- + static void test_wmp_ifaces(IOleObject *oleobj) + { + IWMPSettings *settings, *settings_qi; +@@ -899,6 +898,7 @@ static void test_wmp_ifaces(IOleObject *oleobj) + IWMPControls *controls; + VARIANT_BOOL vbool; + IWMPNetwork *network; ++ IUnknown *unk; + HRESULT hres; + BSTR filename; + BSTR url; +@@ -913,9 +913,15 @@ static void test_wmp_ifaces(IOleObject *oleobj) + + player = NULL; + hres = IWMPControls_QueryInterface(controls, &IID_IWMPPlayer, (void**)&player); +- ok(hres != S_OK, "Getting IWMPPlayer from IWMPControls SUCCEEDED\n"); ++ ok(hres == E_NOINTERFACE, "Getting IWMPPlayer from IWMPControls SUCCEEDED\n"); + ok(player == NULL, "player != NULL\n"); + ++ unk = NULL; ++ hres = IWMPControls_QueryInterface(controls, &IID_IUnknown, (void **)&unk); ++ ok(hres == S_OK, "Failed to get IUnknown, hr %#x.\n", hres); ++ ok(unk != NULL, "Unexpected interface pointer.\n"); ++ IUnknown_Release(unk); ++ + IWMPControls_Release(controls); + + /* IWPNetwork */ +-- +1.9.1 + diff --git a/patches/ml-patches/0020-libwine-Use-getsegmentdata-3-on-Mac-OS-to-find-the-e.patch b/patches/ml-patches/0020-libwine-Use-getsegmentdata-3-on-Mac-OS-to-find-the-e.patch new file mode 100644 index 00000000..3262c938 --- /dev/null +++ b/patches/ml-patches/0020-libwine-Use-getsegmentdata-3-on-Mac-OS-to-find-the-e.patch @@ -0,0 +1,91 @@ +From 1a3385427b0834c46a262959ed7da3f21b59d8bd Mon Sep 17 00:00:00 2001 +From: Chip Davis +Date: Wed, 1 Aug 2018 15:46:09 -0500 +Subject: [PATCH 20/24] libwine: Use getsegmentdata(3) on Mac OS to find the + end of the __TEXT segment. + +Don't assume it ends with the fake PE header. This assumption doesn't +hold on Mac OS: the __data section where it was placed is located after +several other sections, all in the __DATA segment. + +Unfortunately, this causes Wine, when DEP/NX is turned off, to override +the page protections for the start of the __DATA segment, removing write +permission from them, leading to a crash when winemac.drv attempted to +use an Objective-C class for the first time. + +Also, be sure to include the zero-fill (i.e. BSS) sections in the total +size of the .data section. This should fix some tests that use large +uninitialized arrays. + +Signed-off-by: Ken Thomases +Signed-off-by: Chip Davis +--- + libs/wine/loader.c | 19 ++++++++++++++++--- + 1 file changed, 16 insertions(+), 3 deletions(-) + +diff --git a/libs/wine/loader.c b/libs/wine/loader.c +index c07042a..0af3b8e 100644 +--- a/libs/wine/loader.c ++++ b/libs/wine/loader.c +@@ -49,6 +49,7 @@ + #undef LoadResource + #undef GetCurrentThread + #include ++#include + #else + extern char **environ; + #endif +@@ -387,11 +388,15 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) + IMAGE_NT_HEADERS *nt; + IMAGE_SECTION_HEADER *sec; + BYTE *addr; +- DWORD code_start, data_start, data_end; ++ DWORD code_start, code_end, data_start, data_end; + const size_t page_size = sysconf( _SC_PAGESIZE ); + const size_t page_mask = page_size - 1; + int delta, nb_sections = 2; /* code + data */ + unsigned int i; ++#ifdef __APPLE__ ++ Dl_info dli; ++ unsigned long data_size; ++#endif + + size_t size = (sizeof(IMAGE_DOS_HEADER) + + sizeof(IMAGE_NT_HEADERS) +@@ -425,7 +430,15 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) + delta = (const BYTE *)nt_descr - addr; + code_start = page_size; + data_start = delta & ~page_mask; ++#ifdef __APPLE__ ++ /* Need the mach_header, not the PE header, to give to getsegmentdata(3) */ ++ dladdr(addr, &dli); ++ code_end = getsegmentdata(dli.dli_fbase, "__DATA", &data_size) - addr; ++ data_end = (code_end + data_size + page_mask) & ~page_mask; ++#else ++ code_end = data_start; + data_end = (nt->OptionalHeader.SizeOfImage + delta + page_mask) & ~page_mask; ++#endif + + fixup_rva_ptrs( &nt->OptionalHeader.AddressOfEntryPoint, addr, 1 ); + +@@ -434,7 +447,7 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) + #ifndef _WIN64 + nt->OptionalHeader.BaseOfData = data_start; + #endif +- nt->OptionalHeader.SizeOfCode = data_start - code_start; ++ nt->OptionalHeader.SizeOfCode = code_end - code_start; + nt->OptionalHeader.SizeOfInitializedData = data_end - data_start; + nt->OptionalHeader.SizeOfUninitializedData = 0; + nt->OptionalHeader.SizeOfImage = data_end; +@@ -443,7 +456,7 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) + /* Build the code section */ + + memcpy( sec->Name, ".text", sizeof(".text") ); +- sec->SizeOfRawData = data_start - code_start; ++ sec->SizeOfRawData = code_end - code_start; + sec->Misc.VirtualSize = sec->SizeOfRawData; + sec->VirtualAddress = code_start; + sec->PointerToRawData = code_start; +-- +1.9.1 + diff --git a/patches/ml-patches/0021-d3dcompiler-Make-types-array-static-const.patch b/patches/ml-patches/0021-d3dcompiler-Make-types-array-static-const.patch new file mode 100644 index 00000000..41f06dd8 --- /dev/null +++ b/patches/ml-patches/0021-d3dcompiler-Make-types-array-static-const.patch @@ -0,0 +1,26 @@ +From bc1d6f652f351e3b418d321af20df3a205e6cb09 Mon Sep 17 00:00:00 2001 +From: Matteo Bruni +Date: Tue, 31 Jul 2018 15:04:53 +0200 +Subject: [PATCH 21/24] d3dcompiler: Make types array static const. + +Signed-off-by: Matteo Bruni +--- + dlls/d3dcompiler_43/utils.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dlls/d3dcompiler_43/utils.c b/dlls/d3dcompiler_43/utils.c +index b0232f3..748501f 100644 +--- a/dlls/d3dcompiler_43/utils.c ++++ b/dlls/d3dcompiler_43/utils.c +@@ -1154,7 +1154,7 @@ static BOOL expr_compatible_data_types(struct hlsl_type *t1, struct hlsl_type *t + + static enum hlsl_base_type expr_common_base_type(enum hlsl_base_type t1, enum hlsl_base_type t2) + { +- enum hlsl_base_type types[] = ++ static const enum hlsl_base_type types[] = + { + HLSL_TYPE_BOOL, + HLSL_TYPE_INT, +-- +1.9.1 + diff --git a/patches/ml-patches/0022-kernel32-Set-environment-variable-PUBLIC-on-the-proc.patch b/patches/ml-patches/0022-kernel32-Set-environment-variable-PUBLIC-on-the-proc.patch new file mode 100644 index 00000000..002392e0 --- /dev/null +++ b/patches/ml-patches/0022-kernel32-Set-environment-variable-PUBLIC-on-the-proc.patch @@ -0,0 +1,38 @@ +From 6d9aadecbafcd048702db67dab8c42cf6141712a Mon Sep 17 00:00:00 2001 +From: Dmitry Timoshkov +Date: Tue, 31 Jul 2018 18:57:59 +0800 +Subject: [PATCH 22/24] kernel32: Set environment variable %PUBLIC% on the + process start-up. + +This patch fixes an installer that has "[%PUBLIC]\Documents" entry +for some of the targets being copied from a cabinet file. Under +Windows %PUBLIC% environment variable is set to C:\Users\Public. + +Signed-off-by: Dmitry Timoshkov +--- + dlls/kernel32/process.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c +index 5aa245c..65b3091 100644 +--- a/dlls/kernel32/process.c ++++ b/dlls/kernel32/process.c +@@ -520,6 +520,7 @@ static void set_additional_environment(void) + static const WCHAR computernameW[] = {'C','O','M','P','U','T','E','R','N','A','M','E',0}; + static const WCHAR allusersW[] = {'A','L','L','U','S','E','R','S','P','R','O','F','I','L','E',0}; + static const WCHAR programdataW[] = {'P','r','o','g','r','a','m','D','a','t','a',0}; ++ static const WCHAR publicW[] = {'P','U','B','L','I','C',0}; + OBJECT_ATTRIBUTES attr; + UNICODE_STRING nameW; + WCHAR *profile_dir = NULL, *all_users_dir = NULL, *program_data_dir = NULL; +@@ -560,6 +561,7 @@ static void set_additional_environment(void) + if (p > value && p[-1] != '\\') *p++ = '\\'; + strcpyW( p, all_users_dir ); + SetEnvironmentVariableW( allusersW, value ); ++ SetEnvironmentVariableW( publicW, value ); + HeapFree( GetProcessHeap(), 0, value ); + } + +-- +1.9.1 + diff --git a/patches/ml-patches/0023-wbemprox-Add-Win32_NetworkAdapterConfiguration-IPAdd.patch b/patches/ml-patches/0023-wbemprox-Add-Win32_NetworkAdapterConfiguration-IPAdd.patch new file mode 100644 index 00000000..1e9dd059 --- /dev/null +++ b/patches/ml-patches/0023-wbemprox-Add-Win32_NetworkAdapterConfiguration-IPAdd.patch @@ -0,0 +1,90 @@ +From 99ff0c4871819ad0eef719e22ce8bd61c90ff1b6 Mon Sep 17 00:00:00 2001 +From: Piotr Caban +Date: Wed, 1 Aug 2018 17:23:23 +0200 +Subject: [PATCH 23/24] wbemprox: Add + Win32_NetworkAdapterConfiguration::IPAddress property. + +Signed-off-by: Piotr Caban +--- + dlls/wbemprox/builtin.c | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) + +diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c +index 73f4192..532ee88 100644 +--- a/dlls/wbemprox/builtin.c ++++ b/dlls/wbemprox/builtin.c +@@ -255,6 +255,8 @@ static const WCHAR prop_interfacetypeW[] = + {'I','n','t','e','r','f','a','c','e','T','y','p','e',0}; + static const WCHAR prop_intvalueW[] = + {'I','n','t','e','g','e','r','V','a','l','u','e',0}; ++static const WCHAR prop_ipaddressW[] = ++ {'I','P','A','d','d','r','e','s','s',0}; + static const WCHAR prop_ipconnectionmetricW[] = + {'I','P','C','o','n','n','e','c','t','i','o','n','M','e','t','r','i','c',0}; + static const WCHAR prop_ipenabledW[] = +@@ -553,6 +555,7 @@ static const struct column col_networkadapterconfig[] = + { prop_dnshostnameW, CIM_STRING|COL_FLAG_DYNAMIC }, + { prop_dnsserversearchorderW, CIM_STRING|CIM_FLAG_ARRAY|COL_FLAG_DYNAMIC }, + { prop_indexW, CIM_UINT32|COL_FLAG_KEY, VT_I4 }, ++ { prop_ipaddressW, CIM_STRING|CIM_FLAG_ARRAY|COL_FLAG_DYNAMIC }, + { prop_ipconnectionmetricW, CIM_UINT32, VT_I4 }, + { prop_ipenabledW, CIM_BOOLEAN }, + { prop_macaddressW, CIM_STRING|COL_FLAG_DYNAMIC }, +@@ -970,6 +973,7 @@ struct record_networkadapterconfig + const WCHAR *dnshostname; + const struct array *dnsserversearchorder; + UINT32 index; ++ const struct array *ipaddress; + UINT32 ipconnectionmetric; + int ipenabled; + const WCHAR *mac_address; +@@ -2426,6 +2430,38 @@ static struct array *get_dnsserversearchorder( IP_ADAPTER_DNS_SERVER_ADDRESS *li + ret->ptr = ptr; + return ret; + } ++static struct array *get_ipaddress( IP_ADAPTER_UNICAST_ADDRESS_LH *list ) ++{ ++ IP_ADAPTER_UNICAST_ADDRESS_LH *address; ++ struct array *ret; ++ ULONG buflen, i = 0, count = 0; ++ WCHAR **ptr, buf[54]; /* max IPv6 address length */ ++ ++ if (!list) return NULL; ++ for (address = list; address; address = address->Next) count++; ++ ++ if (!(ret = heap_alloc( sizeof(*ret) ))) return NULL; ++ if (!(ptr = heap_alloc( sizeof(*ptr) * count ))) ++ { ++ heap_free( ret ); ++ return NULL; ++ } ++ for (address = list; address; address = address->Next) ++ { ++ buflen = sizeof(buf)/sizeof(buf[0]); ++ if (WSAAddressToStringW( address->Address.lpSockaddr, address->Address.iSockaddrLength, ++ NULL, buf, &buflen) || !(ptr[i++] = heap_strdupW( buf ))) ++ { ++ for (; i > 0; i--) heap_free( ptr[i - 1] ); ++ heap_free( ptr ); ++ heap_free( ret ); ++ return NULL; ++ } ++ } ++ ret->count = count; ++ ret->ptr = ptr; ++ return ret; ++} + static WCHAR *get_settingid( UINT32 index ) + { + GUID guid; +@@ -2475,6 +2511,7 @@ static enum fill_status fill_networkadapterconfig( struct table *table, const st + rec->dnshostname = get_dnshostname( aa->FirstUnicastAddress ); + rec->dnsserversearchorder = get_dnsserversearchorder( aa->FirstDnsServerAddress ); + rec->index = aa->u.s.IfIndex; ++ rec->ipaddress = get_ipaddress( aa->FirstUnicastAddress ); + rec->ipconnectionmetric = 20; + rec->ipenabled = -1; + rec->mac_address = get_mac_address( aa->PhysicalAddress, aa->PhysicalAddressLength ); +-- +1.9.1 + diff --git a/patches/ml-patches/0024-wbemprox-Add-Win32_NetworkAdapterConfiguration-IPSub.patch b/patches/ml-patches/0024-wbemprox-Add-Win32_NetworkAdapterConfiguration-IPSub.patch new file mode 100644 index 00000000..590fee64 --- /dev/null +++ b/patches/ml-patches/0024-wbemprox-Add-Win32_NetworkAdapterConfiguration-IPSub.patch @@ -0,0 +1,118 @@ +From 9a8c43ec5ce2155b66de3623bf2af036f959a964 Mon Sep 17 00:00:00 2001 +From: Piotr Caban +Date: Wed, 1 Aug 2018 17:23:29 +0200 +Subject: [PATCH 24/24] wbemprox: Add + Win32_NetworkAdapterConfiguration::IPSubnet property. + +Signed-off-by: Piotr Caban +--- + dlls/wbemprox/builtin.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 58 insertions(+) + +diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c +index 532ee88..190f710 100644 +--- a/dlls/wbemprox/builtin.c ++++ b/dlls/wbemprox/builtin.c +@@ -49,6 +49,7 @@ + #include "wbemcli.h" + #include "wbemprov.h" + #include "iphlpapi.h" ++#include "netioapi.h" + #include "tlhelp32.h" + #include "d3d10.h" + #include "winternl.h" +@@ -261,6 +262,8 @@ static const WCHAR prop_ipconnectionmetricW[] = + {'I','P','C','o','n','n','e','c','t','i','o','n','M','e','t','r','i','c',0}; + static const WCHAR prop_ipenabledW[] = + {'I','P','E','n','a','b','l','e','d',0}; ++static const WCHAR prop_ipsubnet[] = ++ {'I','P','S','u','b','n','e','t',0}; + static const WCHAR prop_lastbootuptimeW[] = + {'L','a','s','t','B','o','o','t','U','p','T','i','m','e',0}; + static const WCHAR prop_levelW[] = +@@ -558,6 +561,7 @@ static const struct column col_networkadapterconfig[] = + { prop_ipaddressW, CIM_STRING|CIM_FLAG_ARRAY|COL_FLAG_DYNAMIC }, + { prop_ipconnectionmetricW, CIM_UINT32, VT_I4 }, + { prop_ipenabledW, CIM_BOOLEAN }, ++ { prop_ipsubnet, CIM_STRING|CIM_FLAG_ARRAY|COL_FLAG_DYNAMIC }, + { prop_macaddressW, CIM_STRING|COL_FLAG_DYNAMIC }, + { prop_settingidW, CIM_STRING|COL_FLAG_DYNAMIC } + }; +@@ -976,6 +980,7 @@ struct record_networkadapterconfig + const struct array *ipaddress; + UINT32 ipconnectionmetric; + int ipenabled; ++ const struct array *ipsubnet; + const WCHAR *mac_address; + const WCHAR *settingid; + }; +@@ -2462,6 +2467,58 @@ static struct array *get_ipaddress( IP_ADAPTER_UNICAST_ADDRESS_LH *list ) + ret->ptr = ptr; + return ret; + } ++static struct array *get_ipsubnet( IP_ADAPTER_UNICAST_ADDRESS_LH *list ) ++{ ++ IP_ADAPTER_UNICAST_ADDRESS_LH *address; ++ struct array *ret; ++ ULONG i = 0, count = 0; ++ WCHAR **ptr; ++ ++ if (!list) return NULL; ++ for (address = list; address; address = address->Next) count++; ++ ++ if (!(ret = heap_alloc( sizeof(*ret) ))) return NULL; ++ if (!(ptr = heap_alloc( sizeof(*ptr) * count ))) ++ { ++ heap_free( ret ); ++ return NULL; ++ } ++ for (address = list; address; address = address->Next) ++ { ++ if (address->Address.lpSockaddr->sa_family == AF_INET) ++ { ++ WCHAR buf[INET_ADDRSTRLEN]; ++ SOCKADDR_IN addr; ++ ULONG buflen = sizeof(buf)/sizeof(buf[0]); ++ ++ memset( &addr, 0, sizeof(addr) ); ++ addr.sin_family = AF_INET; ++ if (ConvertLengthToIpv4Mask( address->OnLinkPrefixLength, &addr.sin_addr.S_un.S_addr ) != NO_ERROR ++ || WSAAddressToStringW( (SOCKADDR*)&addr, sizeof(addr), NULL, buf, &buflen)) ++ ptr[i] = NULL; ++ else ++ ptr[i] = heap_strdupW( buf ); ++ } ++ else ++ { ++ static const WCHAR fmtW[] = {'%','u',0}; ++ WCHAR buf[11]; ++ ++ sprintfW(buf, fmtW, address->OnLinkPrefixLength); ++ ptr[i] = heap_strdupW( buf ); ++ } ++ if (!ptr[i++]) ++ { ++ for (; i > 0; i--) heap_free( ptr[i - 1] ); ++ heap_free( ptr ); ++ heap_free( ret ); ++ return NULL; ++ } ++ } ++ ret->count = count; ++ ret->ptr = ptr; ++ return ret; ++} + static WCHAR *get_settingid( UINT32 index ) + { + GUID guid; +@@ -2514,6 +2571,7 @@ static enum fill_status fill_networkadapterconfig( struct table *table, const st + rec->ipaddress = get_ipaddress( aa->FirstUnicastAddress ); + rec->ipconnectionmetric = 20; + rec->ipenabled = -1; ++ rec->ipsubnet = get_ipsubnet( aa->FirstUnicastAddress ); + rec->mac_address = get_mac_address( aa->PhysicalAddress, aa->PhysicalAddressLength ); + rec->settingid = get_settingid( rec->index ); + if (!match_row( table, row, cond, &status )) +-- +1.9.1 + diff --git a/patches/ml-patches/0025-kernel32-Add-support-for-MOVEFILE_WRITE_THROUGH-to-M.patch b/patches/ml-patches/0025-kernel32-Add-support-for-MOVEFILE_WRITE_THROUGH-to-M.patch new file mode 100644 index 00000000..af44be63 --- /dev/null +++ b/patches/ml-patches/0025-kernel32-Add-support-for-MOVEFILE_WRITE_THROUGH-to-M.patch @@ -0,0 +1,50 @@ +From 370536ad1d8c13a25567d940b86f29a614c66ad8 Mon Sep 17 00:00:00 2001 +From: Dmitry Timoshkov +Date: Thu, 2 Aug 2018 14:04:38 +0800 +Subject: [PATCH 1/3] kernel32: Add support for MOVEFILE_WRITE_THROUGH to + MoveFile. + +Signed-off-by: Dmitry Timoshkov +--- + dlls/kernel32/path.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c +index a389743..6d2a902 100644 +--- a/dlls/kernel32/path.c ++++ b/dlls/kernel32/path.c +@@ -1283,6 +1283,7 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, + NTSTATUS status; + HANDLE source_handle = 0, dest_handle; + ANSI_STRING source_unix, dest_unix; ++ DWORD options; + + TRACE("(%s,%s,%p,%p,%04x)\n", + debugstr_w(source), debugstr_w(dest), fnProgress, param, flag ); +@@ -1293,9 +1294,6 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, + if (!dest) + return DeleteFileW( source ); + +- if (flag & MOVEFILE_WRITE_THROUGH) +- FIXME("MOVEFILE_WRITE_THROUGH unimplemented\n"); +- + /* check if we are allowed to rename the source */ + + if (!RtlDosPathNameToNtPathName_U( source, &nt_name, NULL, NULL )) +@@ -1336,8 +1334,11 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest, + SetLastError( ERROR_PATH_NOT_FOUND ); + goto error; + } +- status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io, 0, +- FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT ); ++ ++ options = FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT; ++ if (flag & MOVEFILE_WRITE_THROUGH) ++ options |= FILE_WRITE_THROUGH; ++ status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io, 0, options ); + if (status == STATUS_SUCCESS) /* destination exists */ + { + NtClose( dest_handle ); +-- +1.9.1 + diff --git a/patches/ml-patches/0026-server-Add-support-for-FILE_WRITE_THROUGH-to-create_.patch b/patches/ml-patches/0026-server-Add-support-for-FILE_WRITE_THROUGH-to-create_.patch new file mode 100644 index 00000000..1b1ce260 --- /dev/null +++ b/patches/ml-patches/0026-server-Add-support-for-FILE_WRITE_THROUGH-to-create_.patch @@ -0,0 +1,30 @@ +From dfa61702f635d6ae7773e9e846800a77f179337c Mon Sep 17 00:00:00 2001 +From: Dmitry Timoshkov +Date: Thu, 2 Aug 2018 14:01:53 +0800 +Subject: [PATCH 2/3] server: Add support for FILE_WRITE_THROUGH to + create_file() request. + +Signed-off-by: Dmitry Timoshkov +--- + server/file.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/server/file.c b/server/file.c +index 446621a..9299530 100644 +--- a/server/file.c ++++ b/server/file.c +@@ -224,6 +224,11 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si + default: set_error( STATUS_INVALID_PARAMETER ); goto done; + } + ++#ifdef O_DIRECT ++ if (options & FILE_WRITE_THROUGH) ++ flags |= O_DIRECT; ++#endif ++ + if (sd) + { + const SID *owner = sd_get_owner( sd ); +-- +1.9.1 + diff --git a/patches/ml-patches/0027-kernel32-Add-support-for-FILE_FLAG_WRITE_THROUGH-to-.patch b/patches/ml-patches/0027-kernel32-Add-support-for-FILE_FLAG_WRITE_THROUGH-to-.patch new file mode 100644 index 00000000..2be94b8e --- /dev/null +++ b/patches/ml-patches/0027-kernel32-Add-support-for-FILE_FLAG_WRITE_THROUGH-to-.patch @@ -0,0 +1,27 @@ +From 83896a0c6bf2756273793f5d998259e7545fe15e Mon Sep 17 00:00:00 2001 +From: Dmitry Timoshkov +Date: Thu, 2 Aug 2018 14:04:13 +0800 +Subject: [PATCH 3/3] kernel32: Add support for FILE_FLAG_WRITE_THROUGH to + CreateFile. + +Signed-off-by: Dmitry Timoshkov +--- + dlls/kernel32/file.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c +index 1e5b9fe..1b33cfb 100644 +--- a/dlls/kernel32/file.c ++++ b/dlls/kernel32/file.c +@@ -1560,6 +1560,8 @@ HANDLE WINAPI CreateFileW( LPCWSTR filename, DWORD access, DWORD sharing, + options |= FILE_SYNCHRONOUS_IO_NONALERT; + if (attributes & FILE_FLAG_RANDOM_ACCESS) + options |= FILE_RANDOM_ACCESS; ++ if (attributes & FILE_FLAG_WRITE_THROUGH) ++ options |= FILE_WRITE_THROUGH; + attributes &= FILE_ATTRIBUTE_VALID_FLAGS; + + attr.Length = sizeof(attr); +-- +1.9.1 + diff --git a/patches/ml-patches/0028-cmd-Handle-quotes-when-parsing-the-folders-in-the-PA.patch b/patches/ml-patches/0028-cmd-Handle-quotes-when-parsing-the-folders-in-the-PA.patch new file mode 100644 index 00000000..a8c01d60 --- /dev/null +++ b/patches/ml-patches/0028-cmd-Handle-quotes-when-parsing-the-folders-in-the-PA.patch @@ -0,0 +1,113 @@ +From bde1bbf224f90b5ca4cfddad918e3a096a6c3a05 Mon Sep 17 00:00:00 2001 +From: Fabian Maurer +Date: Thu, 2 Aug 2018 19:48:59 +0200 +Subject: [PATCH] cmd: Handle quotes when parsing the folders in the PATH + environment variable + +Semicolons are also allowed inside a path, +as long as they are quoted. + +Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45552 +Signed-off-by: Fabian Maurer +--- + programs/cmd/tests/test_builtins.cmd | 17 +++++++++++++++++ + programs/cmd/tests/test_builtins.cmd.exp | 3 +++ + programs/cmd/wcmdmain.c | 27 ++++++++++++++++++++++----- + 3 files changed, 42 insertions(+), 5 deletions(-) + +diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd +index b9e9b25..775f21b 100644 +--- a/programs/cmd/tests/test_builtins.cmd ++++ b/programs/cmd/tests/test_builtins.cmd +@@ -507,6 +507,23 @@ rem Only the final quote ends the string + set "WINE_FOO=apple"banana"grape"orange + echo '%WINE_FOO%' + set WINE_FOO= ++rem set PATH must work with quotes ++set PATH_BACKUP=%PATH% ++mkdir folder ++mkdir "fol;der" ++echo echo I'm here! > "fol;der\sub1.bat" ++echo echo I'm here! > folder\sub1.bat ++set PATH=nothing;"fol;der" ++call sub1 ++set PATH="folder ++call sub1 ++set PATH=folder" ++call sub1 ++del "fol;der\sub1.bat" ++del folder\sub1.bat ++rmdir "fol;der" ++rmdir folder ++PATH=%PATH_BACKUP% + + echo ------------ Testing variable expansion ------------ + call :setError 0 +diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp +index 3118359..ea4157c 100644 +--- a/programs/cmd/tests/test_builtins.cmd.exp ++++ b/programs/cmd/tests/test_builtins.cmd.exp +@@ -475,6 +475,9 @@ foo + 'jim fred' + 'jim' + 'apple"banana"grape' ++I'm here!@space@ ++I'm here!@space@ ++I'm here!@space@ + ------------ Testing variable expansion ------------ + ~p0 should be path containing batch file + @path@ +diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c +index 8fe2d57..5135be4 100644 +--- a/programs/cmd/wcmdmain.c ++++ b/programs/cmd/wcmdmain.c +@@ -1099,24 +1099,41 @@ void WCMD_run_program (WCHAR *command, BOOL called) + wine_dbgstr_w(stemofsearch)); + while (pathposn) { + WCHAR thisDir[MAX_PATH] = {'\0'}; ++ int length = 0; + WCHAR *pos = NULL; + BOOL found = FALSE; ++ BOOL inside_quotes = FALSE; + + /* Work on the first directory on the search path */ +- pos = strchrW(pathposn, ';'); +- if (pos) { ++ pos = pathposn; ++ while ((inside_quotes || *pos != ';') && *pos != 0) ++ { ++ if (*pos == '"') ++ inside_quotes = !inside_quotes; ++ pos++; ++ } ++ ++ if (*pos) { /* Reached semicolon */ + memcpy(thisDir, pathposn, (pos-pathposn) * sizeof(WCHAR)); + thisDir[(pos-pathposn)] = 0x00; + pathposn = pos+1; +- +- } else { ++ } else { /* Reached string end */ + strcpyW(thisDir, pathposn); + pathposn = NULL; + } + ++ /* Remove quotes */ ++ length = strlenW(thisDir); ++ if (thisDir[length - 1] == '"') ++ thisDir[length - 1] = 0; ++ ++ if (*thisDir != '"') ++ strcpyW(temp, thisDir); ++ else ++ strcpyW(temp, thisDir + 1); ++ + /* Since you can have eg. ..\.. on the path, need to expand + to full information */ +- strcpyW(temp, thisDir); + GetFullPathNameW(temp, MAX_PATH, thisDir, NULL); + + /* 1. If extension supplied, see if that file exists */ +-- +1.9.1 + diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 77f7fe81..5d64b582 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -190,6 +190,7 @@ patch_enable_all () enable_libs_Unicode_Collation="$1" enable_loader_OSX_Preloader="$1" enable_ml_array_size="$1" + enable_ml_patches="$1" enable_mmsystem_dll16_MIDIHDR_Refcount="$1" enable_mountmgr_DosDevices="$1" enable_mscoree_CorValidateImage="$1" @@ -751,6 +752,9 @@ patch_enable () ml-array_size) enable_ml_array_size="$2" ;; + ml-patches) + enable_ml_patches="$2" + ;; mmsystem.dll16-MIDIHDR_Refcount) enable_mmsystem_dll16_MIDIHDR_Refcount="$2" ;; @@ -2325,7 +2329,11 @@ if test "$enable_Compiler_Warnings" -eq 1; then if test "$enable_ml_array_size" -gt 1; then abort "Patchset ml-array_size disabled, but Compiler_Warnings depends on that." fi + if test "$enable_ml_patches" -gt 1; then + abort "Patchset ml-patches disabled, but Compiler_Warnings depends on that." + fi enable_ml_array_size=1 + enable_ml_patches=1 fi @@ -2491,10 +2499,87 @@ if test "$enable_ml_array_size" -eq 1; then ) >> "$patchlist" fi +# Patchset ml-patches +# | +# | Modified files: +# | * configure, configure.ac, dlls/api-ms-win-devices-config-l1-1-0/Makefile.in, dlls/api-ms-win-devices-config-l1-1-0/api- +# | ms-win-devices-config-l1-1-0.spec, dlls/d3d8/tests/visual.c, dlls/d3d9/tests/visual.c, dlls/d3dcompiler_43/utils.c, +# | dlls/ddraw/tests/ddraw7.c, dlls/dsound/sound3d.c, dlls/hidclass.sys/hid.h, dlls/hidclass.sys/main.c, +# | dlls/hidclass.sys/pnp.c, dlls/kernel32/file.c, dlls/kernel32/path.c, dlls/kernel32/process.c, dlls/mpr/tests/mpr.c, +# | dlls/mpr/wnet.c, dlls/msi/custom.c, dlls/msvcp60/ios.c, dlls/msvcp90/ios.c, dlls/ntoskrnl.exe/instr.c, +# | dlls/odbc32/odbc32.spec, dlls/odbc32/proxyodbc.c, dlls/wbemprox/builtin.c, dlls/winebus.sys/bus.h, +# | dlls/winebus.sys/bus_iohid.c, dlls/winebus.sys/bus_sdl.c, dlls/winebus.sys/bus_udev.c, dlls/winebus.sys/main.c, +# | dlls/wined3d/utils.c, dlls/winevulkan/make_vulkan, dlls/winevulkan/vulkan.c, dlls/winevulkan/winevulkan.spec, +# | dlls/winmm/tests/wave.c, dlls/winmm/waveform.c, dlls/wmp/player.c, dlls/wmp/tests/oleobj.c, libs/wine/loader.c, +# | loader/wine.inf.in, programs/cmd/tests/test_builtins.cmd, programs/cmd/tests/test_builtins.cmd.exp, +# | programs/cmd/wcmdmain.c, programs/msiexec/msiexec.c, programs/winecfg/resource.h, programs/winecfg/theme.c, +# | programs/winecfg/winecfg.rc, programs/winemenubuilder/winemenubuilder.c, server/file.c, tools/make_specfiles +# | +if test "$enable_ml_patches" -eq 1; then + patch_apply ml-patches/0001-wined3d-Fix-WINED3D_MCS_COLOR2.patch + patch_apply ml-patches/0002-d3d9-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch + patch_apply ml-patches/0003-d3d8-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch + patch_apply ml-patches/0004-ddraw-tests-Add-a-test-for-D3DMCS_COLOR-1-2.patch + patch_apply ml-patches/0005-dsound-Correctly-calculate-angle-between-vectors-wit.patch + patch_apply ml-patches/0006-hidclass.sys-Unload-all-devices-before-unloading-a-m.patch + patch_apply ml-patches/0007-wine.inf-Add-Sources-key.patch + patch_apply ml-patches/0008-programs-Allow-to-disable-MIME-type-associations.patch + patch_apply ml-patches/0009-api-ms-win-devices-config-l1-1-0-Add-dll.patch + patch_apply ml-patches/0010-wnet-Make-WNetGetUniversalNameW-return-required-size.patch + patch_apply ml-patches/0011-msvcp90-Fix-EOF-delimiter-handling-in-basic_istream-.patch + patch_apply ml-patches/0012-ntoskrnl-Emulate-sti-cli-instructions-on-x86_64.patch + patch_apply ml-patches/0013-winebus.sys-Do-not-report-HID-report-read-errors-unc.patch + patch_apply ml-patches/0014-odbc32-Rename-functions-to-avoid-conflicts-with-nati.patch + patch_apply ml-patches/0015-winmm-Don-t-crash-in-waveOutOpen-when-nSamplesPerSec.patch + patch_apply ml-patches/0016-msi-Generate-unique-names-for-32-and-64-bit-custom-a.patch + patch_apply ml-patches/0017-winevulkan-Expose-driver-vkGetInstanceProcAddr-via-w.patch + patch_apply ml-patches/0018-winevulkan-Mark-ICD-and-thunking-functions-as-privat.patch + patch_apply ml-patches/0019-wmp-Make-it-possible-to-query-IUnknown-from-IWMPCont.patch + patch_apply ml-patches/0020-libwine-Use-getsegmentdata-3-on-Mac-OS-to-find-the-e.patch + patch_apply ml-patches/0021-d3dcompiler-Make-types-array-static-const.patch + patch_apply ml-patches/0022-kernel32-Set-environment-variable-PUBLIC-on-the-proc.patch + patch_apply ml-patches/0023-wbemprox-Add-Win32_NetworkAdapterConfiguration-IPAdd.patch + patch_apply ml-patches/0024-wbemprox-Add-Win32_NetworkAdapterConfiguration-IPSub.patch + patch_apply ml-patches/0025-kernel32-Add-support-for-MOVEFILE_WRITE_THROUGH-to-M.patch + patch_apply ml-patches/0026-server-Add-support-for-FILE_WRITE_THROUGH-to-create_.patch + patch_apply ml-patches/0027-kernel32-Add-support-for-FILE_FLAG_WRITE_THROUGH-to-.patch + patch_apply ml-patches/0028-cmd-Handle-quotes-when-parsing-the-folders-in-the-PA.patch + ( + printf '%s\n' '+ { "Stefan Dösinger", "wined3d: Fix WINED3D_MCS_COLOR2.", 1 },'; + printf '%s\n' '+ { "Stefan Dösinger", "d3d9/tests: Add a test for D3DMCS_COLOR{1/2}.", 1 },'; + printf '%s\n' '+ { "Stefan Dösinger", "d3d8/tests: Add a test for D3DMCS_COLOR{1/2}.", 1 },'; + printf '%s\n' '+ { "Stefan Dösinger", "ddraw/tests: Add a test for D3DMCS_COLOR{1/2}.", 1 },'; + printf '%s\n' '+ { "Andrew Eikum", "dsound: Correctly calculate angle between vectors with equal and opposite directions.", 1 },'; + printf '%s\n' '+ { "Aric Stewart", "hidclass.sys: Unload all devices before unloading a minidriver.", 1 },'; + printf '%s\n' '+ { "Gijs Vermeulen", "wine.inf: Add \"Sources\" key.", 1 },'; + printf '%s\n' '+ { "Dmitry Timoshkov", "programs: Allow to disable MIME-type associations.", 1 },'; + printf '%s\n' '+ { "Andrey Gusev", "api-ms-win-devices-config-l1-1-0: Add dll.", 1 },'; + printf '%s\n' '+ { "Fabian Maurer", "wnet: Make WNetGetUniversalNameW return required size when buffer is too small and add test.", 1 },'; + printf '%s\n' '+ { "Piotr Caban", "msvcp90: Fix EOF delimiter handling in basic_istream::ignore.", 1 },'; + printf '%s\n' '+ { "Fabian Maurer", "ntoskrnl: Emulate sti/cli instructions on x86_64.", 1 },'; + printf '%s\n' '+ { "Kai Krakow", "winebus.sys: Do not report HID report read errors unconditionally.", 1 },'; + printf '%s\n' '+ { "Daniel Lehman", "odbc32: Rename functions to avoid conflicts with native drivers.", 1 },'; + printf '%s\n' '+ { "Fabian Maurer", "winmm: Don'\''t crash in waveOutOpen when nSamplesPerSec is 0 and add tests.", 1 },'; + printf '%s\n' '+ { "Zebediah Figura", "msi: Generate unique names for 32- and 64-bit custom action server pipes.", 1 },'; + printf '%s\n' '+ { "Jacek Caban", "winevulkan: Expose driver vkGetInstanceProcAddr via winevulkan exports.", 1 },'; + printf '%s\n' '+ { "Jacek Caban", "winevulkan: Mark ICD and thunking functions as private.", 1 },'; + printf '%s\n' '+ { "Nikolay Sivov", "wmp: Make it possible to query IUnknown from IWMPControls.", 1 },'; + printf '%s\n' '+ { "Chip Davis", "libwine: Use getsegmentdata(3) on Mac OS to find the end of the __TEXT segment.", 1 },'; + printf '%s\n' '+ { "Matteo Bruni", "d3dcompiler: Make types array static const.", 1 },'; + printf '%s\n' '+ { "Dmitry Timoshkov", "kernel32: Set environment variable %PUBLIC% on the process start-up.", 1 },'; + printf '%s\n' '+ { "Piotr Caban", "wbemprox: Add Win32_NetworkAdapterConfiguration::IPAddress property.", 1 },'; + printf '%s\n' '+ { "Piotr Caban", "wbemprox: Add Win32_NetworkAdapterConfiguration::IPSubnet property.", 1 },'; + printf '%s\n' '+ { "Dmitry Timoshkov", "kernel32: Add support for MOVEFILE_WRITE_THROUGH to MoveFile.", 1 },'; + printf '%s\n' '+ { "Dmitry Timoshkov", "server: Add support for FILE_WRITE_THROUGH to create_file() request.", 1 },'; + printf '%s\n' '+ { "Dmitry Timoshkov", "kernel32: Add support for FILE_FLAG_WRITE_THROUGH to CreateFile.", 1 },'; + printf '%s\n' '+ { "Fabian Maurer", "cmd: Handle quotes when parsing the folders in the PATH environment variable.", 1 },'; + ) >> "$patchlist" +fi + # Patchset Compiler_Warnings # | # | This patchset has the following (direct or indirect) dependencies: -# | * ml-array_size +# | * ml-array_size, ml-patches # | # | Modified files: # | * dlls/amstream/mediastreamfilter.c, dlls/d2d1/brush.c, dlls/d2d1/geometry.c, dlls/d3d11/view.c, dlls/d3d8/texture.c, @@ -5697,7 +5782,7 @@ fi # Patchset ntoskrnl-Stubs # | # | This patchset has the following (direct or indirect) dependencies: -# | * ml-array_size, Compiler_Warnings +# | * ml-array_size, ml-patches, Compiler_Warnings # | # | Modified files: # | * dlls/ntoskrnl.exe/ntoskrnl.c, dlls/ntoskrnl.exe/ntoskrnl.exe.spec, dlls/ntoskrnl.exe/tests/driver.c, include/ddk/wdm.h, @@ -7909,7 +7994,7 @@ fi # Patchset winedevice-Default_Drivers # | # | This patchset has the following (direct or indirect) dependencies: -# | * dxva2-Video_Decoder, ml-array_size, Compiler_Warnings, ntoskrnl-Stubs +# | * dxva2-Video_Decoder, ml-array_size, ml-patches, Compiler_Warnings, ntoskrnl-Stubs # | # | Modified files: # | * configure.ac, dlls/dxgkrnl.sys/Makefile.in, dlls/dxgkrnl.sys/dxgkrnl.sys.spec, dlls/dxgkrnl.sys/main.c, diff --git a/patches/server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch b/patches/server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch index f16906f9..ac4d5dba 100644 --- a/patches/server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch +++ b/patches/server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch @@ -1,8 +1,8 @@ -From ae940533d113a6419605d09c874561af4cd292d4 Mon Sep 17 00:00:00 2001 +From 56c696c4b60417a6b0e5e59a154542be0858e884 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Fri, 18 Apr 2014 14:08:36 -0600 -Subject: server: Inherit security attributes from parent directories on - creation. (try 7) +Subject: [PATCH] server: Inherit security attributes from parent directories + on creation. (try 7) --- dlls/advapi32/tests/security.c | 8 +-- @@ -10,10 +10,10 @@ Subject: server: Inherit security attributes from parent directories on 2 files changed, 141 insertions(+), 4 deletions(-) diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c -index a85bb38..7be1db6 100644 +index 4e6e4a2..dcc9840 100644 --- a/dlls/advapi32/tests/security.c +++ b/dlls/advapi32/tests/security.c -@@ -3280,7 +3280,7 @@ static void test_CreateDirectoryA(void) +@@ -3707,7 +3707,7 @@ static void test_CreateDirectoryA(void) (PSID *)&owner, NULL, &pDacl, NULL, &pSD); ok(error == ERROR_SUCCESS, "Failed to get permissions on file\n"); test_inherited_dacl(pDacl, admin_sid, user_sid, INHERITED_ACE, @@ -22,7 +22,7 @@ index a85bb38..7be1db6 100644 LocalFree(pSD); CloseHandle(hTemp); -@@ -3349,7 +3349,7 @@ static void test_CreateDirectoryA(void) +@@ -3775,7 +3775,7 @@ static void test_CreateDirectoryA(void) (PSID *)&owner, NULL, &pDacl, NULL, &pSD); ok(error == ERROR_SUCCESS, "Failed to get permissions on file\n"); test_inherited_dacl(pDacl, admin_sid, user_sid, INHERITED_ACE, @@ -31,7 +31,7 @@ index a85bb38..7be1db6 100644 LocalFree(pSD); CloseHandle(hTemp); -@@ -3414,7 +3414,7 @@ static void test_CreateDirectoryA(void) +@@ -3840,7 +3840,7 @@ static void test_CreateDirectoryA(void) ok(error == ERROR_SUCCESS, "Failed to get permissions on file\n"); test_inherited_dacl(pDacl, admin_sid, user_sid, OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE | INHERITED_ACE, @@ -40,7 +40,7 @@ index a85bb38..7be1db6 100644 LocalFree(pSD); bret = RemoveDirectoryA(tmpfile); ok(bret == TRUE, "RemoveDirectoryA failed with error %u\n", GetLastError()); -@@ -3495,7 +3495,7 @@ static void test_CreateDirectoryA(void) +@@ -3921,7 +3921,7 @@ static void test_CreateDirectoryA(void) ok(error == ERROR_SUCCESS, "Failed to get permissions on file\n"); test_inherited_dacl(pDacl, admin_sid, user_sid, OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE | INHERITED_ACE, @@ -50,7 +50,7 @@ index a85bb38..7be1db6 100644 CloseHandle(hTemp); diff --git a/server/file.c b/server/file.c -index 49f193d..6fbb71c 100644 +index 04bb840..0f83209 100644 --- a/server/file.c +++ b/server/file.c @@ -71,6 +71,7 @@ struct file @@ -61,7 +61,7 @@ index 49f193d..6fbb71c 100644 static void file_dump( struct object *obj, int verbose ); static struct object_type *file_get_type( struct object *obj ); -@@ -225,11 +226,142 @@ static void set_xattr_sd( int fd, const struct security_descriptor *sd ) +@@ -230,11 +231,142 @@ static void set_xattr_sd( int fd, const struct security_descriptor *sd ) xattr_fset( fd, WINE_XATTR_SD, buffer, len ); } @@ -204,9 +204,9 @@ index 49f193d..6fbb71c 100644 struct object *obj = NULL; struct fd *fd; int flags; -@@ -258,6 +390,10 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si - default: set_error( STATUS_INVALID_PARAMETER ); goto done; - } +@@ -268,6 +400,10 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si + flags |= O_DIRECT; + #endif + /* Note: inheritance of security descriptors only occurs on creation when sd is NULL */ + if (!sd && (create == FILE_CREATE || create == FILE_OVERWRITE_IF)) @@ -215,7 +215,7 @@ index 49f193d..6fbb71c 100644 if (sd) { const SID *owner = sd_get_owner( sd ); -@@ -297,6 +433,7 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si +@@ -307,6 +443,7 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si release_object( fd ); done: @@ -224,5 +224,5 @@ index 49f193d..6fbb71c 100644 return obj; } -- -2.4.2 +1.9.1 diff --git a/patches/winebuild-Fake_Dlls/0008-winebuild-Try-to-make-sure-RVA-matches-between-fake-.patch b/patches/winebuild-Fake_Dlls/0008-winebuild-Try-to-make-sure-RVA-matches-between-fake-.patch index 1e9532c2..0784f2d5 100644 --- a/patches/winebuild-Fake_Dlls/0008-winebuild-Try-to-make-sure-RVA-matches-between-fake-.patch +++ b/patches/winebuild-Fake_Dlls/0008-winebuild-Try-to-make-sure-RVA-matches-between-fake-.patch @@ -1,8 +1,8 @@ -From e54235a7c141af9b983d7d02b2a838c9adccf0da Mon Sep 17 00:00:00 2001 +From 7366d8005ea9236758e481dd41ed9a62c8abf7ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Thu, 25 May 2017 21:46:27 +0200 -Subject: winebuild: Try to make sure RVA matches between fake and builtin - DLLs. +Subject: [PATCH] winebuild: Try to make sure RVA matches between fake and + builtin DLLs. --- dlls/kernel32/tests/loader.c | 1 - @@ -11,10 +11,10 @@ Subject: winebuild: Try to make sure RVA matches between fake and builtin 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c -index a8f9e1f12d3..09ba7d435b0 100644 +index 3e012ff..ffc28fd 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c -@@ -885,7 +885,6 @@ static void test_FakeDLL(void) +@@ -1449,7 +1449,6 @@ static void test_FakeDLL(void) /* check position in memory */ dll_rva = (DWORD_PTR)dll_func - (DWORD_PTR)module; map_rva = funcs[ordinals[i]]; @@ -23,10 +23,10 @@ index a8f9e1f12d3..09ba7d435b0 100644 func_name, dll_rva, map_rva); diff --git a/libs/wine/loader.c b/libs/wine/loader.c -index 89ae93503d3..8ace917d91d 100644 +index 1dcb397..677e0fe 100644 --- a/libs/wine/loader.c +++ b/libs/wine/loader.c -@@ -395,8 +395,12 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) +@@ -405,8 +405,12 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) assert( size <= page_size ); /* module address must be aligned on 64K boundary */ @@ -41,7 +41,7 @@ index 89ae93503d3..8ace917d91d 100644 dos = (IMAGE_DOS_HEADER *)addr; nt = (IMAGE_NT_HEADERS *)(dos + 1); -@@ -435,6 +439,11 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) +@@ -453,6 +457,11 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) nt->OptionalHeader.SizeOfImage = data_end; nt->OptionalHeader.ImageBase = (ULONG_PTR)addr; @@ -54,10 +54,10 @@ index 89ae93503d3..8ace917d91d 100644 memcpy( sec->Name, ".text", sizeof(".text") ); diff --git a/tools/winebuild/spec32.c b/tools/winebuild/spec32.c -index 4dda31c349b..6a8a5d07ebd 100644 +index 3955982..430c7a5 100644 --- a/tools/winebuild/spec32.c +++ b/tools/winebuild/spec32.c -@@ -280,14 +280,24 @@ static void output_relay_debug( DLLSPEC *spec ) +@@ -348,14 +348,24 @@ static void output_relay_debug( DLLSPEC *spec ) */ static void output_syscall_thunks( DLLSPEC *spec ) { @@ -84,7 +84,7 @@ index 4dda31c349b..6a8a5d07ebd 100644 for (i = 0; i < spec->nb_syscalls; i++) { ORDDEF *odp = spec->syscalls[i]; -@@ -666,7 +676,14 @@ void output_module( DLLSPEC *spec ) +@@ -734,7 +744,14 @@ void output_module( DLLSPEC *spec ) output( "\t.long 0,0\n" ); /* DataDirectory[12] */ output( "\t.long 0,0\n" ); /* DataDirectory[13] */ output( "\t.long 0,0\n" ); /* DataDirectory[14] */ @@ -101,5 +101,5 @@ index 4dda31c349b..6a8a5d07ebd 100644 output( "\n\t%s\n", get_asm_string_section() ); output( "%s\n", asm_globl("__wine_spec_file_name") ); -- -2.12.2 +1.9.1 diff --git a/patches/winebuild-Fake_Dlls/0009-libs-wine-Use-same-file-alignment-for-fake-and-built.patch b/patches/winebuild-Fake_Dlls/0009-libs-wine-Use-same-file-alignment-for-fake-and-built.patch index f3d1573f..f2715d15 100644 --- a/patches/winebuild-Fake_Dlls/0009-libs-wine-Use-same-file-alignment-for-fake-and-built.patch +++ b/patches/winebuild-Fake_Dlls/0009-libs-wine-Use-same-file-alignment-for-fake-and-built.patch @@ -1,7 +1,7 @@ -From 7a90d53abeb02bc5a7c28f9027bc924c857e1e14 Mon Sep 17 00:00:00 2001 +From 87cbe344d00e41b46df4c9e44419b8c14cd49620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Thu, 25 May 2017 21:56:06 +0200 -Subject: libs/wine: Use same file alignment for fake and builtin DLLs. +Subject: [PATCH] libs/wine: Use same file alignment for fake and builtin DLLs. --- dlls/kernel32/tests/loader.c | 1 - @@ -9,10 +9,10 @@ Subject: libs/wine: Use same file alignment for fake and builtin DLLs. 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c -index 09ba7d435b0..d923b958734 100644 +index ffc28fd..c9af524 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c -@@ -891,7 +891,6 @@ static void test_FakeDLL(void) +@@ -1455,7 +1455,6 @@ static void test_FakeDLL(void) /* check position in file */ map_offset = (DWORD_PTR)RtlImageRvaToVa(RtlImageNtHeader(ptr), ptr, map_rva, NULL) - (DWORD_PTR)ptr; dll_offset = (DWORD_PTR)RtlImageRvaToVa(RtlImageNtHeader(module), module, dll_rva, NULL) - (DWORD_PTR)module; @@ -21,11 +21,11 @@ index 09ba7d435b0..d923b958734 100644 func_name, map_offset, dll_offset); diff --git a/libs/wine/loader.c b/libs/wine/loader.c -index 8ace917d91d..e8922c9333a 100644 +index 677e0fe..162c94d 100644 --- a/libs/wine/loader.c +++ b/libs/wine/loader.c -@@ -450,7 +450,7 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) - sec->SizeOfRawData = data_start - code_start; +@@ -468,7 +468,7 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) + sec->SizeOfRawData = code_end - code_start; sec->Misc.VirtualSize = sec->SizeOfRawData; sec->VirtualAddress = code_start; - sec->PointerToRawData = code_start; @@ -34,5 +34,5 @@ index 8ace917d91d..e8922c9333a 100644 sec++; -- -2.12.2 +1.9.1 diff --git a/patches/winebuild-Fake_Dlls/0010-tools-winebuild-Add-syscall-thunks-for-64-bit.patch b/patches/winebuild-Fake_Dlls/0010-tools-winebuild-Add-syscall-thunks-for-64-bit.patch index abc9d841..6381994b 100644 --- a/patches/winebuild-Fake_Dlls/0010-tools-winebuild-Add-syscall-thunks-for-64-bit.patch +++ b/patches/winebuild-Fake_Dlls/0010-tools-winebuild-Add-syscall-thunks-for-64-bit.patch @@ -1,7 +1,7 @@ -From e6812e345ddbfdf41222de31025661cc7c66c747 Mon Sep 17 00:00:00 2001 +From 5f1d9ae2d65ad4567ea75d1a73b28b197e237e9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Thu, 7 Sep 2017 00:38:09 +0200 -Subject: tools/winebuild: Add syscall thunks for 64 bit. +Subject: [PATCH] tools/winebuild: Add syscall thunks for 64 bit. --- dlls/kernel32/tests/loader.c | 7 +- @@ -13,10 +13,10 @@ Subject: tools/winebuild: Add syscall thunks for 64 bit. 6 files changed, 224 insertions(+), 10 deletions(-) diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c -index 57b2b08aeca..1a47abe5a4f 100644 +index c9af524..1ddd0f4 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c -@@ -858,7 +858,7 @@ static void test_Loader(void) +@@ -1397,7 +1397,7 @@ static void test_filenames(void) static void test_FakeDLL(void) { @@ -25,7 +25,7 @@ index 57b2b08aeca..1a47abe5a4f 100644 NTSTATUS (WINAPI *pNtSetEvent)(HANDLE, ULONG *) = NULL; IMAGE_EXPORT_DIRECTORY *dir; HMODULE module = GetModuleHandleA("ntdll.dll"); -@@ -900,8 +900,13 @@ static void test_FakeDLL(void) +@@ -1439,8 +1439,13 @@ static void test_FakeDLL(void) dll_func = (BYTE *)GetProcAddress(module, func_name); ok(dll_func != NULL, "%s: GetProcAddress returned NULL\n", func_name); @@ -40,10 +40,10 @@ index 57b2b08aeca..1a47abe5a4f 100644 todo_wine ok(0, "%s: Export is a stub-function, skipping\n", func_name); continue; diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c -index a74825c3c36..83bcd4d46f7 100644 +index 8ba09fe..bf21b42 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c -@@ -326,6 +326,8 @@ static inline struct amd64_thread_data *amd64_thread_data(void) +@@ -328,6 +328,8 @@ static inline struct amd64_thread_data *amd64_thread_data(void) return (struct amd64_thread_data *)NtCurrentTeb()->SystemReserved2; } @@ -52,7 +52,7 @@ index a74825c3c36..83bcd4d46f7 100644 /*********************************************************************** * Dynamic unwind table */ -@@ -2973,6 +2975,7 @@ NTSTATUS signal_alloc_thread( TEB **teb ) +@@ -3278,6 +3280,7 @@ NTSTATUS signal_alloc_thread( TEB **teb ) { (*teb)->Tib.Self = &(*teb)->Tib; (*teb)->Tib.ExceptionList = (void *)~0UL; @@ -61,7 +61,7 @@ index a74825c3c36..83bcd4d46f7 100644 return status; } diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c -index 86e5047facb..8b9df0cc7c0 100644 +index f807b53..40304db 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -60,6 +60,8 @@ struct _KUSER_SHARED_DATA *user_shared_data_external; @@ -73,7 +73,7 @@ index 86e5047facb..8b9df0cc7c0 100644 PUNHANDLED_EXCEPTION_FILTER unhandled_exception_filter = NULL; void (WINAPI *kernel32_start_process)(LPTHREAD_START_ROUTINE,void*) = NULL; -@@ -89,7 +91,6 @@ static RTL_CRITICAL_SECTION_DEBUG critse +@@ -90,7 +92,6 @@ static RTL_CRITICAL_SECTION_DEBUG critsect_debug = }; static RTL_CRITICAL_SECTION peb_lock = { &critsect_debug, -1, 0, 0, 0, 0 }; @@ -81,7 +81,7 @@ index 86e5047facb..8b9df0cc7c0 100644 BOOL read_process_time(int unix_pid, int unix_tid, unsigned long clk_tck, LARGE_INTEGER *kernel, LARGE_INTEGER *user) { -@@ -497,6 +498,10 @@ HANDLE thread_init(void) +@@ -499,6 +500,10 @@ HANDLE thread_init(void) InitializeListHead( &ldr.InInitializationOrderModuleList ); *(ULONG_PTR *)peb->Reserved = get_image_addr(); @@ -93,11 +93,11 @@ index 86e5047facb..8b9df0cc7c0 100644 * Starting with Vista, the first user to log on has session id 1. * Session id 0 is for processes that don't interact with the user (like services). diff --git a/libs/wine/loader.c b/libs/wine/loader.c -index 0a64ea4a73b..e2ae56df427 100644 +index 162c94d..87eb5a8 100644 --- a/libs/wine/loader.c +++ b/libs/wine/loader.c -@@ -455,7 +455,11 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) - sec->SizeOfRawData = data_start - code_start; +@@ -468,7 +468,11 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr ) + sec->SizeOfRawData = code_end - code_start; sec->Misc.VirtualSize = sec->SizeOfRawData; sec->VirtualAddress = code_start; +#ifdef _WIN64 @@ -109,7 +109,7 @@ index 0a64ea4a73b..e2ae56df427 100644 sec++; diff --git a/tools/winebuild/parser.c b/tools/winebuild/parser.c -index c4b9abfc9fc..064019c4404 100644 +index c4b9abf..064019c 100644 --- a/tools/winebuild/parser.c +++ b/tools/winebuild/parser.c @@ -521,7 +521,7 @@ static const char *parse_spec_flags( DLLSPEC *spec, ORDDEF *odp ) @@ -122,10 +122,10 @@ index c4b9abfc9fc..064019c4404 100644 if (odp->flags & (FLAG_FORWARD | FLAG_REGISTER)) return 0; diff --git a/tools/winebuild/spec32.c b/tools/winebuild/spec32.c -index 6b6f4afae77..e7ae6f6eaee 100644 +index 430c7a5..48a9abe 100644 --- a/tools/winebuild/spec32.c +++ b/tools/winebuild/spec32.c -@@ -299,11 +299,11 @@ static void output_relay_debug( DLLSPEC *spec ) +@@ -342,11 +342,11 @@ static void output_relay_debug( DLLSPEC *spec ) } /******************************************************************* @@ -139,7 +139,7 @@ index 6b6f4afae77..e7ae6f6eaee 100644 { const unsigned int page_size = get_page_size(); int i; -@@ -369,7 +369,91 @@ static void output_syscall_thunks( DLLSPEC *spec ) +@@ -412,7 +412,91 @@ static void output_syscall_thunks( DLLSPEC *spec ) output( "1:\tpopl %%ecx\n" ); output( "\tjmpl *(%s-1b)(%%ecx,%%eax,%d)\n", asm_name("__wine_syscall_table"), get_ptr_size() ); } @@ -232,7 +232,7 @@ index 6b6f4afae77..e7ae6f6eaee 100644 output( "\tret\n" ); output_cfi( ".cfi_endproc" ); output_function_size( "__wine_syscall_dispatcher" ); -@@ -732,7 +816,10 @@ void BuildSpec32File( DLLSPEC *spec ) +@@ -775,7 +859,10 @@ void BuildSpec32File( DLLSPEC *spec ) resolve_imports( spec ); output_standard_file_header(); output_module( spec ); @@ -244,7 +244,7 @@ index 6b6f4afae77..e7ae6f6eaee 100644 output_stubs( spec ); output_exports( spec ); output_imports( spec ); -@@ -744,7 +831,7 @@ void BuildSpec32File( DLLSPEC *spec ) +@@ -787,7 +874,7 @@ void BuildSpec32File( DLLSPEC *spec ) static int needs_stub_exports( DLLSPEC *spec ) { @@ -253,7 +253,7 @@ index 6b6f4afae77..e7ae6f6eaee 100644 return 0; if (!(spec->characteristics & IMAGE_FILE_DLL)) return 0; -@@ -754,7 +841,7 @@ static int needs_stub_exports( DLLSPEC *spec ) +@@ -797,7 +884,7 @@ static int needs_stub_exports( DLLSPEC *spec ) } @@ -262,7 +262,7 @@ index 6b6f4afae77..e7ae6f6eaee 100644 { int i, nr_exports = spec->base <= spec->limit ? spec->limit - spec->base + 1 : 0; size_t rva, thunk; -@@ -916,6 +1003,113 @@ static void create_stub_exports_text( DLLSPEC *spec ) +@@ -959,6 +1046,113 @@ static void create_stub_exports_text( DLLSPEC *spec ) } @@ -376,7 +376,7 @@ index 6b6f4afae77..e7ae6f6eaee 100644 static void create_stub_exports_data( DLLSPEC *spec ) { int i; -@@ -1115,7 +1309,10 @@ static void output_fake_module_pass( DLLSPEC *spec ) +@@ -1158,7 +1352,10 @@ static void output_fake_module_pass( DLLSPEC *spec ) if (needs_stub_exports( spec )) { put_label( "text_start" ); @@ -389,4 +389,5 @@ index 6b6f4afae77..e7ae6f6eaee 100644 } else -- -2.14.1 +1.9.1 + diff --git a/patches/winemenubuilder-Desktop_Icon_Path/0001-winemenubuilder-Create-desktop-shortcuts-with-absolu.patch b/patches/winemenubuilder-Desktop_Icon_Path/0001-winemenubuilder-Create-desktop-shortcuts-with-absolu.patch index 246c8586..99ee6a22 100644 --- a/patches/winemenubuilder-Desktop_Icon_Path/0001-winemenubuilder-Create-desktop-shortcuts-with-absolu.patch +++ b/patches/winemenubuilder-Desktop_Icon_Path/0001-winemenubuilder-Create-desktop-shortcuts-with-absolu.patch @@ -1,7 +1,8 @@ -From 959e6121ddf32e681f48c97845548b72a0d48fda Mon Sep 17 00:00:00 2001 +From 9d905c79b5b646eb46058f76cc1983b3adedc49b Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Wed, 24 Sep 2014 21:13:59 +0200 -Subject: winemenubuilder: Create desktop shortcuts with absolute wine path. +Subject: [PATCH] winemenubuilder: Create desktop shortcuts with absolute wine + path. When having multiple wine versions installed (for example regular wine and wine staging), the desktop shortcuts will always run regular wine, even if the app was installed with wine staging. This patch @@ -26,12 +27,12 @@ index 07e2702..a4e28ad 100644 C_SRCS = \ winemenubuilder.c diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c -index 4a5639b..6ae7710 100644 +index dd69ff9..239502f 100644 --- a/programs/winemenubuilder/winemenubuilder.c +++ b/programs/winemenubuilder/winemenubuilder.c -@@ -104,6 +104,14 @@ WINE_DEFAULT_DEBUG_CHANNEL(menubuilder); - #define in_startmenu(csidl) ((csidl)==CSIDL_STARTMENU || \ - (csidl)==CSIDL_COMMON_STARTMENU) +@@ -107,6 +107,14 @@ WINE_DEFAULT_DEBUG_CHANNEL(menubuilder); + #define IS_OPTION_TRUE(ch) \ + ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1') +/* On linux we create all menu item entries with an absolute path to wine, + * in order to allow using multiple wine versions at the same time. */ @@ -44,7 +45,7 @@ index 4a5639b..6ae7710 100644 /* link file formats */ #include "pshpack1.h" -@@ -1488,8 +1496,8 @@ static BOOL write_desktop_entry(const char *unix_link, const char *location, con +@@ -1464,8 +1472,8 @@ static BOOL write_desktop_entry(const char *unix_link, const char *location, con fprintf(file, "[Desktop Entry]\n"); fprintf(file, "Name=%s\n", linkname); @@ -55,7 +56,7 @@ index 4a5639b..6ae7710 100644 fprintf(file, "Type=Application\n"); fprintf(file, "StartupNotify=true\n"); if (descr && lstrlenA(descr)) -@@ -2540,7 +2548,8 @@ static BOOL write_freedesktop_association_entry(const char *desktopPath, const c +@@ -2505,7 +2513,8 @@ static BOOL write_freedesktop_association_entry(const char *desktopPath, const c fprintf(desktop, "Type=Application\n"); fprintf(desktop, "Name=%s\n", friendlyAppName); fprintf(desktop, "MimeType=%s;\n", mimeType); @@ -66,5 +67,5 @@ index 4a5639b..6ae7710 100644 fprintf(desktop, "StartupNotify=true\n"); if (openWithIcon) -- -2.3.2 +1.9.1