From 3cea972271b4529e332c75b06f902c80e7de1798 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Wed, 14 Oct 2020 08:12:47 +1100 Subject: [PATCH] Rebase against f4a66ad257df4605e73dfea792eec55a70a04e84. --- ...user32-Improve-GetKeyboardLayoutList.patch | 12 +- ...ll-FLS-slots-instances-in-RtlFlsFree.patch | 44 --- .../0002-ntdll-Call-FLS-callbacks.patch | 370 ------------------ patches/ntdll-FLS_Callbacks/definition | 2 - ...e-check-before-returning-a-default-s.patch | 12 +- patches/patchinstall.sh | 38 +- ...-a-helper-function-to-update-the-thr.patch | 24 +- ...ially-implement-GetMouseMovePointsEx.patch | 74 ---- .../user32-GetMouseMovePointsEx/definition | 1 - ...engine3_7-Initial-IXACT3Engine-tests.patch | 146 ------- staging/upstream-commit | 2 +- 11 files changed, 27 insertions(+), 698 deletions(-) delete mode 100644 patches/ntdll-FLS_Callbacks/0001-ntdll-Zero-all-FLS-slots-instances-in-RtlFlsFree.patch delete mode 100644 patches/ntdll-FLS_Callbacks/0002-ntdll-Call-FLS-callbacks.patch delete mode 100644 patches/ntdll-FLS_Callbacks/definition delete mode 100644 patches/user32-GetMouseMovePointsEx/0001-user32-Partially-implement-GetMouseMovePointsEx.patch delete mode 100644 patches/user32-GetMouseMovePointsEx/definition delete mode 100644 patches/xactengine-initial/0002-xactengine3_7-Initial-IXACT3Engine-tests.patch diff --git a/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch b/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch index 29421d6f..6e992f8a 100644 --- a/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch +++ b/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch @@ -1,4 +1,4 @@ -From 5a1737e74415871fd5b0646ece31f191fa74bb69 Mon Sep 17 00:00:00 2001 +From 27332457e843bbef5d08dd45249956ade1258476 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Tue, 9 Jul 2019 14:13:28 +1000 Subject: [PATCH] user32: Improve GetKeyboardLayoutList @@ -11,7 +11,7 @@ not the complete list from the registry. 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c -index 8ff6b0a817e..ddf00cfd7b5 100644 +index 7ac77141696..56009667b00 100644 --- a/dlls/user32/driver.c +++ b/dlls/user32/driver.c @@ -198,8 +198,6 @@ static void CDECL nulldrv_Beep(void) @@ -55,10 +55,10 @@ index 8ff6b0a817e..ddf00cfd7b5 100644 if (baselayout != 0) { diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c -index 1809c147cbd..fd8f26e9ee4 100644 +index ce272ed73f4..9ac14b607cf 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c -@@ -3791,6 +3791,40 @@ static void test_UnregisterDeviceNotification(void) +@@ -3979,6 +3979,40 @@ static void test_UnregisterDeviceNotification(void) ok(ret == FALSE, "Unregistering NULL Device Notification returned: %d\n", ret); } @@ -99,14 +99,14 @@ index 1809c147cbd..fd8f26e9ee4 100644 START_TEST(input) { char **argv; -@@ -3826,6 +3860,7 @@ START_TEST(input) +@@ -4020,6 +4054,7 @@ START_TEST(input) test_GetRawInputBuffer(); test_RegisterRawInputDevices(); test_rawinput(argv[0]); + test_GetKeyboardLayoutList(); if(pGetMouseMovePointsEx) - test_GetMouseMovePointsEx(); + test_GetMouseMovePointsEx(argv[0]); -- 2.28.0 diff --git a/patches/ntdll-FLS_Callbacks/0001-ntdll-Zero-all-FLS-slots-instances-in-RtlFlsFree.patch b/patches/ntdll-FLS_Callbacks/0001-ntdll-Zero-all-FLS-slots-instances-in-RtlFlsFree.patch deleted file mode 100644 index 8afb001d..00000000 --- a/patches/ntdll-FLS_Callbacks/0001-ntdll-Zero-all-FLS-slots-instances-in-RtlFlsFree.patch +++ /dev/null @@ -1,44 +0,0 @@ -From fa80bc605c8cffa33475fbabc12cc0b79978b11e Mon Sep 17 00:00:00 2001 -From: Paul Gofman -Date: Thu, 1 Oct 2020 13:24:19 +0300 -Subject: [PATCH] ntdll: Zero all FLS slots instances in RtlFlsFree(). - ---- - dlls/ntdll/thread.c | 13 +++++++++---- - 1 file changed, 9 insertions(+), 4 deletions(-) - -diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c -index cf6bddab0b4..95511391d34 100644 ---- a/dlls/ntdll/thread.c -+++ b/dlls/ntdll/thread.c -@@ -392,7 +392,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH RtlFlsFree( ULONG index ) - { - unsigned int chunk_index, idx; - FLS_INFO_CHUNK *chunk; -- TEB_FLS_DATA *fls; -+ LIST_ENTRY *entry; - - lock_fls_data(); - -@@ -410,10 +410,15 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH RtlFlsFree( ULONG index ) - return STATUS_INVALID_PARAMETER; - } - -- if ((fls = NtCurrentTeb()->FlsSlots) && fls->fls_data_chunks[chunk_index]) -+ for (entry = fls_data.fls_list_head.Flink; entry != &fls_data.fls_list_head; entry = entry->Flink) - { -- /* FIXME: call Fls callback */ -- fls->fls_data_chunks[chunk_index][idx + 1] = NULL; -+ TEB_FLS_DATA *fls = CONTAINING_RECORD(entry, TEB_FLS_DATA, fls_list_entry); -+ -+ if (fls->fls_data_chunks[chunk_index]) -+ { -+ /* FIXME: call Fls callback */ -+ fls->fls_data_chunks[chunk_index][idx + 1] = NULL; -+ } - } - - --chunk->count; --- -2.26.2 - diff --git a/patches/ntdll-FLS_Callbacks/0002-ntdll-Call-FLS-callbacks.patch b/patches/ntdll-FLS_Callbacks/0002-ntdll-Call-FLS-callbacks.patch deleted file mode 100644 index a4e09fe7..00000000 --- a/patches/ntdll-FLS_Callbacks/0002-ntdll-Call-FLS-callbacks.patch +++ /dev/null @@ -1,370 +0,0 @@ -From c1eaab70d4cd062e8d716dcc5c3a0578ea2fa367 Mon Sep 17 00:00:00 2001 -From: Paul Gofman -Date: Thu, 1 Oct 2020 16:58:06 +0300 -Subject: [PATCH] ntdll: Call FLS callbacks. - ---- - dlls/kernel32/tests/fiber.c | 24 +++++++++-- - dlls/kernel32/tests/loader.c | 79 ++++++++++++++++++++++++++---------- - dlls/ntdll/loader.c | 8 +++- - dlls/ntdll/thread.c | 38 +++++++++++++++-- - 4 files changed, 118 insertions(+), 31 deletions(-) - -diff --git a/dlls/kernel32/tests/fiber.c b/dlls/kernel32/tests/fiber.c -index 30f9152c39e..1b5d0d1393a 100644 ---- a/dlls/kernel32/tests/fiber.c -+++ b/dlls/kernel32/tests/fiber.c -@@ -223,8 +223,11 @@ static unsigned int check_linked_list(const LIST_ENTRY *le, const LIST_ENTRY *se - return count; - } - -+static unsigned int test_fls_callback_call_count; -+ - static void WINAPI test_fls_callback(void *data) - { -+ ++test_fls_callback_call_count; - } - - static unsigned int test_fls_chunk_size(unsigned int chunk_index) -@@ -377,8 +380,11 @@ static void test_FiberLocalStorage(void) - ok(status == STATUS_INVALID_PARAMETER, "Got unexpected status %#x.\n", status); - - g_fls_data->fls_callback_chunks[j]->callbacks[index].callback = test_fls_callback; -+ test_fls_callback_call_count = 0; - status = pRtlFlsFree(fls_indices[0x10]); - ok(!status, "Got unexpected status %#x.\n", status); -+ ok(test_fls_callback_call_count == 1, "Got unexpected callback call count %u.\n", -+ test_fls_callback_call_count); - - ok(!fls_data->fls_data_chunks[j][0], "Got unexpected fls_data->fls_data_chunks[%u][0] %p.\n", - j, fls_data->fls_data_chunks[j][0]); -@@ -405,7 +411,7 @@ static void test_FiberLocalStorage(void) - ok(val == (void *)0xdeadbeef, "Got unexpected val %p.\n", val); - ok(!new_fls_data, "Got unexpected teb->FlsSlots %p.\n", new_fls_data); - -- status = pRtlFlsSetValue(fls_indices[1], NULL); -+ status = pRtlFlsSetValue(fls_indices[1], (void *)(ULONG_PTR)0x28); - new_fls_data = teb->FlsSlots; - ok(!status, "Got unexpected status %#x.\n", status); - ok(!!new_fls_data, "Got unexpected teb->FlsSlots %p.\n", new_fls_data); -@@ -450,11 +456,15 @@ static void test_FiberLocalStorage(void) - ok(result == WAIT_OBJECT_0, "Got unexpected result %u.\n", result); - teb->FlsSlots = NULL; - -+ test_fls_callback_call_count = 0; - saved_entry = new_fls_data->fls_list_entry; - pRtlProcessFlsData(new_fls_data, 1); - ok(!teb->FlsSlots, "Got unexpected teb->FlsSlots %p.\n", teb->FlsSlots); - - teb->FlsSlots = fls_data; -+ ok(test_fls_callback_call_count == 1, "Got unexpected callback call count %u.\n", -+ test_fls_callback_call_count); -+ - SetEvent(test_fiberlocalstorage_done_event); - WaitForSingleObject(hthread, INFINITE); - CloseHandle(hthread); -@@ -467,7 +477,13 @@ static void test_FiberLocalStorage(void) - saved_entry.Blink); - size = HeapSize(GetProcessHeap(), 0, new_fls_data); - ok(size == sizeof(*new_fls_data), "Got unexpected size %p.\n", (void *)size); -+ test_fls_callback_call_count = 0; -+ i = test_fls_chunk_index_from_index(fls_indices[1], &index); -+ new_fls_data->fls_data_chunks[i][index + 1] = (void *)(ULONG_PTR)0x28; - pRtlProcessFlsData(new_fls_data, 2); -+ ok(!test_fls_callback_call_count, "Got unexpected callback call count %u.\n", -+ test_fls_callback_call_count); -+ - if (0) - { - /* crashes on Windows. */ -@@ -676,7 +692,7 @@ static void test_FiberLocalStorageCallback(PFLS_CALLBACK_FUNCTION cbfunc) - - ret = pFlsFree( fls ); - ok(ret, "FlsFree failed with error %u\n", GetLastError() ); -- todo_wine ok( cbCount == 1, "Wrong callback count: %d\n", cbCount ); -+ ok( cbCount == 1, "Wrong callback count: %d\n", cbCount ); - - /* Test that callback is not executed if value is NULL */ - cbCount = 0; -@@ -741,14 +757,14 @@ static void test_FiberLocalStorageWithFibers(PFLS_CALLBACK_FUNCTION cbfunc) - fls_value_to_set = val1; - pDeleteFiber(fibers[1]); - ok(fiberCount == 0, "Wrong fiber count: %d\n", fiberCount); -- todo_wine ok(cbCount == 1, "Wrong callback count: %d\n", cbCount); -+ ok(cbCount == 1, "Wrong callback count: %d\n", cbCount); - - fiberCount = 0; - cbCount = 0; - fls_value_to_set = val2; - pFlsFree(fls_index_to_set); - ok(fiberCount == 0, "Wrong fiber count: %d\n", fiberCount); -- todo_wine ok(cbCount == 2, "Wrong callback count: %d\n", cbCount); -+ ok(cbCount == 2, "Wrong callback count: %d\n", cbCount); - - fiberCount = 0; - cbCount = 0; -diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c -index a718c2c434f..d101104af1d 100644 ---- a/dlls/kernel32/tests/loader.c -+++ b/dlls/kernel32/tests/loader.c -@@ -2319,12 +2319,34 @@ static VOID WINAPI fls_callback(PVOID lpFlsData) - InterlockedIncrement(&fls_callback_count); - } - -+static LIST_ENTRY *fls_list_head; -+ -+static unsigned int check_linked_list(const LIST_ENTRY *le, const LIST_ENTRY *search_entry, unsigned int *index_found) -+{ -+ unsigned int count = 0; -+ LIST_ENTRY *entry; -+ -+ *index_found = ~0; -+ -+ for (entry = le->Flink; entry != le; entry = entry->Flink) -+ { -+ if (entry == search_entry) -+ { -+ ok(*index_found == ~0, "Duplicate list entry.\n"); -+ *index_found = count; -+ } -+ ++count; -+ } -+ return count; -+} -+ - static BOOL WINAPI dll_entry_point(HINSTANCE hinst, DWORD reason, LPVOID param) - { - static LONG noop_thread_started; -- static DWORD fls_index = FLS_OUT_OF_INDEXES; -+ static DWORD fls_index = FLS_OUT_OF_INDEXES, fls_index2 = FLS_OUT_OF_INDEXES; - static int fls_count = 0; - static int thread_detach_count = 0; -+ static int thread_count; - DWORD ret; - - ok(!inside_loader_lock, "inside_loader_lock should not be set\n"); -@@ -2353,8 +2375,11 @@ static BOOL WINAPI dll_entry_point(HINSTANCE hinst, DWORD reason, LPVOID param) - bret = pFlsSetValue(fls_index, (void*) 0x31415); - ok(bret, "FlsSetValue failed\n"); - fls_count++; -- } - -+ fls_index2 = pFlsAlloc(&fls_callback); -+ ok(fls_index2 != FLS_OUT_OF_INDEXES, "FlsAlloc returned %d\n", ret); -+ } -+ ++thread_count; - break; - case DLL_PROCESS_DETACH: - { -@@ -2424,18 +2449,12 @@ todo_wine - void* value; - SetLastError(0xdeadbeef); - value = pFlsGetValue(fls_index); -- todo_wine -- { -- ok(broken(value == (void*) 0x31415) || /* Win2k3 */ -- value == NULL, "FlsGetValue returned %p, expected NULL\n", value); -- } -+ ok(broken(value == (void*) 0x31415) || /* Win2k3 */ -+ value == NULL, "FlsGetValue returned %p, expected NULL\n", value); - ok(GetLastError() == ERROR_SUCCESS, "FlsGetValue failed with error %u\n", GetLastError()); -- todo_wine -- { -- ok(broken(fls_callback_count == thread_detach_count) || /* Win2k3 */ -- fls_callback_count == thread_detach_count + 1, -- "wrong FLS callback count %d, expected %d\n", fls_callback_count, thread_detach_count + 1); -- } -+ ok(broken(fls_callback_count == thread_detach_count) || /* Win2k3 */ -+ fls_callback_count == thread_detach_count + 1, -+ "wrong FLS callback count %d, expected %d\n", fls_callback_count, thread_detach_count + 1); - } - if (pFlsFree) - { -@@ -2444,11 +2463,8 @@ todo_wine - ret = pFlsFree(fls_index); - ok(ret, "FlsFree failed with error %u\n", GetLastError()); - fls_index = FLS_OUT_OF_INDEXES; -- todo_wine -- { -- ok(fls_callback_count == fls_count, -- "wrong FLS callback count %d, expected %d\n", fls_callback_count, fls_count); -- } -+ ok(fls_callback_count == fls_count, -+ "wrong FLS callback count %d, expected %d\n", fls_callback_count, fls_count); - } - - ok(attached_thread_count >= 2, "attached thread count should be >= 2\n"); -@@ -2612,6 +2628,8 @@ todo_wine - case DLL_THREAD_ATTACH: - trace("dll: %p, DLL_THREAD_ATTACH, %p\n", hinst, param); - -+ ++thread_count; -+ - ret = pRtlDllShutdownInProgress(); - ok(!ret, "RtlDllShutdownInProgress returned %d\n", ret); - -@@ -2639,6 +2657,7 @@ todo_wine - break; - case DLL_THREAD_DETACH: - trace("dll: %p, DLL_THREAD_DETACH, %p\n", hinst, param); -+ --thread_count; - thread_detach_count++; - - ret = pRtlDllShutdownInProgress(); -@@ -2657,15 +2676,25 @@ todo_wine - */ - if (pFlsGetValue && fls_index != FLS_OUT_OF_INDEXES) - { -+ unsigned int index, count; - void* value; -+ BOOL bret; -+ - SetLastError(0xdeadbeef); - value = pFlsGetValue(fls_index); -- todo_wine -+ ok(broken(value == (void*) 0x31415) || /* Win2k3 */ -+ !value, "FlsGetValue returned %p, expected NULL\n", value); -+ ok(GetLastError() == ERROR_SUCCESS, "FlsGetValue failed with error %u\n", GetLastError()); -+ -+ bret = pFlsSetValue(fls_index2, (void*) 0x31415); -+ ok(bret, "FlsSetValue failed\n"); -+ -+ if (fls_list_head) - { -- ok(broken(value == (void*) 0x31415) || /* Win2k3 */ -- !value, "FlsGetValue returned %p, expected NULL\n", value); -+ count = check_linked_list(fls_list_head, &NtCurrentTeb()->FlsSlots->fls_list_entry, &index); -+ ok(count <= thread_count, "Got unexpected count %u, thread_count %u.\n", count, thread_count); -+ ok(index == ~0, "Got unexpected index %u.\n", index); - } -- ok(GetLastError() == ERROR_SUCCESS, "FlsGetValue failed with error %u\n", GetLastError()); - } - - break; -@@ -2690,6 +2719,12 @@ static void child_process(const char *dll_name, DWORD target_offset) - - trace("phase %d: writing %p at %#x\n", test_dll_phase, dll_entry_point, target_offset); - -+ if (pFlsAlloc) -+ { -+ fls_list_head = NtCurrentTeb()->Peb->FlsListHead.Flink ? &NtCurrentTeb()->Peb->FlsListHead -+ : NtCurrentTeb()->FlsSlots->fls_list_entry.Flink; -+ } -+ - SetLastError(0xdeadbeef); - mutex = CreateMutexW(NULL, FALSE, NULL); - ok(mutex != 0, "CreateMutex error %d\n", GetLastError()); -diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c -index 38dfc7f7233..cfa07140d7f 100644 ---- a/dlls/ntdll/loader.c -+++ b/dlls/ntdll/loader.c -@@ -3354,6 +3354,10 @@ fail: - void WINAPI LdrShutdownProcess(void) - { - TRACE("()\n"); -+ -+ if (!process_detaching) -+ RtlProcessFlsData( NtCurrentTeb()->FlsSlots, 1 ); -+ - process_detaching = TRUE; - process_detach(); - } -@@ -3388,6 +3392,8 @@ void WINAPI LdrShutdownThread(void) - /* don't do any detach calls if process is exiting */ - if (process_detaching) return; - -+ RtlProcessFlsData( NtCurrentTeb()->FlsSlots, 1 ); -+ - RtlEnterCriticalSection( &loader_section ); - wm = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress ); - -@@ -3414,7 +3420,7 @@ void WINAPI LdrShutdownThread(void) - for (i = 0; i < tls_module_count; i++) RtlFreeHeap( GetProcessHeap(), 0, pointers[i] ); - RtlFreeHeap( GetProcessHeap(), 0, pointers ); - } -- RtlProcessFlsData( NtCurrentTeb()->FlsSlots, 3 ); -+ RtlProcessFlsData( NtCurrentTeb()->FlsSlots, 2 ); - NtCurrentTeb()->FlsSlots = NULL; - RtlFreeHeap( GetProcessHeap(), 0, NtCurrentTeb()->TlsExpansionSlots ); - NtCurrentTeb()->TlsExpansionSlots = NULL; -diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c -index 95511391d34..2926d6173bf 100644 ---- a/dlls/ntdll/thread.c -+++ b/dlls/ntdll/thread.c -@@ -390,6 +390,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH RtlFlsAlloc( PFLS_CALLBACK_FUNCTION callback, - */ - NTSTATUS WINAPI DECLSPEC_HOTPATCH RtlFlsFree( ULONG index ) - { -+ PFLS_CALLBACK_FUNCTION callback; - unsigned int chunk_index, idx; - FLS_INFO_CHUNK *chunk; - LIST_ENTRY *entry; -@@ -404,7 +405,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH RtlFlsFree( ULONG index ) - - chunk_index = fls_chunk_index_from_index( index, &idx ); - if (!(chunk = fls_data.fls_callback_chunks[chunk_index]) -- || !chunk->callbacks[idx].callback) -+ || !(callback = chunk->callbacks[idx].callback)) - { - unlock_fls_data(); - return STATUS_INVALID_PARAMETER; -@@ -414,9 +415,15 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH RtlFlsFree( ULONG index ) - { - TEB_FLS_DATA *fls = CONTAINING_RECORD(entry, TEB_FLS_DATA, fls_list_entry); - -- if (fls->fls_data_chunks[chunk_index]) -+ if (fls->fls_data_chunks[chunk_index] && fls->fls_data_chunks[chunk_index][idx + 1]) - { -- /* FIXME: call Fls callback */ -+ if (callback != (void *)~(ULONG_PTR)0) -+ { -+ TRACE_(relay)("Calling FLS callback %p, arg %p.\n", callback, -+ fls->fls_data_chunks[chunk_index][idx + 1]); -+ -+ callback( fls->fls_data_chunks[chunk_index][idx + 1] ); -+ } - fls->fls_data_chunks[chunk_index][idx + 1] = NULL; - } - } -@@ -481,7 +488,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH RtlFlsGetValue( ULONG index, void **data ) - void WINAPI DECLSPEC_HOTPATCH RtlProcessFlsData( void *teb_fls_data, ULONG flags ) - { - TEB_FLS_DATA *fls = teb_fls_data; -- unsigned int i; -+ unsigned int i, index; - - TRACE_(thread)( "teb_fls_data %p, flags %#x.\n", teb_fls_data, flags ); - -@@ -494,6 +501,29 @@ void WINAPI DECLSPEC_HOTPATCH RtlProcessFlsData( void *teb_fls_data, ULONG flags - if (flags & 1) - { - lock_fls_data(); -+ for (i = 0; i < ARRAY_SIZE(fls->fls_data_chunks); ++i) -+ { -+ if (!fls->fls_data_chunks[i] || !fls_data.fls_callback_chunks[i] -+ || !fls_data.fls_callback_chunks[i]->count) -+ continue; -+ -+ for (index = 0; index < fls_chunk_size( i ); ++index) -+ { -+ PFLS_CALLBACK_FUNCTION callback = fls_data.fls_callback_chunks[i]->callbacks[index].callback; -+ -+ if (!fls->fls_data_chunks[i][index + 1]) -+ continue; -+ -+ if (callback && callback != (void *)~(ULONG_PTR)0) -+ { -+ TRACE_(relay)("Calling FLS callback %p, arg %p.\n", callback, -+ fls->fls_data_chunks[i][index + 1]); -+ -+ callback( fls->fls_data_chunks[i][index + 1] ); -+ } -+ fls->fls_data_chunks[i][index + 1] = NULL; -+ } -+ } - /* Not using RemoveEntryList() as Windows does not zero list entry here. */ - fls->fls_list_entry.Flink->Blink = fls->fls_list_entry.Blink; - fls->fls_list_entry.Blink->Flink = fls->fls_list_entry.Flink; --- -2.26.2 - diff --git a/patches/ntdll-FLS_Callbacks/definition b/patches/ntdll-FLS_Callbacks/definition deleted file mode 100644 index 2b6d6949..00000000 --- a/patches/ntdll-FLS_Callbacks/definition +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: [49012] Application build with .NET CoreRT crashes due to FLS callbacks not being called -Disabled: False diff --git a/patches/ntdll-Serial_Port_Detection/0001-ntdll-Do-a-device-check-before-returning-a-default-s.patch b/patches/ntdll-Serial_Port_Detection/0001-ntdll-Do-a-device-check-before-returning-a-default-s.patch index f8ef66e6..1ef94bd2 100644 --- a/patches/ntdll-Serial_Port_Detection/0001-ntdll-Do-a-device-check-before-returning-a-default-s.patch +++ b/patches/ntdll-Serial_Port_Detection/0001-ntdll-Do-a-device-check-before-returning-a-default-s.patch @@ -1,4 +1,4 @@ -From c27588bc3f2e5afd8c71f727023bbd167d1195e9 Mon Sep 17 00:00:00 2001 +From f0c0ce75dc3ad0f1ea033bab64ed22cec0d5ca93 Mon Sep 17 00:00:00 2001 From: Alex Henrie Date: Tue, 29 Dec 2015 00:48:02 -0700 Subject: [PATCH] mountmgr.sys: Do a device check before returning a default @@ -10,20 +10,20 @@ Fixes https://bugs.winehq.org/show_bug.cgi?id=39793 1 file changed, 24 insertions(+) diff --git a/dlls/mountmgr.sys/device.c b/dlls/mountmgr.sys/device.c -index 7c34f8b3db7..dd23b2baa21 100644 +index 37ba33840b5..c8af6856043 100644 --- a/dlls/mountmgr.sys/device.c +++ b/dlls/mountmgr.sys/device.c -@@ -26,6 +26,9 @@ - #include +@@ -27,6 +27,9 @@ #include #include + #include +#ifdef HAVE_TERMIOS_H +# include +#endif #include #ifdef HAVE_SYS_IOCTL_H # include -@@ -1253,6 +1256,27 @@ static BOOL create_port_device( DRIVER_OBJECT *driver, int n, const char *unix_p +@@ -1970,6 +1973,27 @@ static BOOL create_port_device( DRIVER_OBJECT *driver, int n, const char *unix_p sprintfW( dos_name, dos_name_format, n ); @@ -52,5 +52,5 @@ index 7c34f8b3db7..dd23b2baa21 100644 unlink( dosdevices_path ); if (symlink( unix_path, dosdevices_path ) != 0) -- -2.17.1 +2.28.0 diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index b28d3b60..bcedc06d 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "f7d815089580cebe2682683345272858def6358c" + echo "f4a66ad257df4605e73dfea792eec55a70a04e84" } # Show version information @@ -163,7 +163,6 @@ patch_enable_all () enable_ntdll_DOS_Attributes="$1" enable_ntdll_Dealloc_Thread_Stack="$1" enable_ntdll_Exception="$1" - enable_ntdll_FLS_Callbacks="$1" enable_ntdll_FileDispositionInformation="$1" enable_ntdll_FileFsFullSizeInformation="$1" enable_ntdll_Fix_Alignment="$1" @@ -248,7 +247,6 @@ patch_enable_all () enable_user32_Dialog_Paint_Event="$1" enable_user32_DrawTextExW="$1" enable_user32_FlashWindowEx="$1" - enable_user32_GetMouseMovePointsEx="$1" enable_user32_GetSystemMetrics="$1" enable_user32_Implement_CascadeWindows="$1" enable_user32_InternalGetWindowIcon="$1" @@ -580,9 +578,6 @@ patch_enable () ntdll-Exception) enable_ntdll_Exception="$2" ;; - ntdll-FLS_Callbacks) - enable_ntdll_FLS_Callbacks="$2" - ;; ntdll-FileDispositionInformation) enable_ntdll_FileDispositionInformation="$2" ;; @@ -835,9 +830,6 @@ patch_enable () user32-FlashWindowEx) enable_user32_FlashWindowEx="$2" ;; - user32-GetMouseMovePointsEx) - enable_user32_GetMouseMovePointsEx="$2" - ;; user32-GetSystemMetrics) enable_user32_GetSystemMetrics="$2" ;; @@ -2982,19 +2974,6 @@ if test "$enable_ntdll_Exception" -eq 1; then patch_apply ntdll-Exception/0002-ntdll-OutputDebugString-should-throw-the-exception-a.patch fi -# Patchset ntdll-FLS_Callbacks -# | -# | This patchset fixes the following Wine bugs: -# | * [#49012] Application build with .NET CoreRT crashes due to FLS callbacks not being called -# | -# | Modified files: -# | * dlls/kernel32/tests/fiber.c, dlls/kernel32/tests/loader.c, dlls/ntdll/loader.c, dlls/ntdll/thread.c -# | -if test "$enable_ntdll_FLS_Callbacks" -eq 1; then - patch_apply ntdll-FLS_Callbacks/0001-ntdll-Zero-all-FLS-slots-instances-in-RtlFlsFree.patch - patch_apply ntdll-FLS_Callbacks/0002-ntdll-Call-FLS-callbacks.patch -fi - # Patchset ntdll-FileFsFullSizeInformation # | # | Modified files: @@ -4060,18 +4039,6 @@ if test "$enable_user32_FlashWindowEx" -eq 1; then patch_apply user32-FlashWindowEx/0001-user32-Improve-FlashWindowEx-message-and-return-valu.patch fi -# Patchset user32-GetMouseMovePointsEx -# | -# | This patchset fixes the following Wine bugs: -# | * [#36873] Semi-stub GetMouseMovePointsEx -# | -# | Modified files: -# | * dlls/user32/input.c -# | -if test "$enable_user32_GetMouseMovePointsEx" -eq 1; then - patch_apply user32-GetMouseMovePointsEx/0001-user32-Partially-implement-GetMouseMovePointsEx.patch -fi - # Patchset user32-GetSystemMetrics # | # | This patchset fixes the following Wine bugs: @@ -5083,12 +5050,11 @@ fi # | * [#48684] BlazBlue: Calamity Trigger requires for xactengine 3.3 interface. # | # | Modified files: -# | * configure.ac, dlls/x3daudio1_7/Makefile.in, dlls/xactengine3_7/tests/Makefile.in, dlls/xactengine3_7/tests/globals.xgs, +# | * dlls/x3daudio1_7/Makefile.in, dlls/xactengine3_7/tests/Makefile.in, dlls/xactengine3_7/tests/globals.xgs, # | dlls/xactengine3_7/tests/rsrc.rc, dlls/xactengine3_7/tests/xact3.c # | if test "$enable_xactengine_initial" -eq 1; then patch_apply xactengine-initial/0001-x3daudio1_7-Create-import-library.patch - patch_apply xactengine-initial/0002-xactengine3_7-Initial-IXACT3Engine-tests.patch patch_apply xactengine-initial/0003-xactengine3_7-tests-Add-Global-settings-test.patch fi diff --git a/patches/server-Key_State/0001-server-Introduce-a-helper-function-to-update-the-thr.patch b/patches/server-Key_State/0001-server-Introduce-a-helper-function-to-update-the-thr.patch index c34e64b3..e769fb34 100644 --- a/patches/server-Key_State/0001-server-Introduce-a-helper-function-to-update-the-thr.patch +++ b/patches/server-Key_State/0001-server-Introduce-a-helper-function-to-update-the-thr.patch @@ -1,4 +1,4 @@ -From f20e406fad78eeebea4e07407e6b05e069c8475f Mon Sep 17 00:00:00 2001 +From be8f547f53a1f8d35d9680a8cb2f0cfa808568b8 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Thu, 12 Mar 2015 00:44:25 +0100 Subject: [PATCH] server: Introduce a helper function to update the @@ -9,10 +9,10 @@ Subject: [PATCH] server: Introduce a helper function to update the 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/server/queue.c b/server/queue.c -index a65eab38bdc..b8943bc4b61 100644 +index 7e7e6fbdf29..344e4298a56 100644 --- a/server/queue.c +++ b/server/queue.c -@@ -1295,9 +1295,9 @@ static void set_input_key_state( unsigned char *keystate, unsigned char key, int +@@ -1300,9 +1300,9 @@ static void set_input_key_state( unsigned char *keystate, unsigned char key, int else keystate[key] &= ~0x80; } @@ -25,7 +25,7 @@ index a65eab38bdc..b8943bc4b61 100644 { unsigned char key; int down = 0; -@@ -1366,21 +1366,27 @@ static void update_desktop_mouse_state( struct desktop *desktop, unsigned int fl +@@ -1371,21 +1371,27 @@ static void update_desktop_mouse_state( struct desktop *desktop, unsigned int fl if (flags & MOUSEEVENTF_MOVE) update_desktop_cursor_pos( desktop, x, y ); if (flags & MOUSEEVENTF_LEFTDOWN) @@ -61,7 +61,7 @@ index a65eab38bdc..b8943bc4b61 100644 } /* release the hardware message currently being processed by the given thread */ -@@ -1408,7 +1414,7 @@ static void release_hardware_message( struct msg_queue *queue, unsigned int hw_i +@@ -1413,7 +1419,7 @@ static void release_hardware_message( struct msg_queue *queue, unsigned int hw_i } if (clr_bit) clear_queue_bits( queue, clr_bit ); @@ -70,8 +70,8 @@ index a65eab38bdc..b8943bc4b61 100644 list_remove( &msg->entry ); free_message( msg ); } -@@ -1526,7 +1532,7 @@ static void queue_hardware_message( struct desktop *desktop, struct message *msg - struct thread_input *input; +@@ -1542,7 +1548,7 @@ static void queue_hardware_message( struct desktop *desktop, struct message *msg + struct hardware_msg_data *msg_data = msg->data; unsigned int msg_code; - update_input_key_state( desktop, desktop->keystate, msg->msg, msg->wparam ); @@ -79,7 +79,7 @@ index a65eab38bdc..b8943bc4b61 100644 last_input_time = get_tick_count(); if (msg->msg != WM_MOUSEMOVE) always_queue = 1; -@@ -1561,7 +1567,7 @@ static void queue_hardware_message( struct desktop *desktop, struct message *msg +@@ -1581,7 +1587,7 @@ static void queue_hardware_message( struct desktop *desktop, struct message *msg win = find_hardware_message_window( desktop, input, msg, &msg_code, &thread ); if (!win || !thread) { @@ -88,7 +88,7 @@ index a65eab38bdc..b8943bc4b61 100644 free_message( msg ); return; } -@@ -1899,7 +1905,7 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c +@@ -1919,7 +1925,7 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c if ((device = current->process->rawinput_kbd) && (device->flags & RIDEV_NOLEGACY)) { @@ -97,7 +97,7 @@ index a65eab38bdc..b8943bc4b61 100644 return 0; } -@@ -2028,7 +2034,7 @@ static int get_hardware_message( struct thread *thread, unsigned int hw_id, user +@@ -2048,7 +2054,7 @@ static int get_hardware_message( struct thread *thread, unsigned int hw_id, user if (!win || !win_thread) { /* no window at all, remove it */ @@ -106,7 +106,7 @@ index a65eab38bdc..b8943bc4b61 100644 list_remove( &msg->entry ); free_message( msg ); continue; -@@ -2044,7 +2050,7 @@ static int get_hardware_message( struct thread *thread, unsigned int hw_id, user +@@ -2064,7 +2070,7 @@ static int get_hardware_message( struct thread *thread, unsigned int hw_id, user else { /* for another thread input, drop it */ @@ -116,5 +116,5 @@ index a65eab38bdc..b8943bc4b61 100644 free_message( msg ); } -- -2.27.0 +2.28.0 diff --git a/patches/user32-GetMouseMovePointsEx/0001-user32-Partially-implement-GetMouseMovePointsEx.patch b/patches/user32-GetMouseMovePointsEx/0001-user32-Partially-implement-GetMouseMovePointsEx.patch deleted file mode 100644 index c98ed26d..00000000 --- a/patches/user32-GetMouseMovePointsEx/0001-user32-Partially-implement-GetMouseMovePointsEx.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 9df9c77fe5f5fef1e22cf46e780de5eca8ffd274 Mon Sep 17 00:00:00 2001 -From: "Ryan S. Northrup (RyNo)" -Date: Wed, 1 Apr 2020 19:59:53 -0700 -Subject: [PATCH v2] user32: Semi-stub GetMouseMovePointsEx - ---- - dlls/user32/input.c | 43 +++++++++++++++++++++++++++++++++++++++---- - 1 file changed, 39 insertions(+), 4 deletions(-) - -diff --git a/dlls/user32/input.c b/dlls/user32/input.c -index 0325e2ce3d..bf029093bf 100644 ---- a/dlls/user32/input.c -+++ b/dlls/user32/input.c -@@ -1268,7 +1268,12 @@ TrackMouseEvent (TRACKMOUSEEVENT *ptme) - * Success: count of point set in the buffer - * Failure: -1 - */ --int WINAPI GetMouseMovePointsEx(UINT size, LPMOUSEMOVEPOINT ptin, LPMOUSEMOVEPOINT ptout, int count, DWORD res) { -+int WINAPI GetMouseMovePointsEx(UINT size, LPMOUSEMOVEPOINT ptin, LPMOUSEMOVEPOINT ptout, int count, DWORD res) -+{ -+ POINT pos; -+ static BOOL once; -+ static INT last_x = 0; -+ static INT last_y = 0; - - if((size != sizeof(MOUSEMOVEPOINT)) || (count < 0) || (count > 64)) { - SetLastError(ERROR_INVALID_PARAMETER); -@@ -1280,10 +1285,40 @@ int WINAPI GetMouseMovePointsEx(UINT size, LPMOUSEMOVEPOINT ptin, LPMOUSEMOVEPOI - return -1; - } - -- FIXME("(%d %p %p %d %d) stub\n", size, ptin, ptout, count, res); -+ if (!once++) -+ FIXME("(%d %p %p %d %d) semi-stub\n", size, ptin, ptout, count, res); -+ else -+ TRACE("(%d %p %p %d %d) semi-stub\n", size, ptin, ptout, count, res); -+ -+ TRACE(" ptin: %d %d\n", ptin->x, ptin->y); -+ -+ if (res == GMMP_USE_HIGH_RESOLUTION_POINTS) -+ { -+ WARN("GMMP_USE_HIGH_RESOLUTION_POINTS not supported"); -+ SetLastError(ERROR_POINT_NOT_FOUND); -+ return -1; -+ } - -- SetLastError(ERROR_POINT_NOT_FOUND); -- return -1; -+ GetCursorPos(&pos); -+ -+ ptout[0].x = pos.x; -+ ptout[0].y = pos.y; -+ ptout[0].time = GetTickCount(); -+ ptout[0].dwExtraInfo = 0; -+ TRACE(" ptout[0]: %d %d\n", pos.x, pos.y); -+ -+ if (count > 1) { -+ ptout[1].x = last_x; -+ ptout[1].y = last_y; -+ ptout[1].time = GetTickCount(); -+ ptout[1].dwExtraInfo = 0; -+ TRACE(" ptout[1]: %d %d\n", last_x, last_y); -+ } -+ -+ last_x = pos.x; -+ last_y = pos.y; -+ -+ return count > 1 ? 2 : 1; - } - - /*********************************************************************** --- -2.24.1 - diff --git a/patches/user32-GetMouseMovePointsEx/definition b/patches/user32-GetMouseMovePointsEx/definition deleted file mode 100644 index 5bf238d0..00000000 --- a/patches/user32-GetMouseMovePointsEx/definition +++ /dev/null @@ -1 +0,0 @@ -Fixes: [36873] Semi-stub GetMouseMovePointsEx diff --git a/patches/xactengine-initial/0002-xactengine3_7-Initial-IXACT3Engine-tests.patch b/patches/xactengine-initial/0002-xactengine3_7-Initial-IXACT3Engine-tests.patch deleted file mode 100644 index 5563c90e..00000000 --- a/patches/xactengine-initial/0002-xactengine3_7-Initial-IXACT3Engine-tests.patch +++ /dev/null @@ -1,146 +0,0 @@ -From baccae5a9e11bdf89cbbc55b5b4b00fa12aec9fa Mon Sep 17 00:00:00 2001 -From: Alistair Leslie-Hughes -Date: Tue, 14 Jan 2020 13:42:48 +1100 -Subject: [PATCH] xactengine3_7: Initial IXACT3Engine tests - -Signed-off-by: Alistair Leslie-Hughes ---- - configure.ac | 1 + - dlls/xactengine3_7/tests/Makefile.in | 5 ++ - dlls/xactengine3_7/tests/xact3.c | 100 +++++++++++++++++++++++++++ - 3 files changed, 106 insertions(+) - create mode 100644 dlls/xactengine3_7/tests/Makefile.in - create mode 100644 dlls/xactengine3_7/tests/xact3.c - -diff --git a/configure.ac b/configure.ac -index 51205d1451b..3f1937f6e07 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -3916,6 +3916,7 @@ WINE_CONFIG_MAKEFILE(dlls/xactengine3_4) - WINE_CONFIG_MAKEFILE(dlls/xactengine3_5) - WINE_CONFIG_MAKEFILE(dlls/xactengine3_6) - WINE_CONFIG_MAKEFILE(dlls/xactengine3_7) -+WINE_CONFIG_MAKEFILE(dlls/xactengine3_7/tests) - WINE_CONFIG_MAKEFILE(dlls/xapofx1_1) - WINE_CONFIG_MAKEFILE(dlls/xapofx1_2) - WINE_CONFIG_MAKEFILE(dlls/xapofx1_3) -diff --git a/dlls/xactengine3_7/tests/Makefile.in b/dlls/xactengine3_7/tests/Makefile.in -new file mode 100644 -index 00000000000..c32b2562546 ---- /dev/null -+++ b/dlls/xactengine3_7/tests/Makefile.in -@@ -0,0 +1,5 @@ -+TESTDLL = xactengine3_7.dll -+IMPORTS = ole32 -+ -+C_SRCS = \ -+ xact3.c -diff --git a/dlls/xactengine3_7/tests/xact3.c b/dlls/xactengine3_7/tests/xact3.c -new file mode 100644 -index 00000000000..9b0d3defb09 ---- /dev/null -+++ b/dlls/xactengine3_7/tests/xact3.c -@@ -0,0 +1,100 @@ -+/* -+ * Copyright (c) 2020 Alistair Leslie-Hughes -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include -+#include -+#include -+#include -+ -+#define COBJMACROS -+#include "wine/test.h" -+ -+#include "x3daudio.h" -+ -+#include "initguid.h" -+#include "xact3.h" -+ -+DEFINE_GUID(IID_IXACT3Engine30, 0x9e33f661, 0x2d07, 0x43ec, 0x97, 0x04, 0xbb, 0xcb, 0x71, 0xa5, 0x49, 0x72); -+DEFINE_GUID(IID_IXACT3Engine31, 0xe72c1b9a, 0xd717, 0x41c0, 0x81, 0xa6, 0x50, 0xeb, 0x56, 0xe8, 0x06, 0x49); -+ -+DEFINE_GUID(CLSID_XACTEngine30, 0x3b80ee2a, 0xb0f5, 0x4780, 0x9e, 0x30, 0x90, 0xcb, 0x39, 0x68, 0x5b, 0x03); -+DEFINE_GUID(CLSID_XACTEngine31, 0x962f5027, 0x99be, 0x4692, 0xa4, 0x68, 0x85, 0x80, 0x2c, 0xf8, 0xde, 0x61); -+DEFINE_GUID(CLSID_XACTEngine32, 0xd3332f02, 0x3dd0, 0x4de9, 0x9a, 0xec, 0x20, 0xd8, 0x5c, 0x41, 0x11, 0xb6); -+DEFINE_GUID(CLSID_XACTEngine33, 0x94c1affa, 0x66e7, 0x4961, 0x95, 0x21, 0xcf, 0xde, 0xf3, 0x12, 0x8d, 0x4f); -+DEFINE_GUID(CLSID_XACTEngine34, 0x0977d092, 0x2d95, 0x4e43, 0x8d, 0x42, 0x9d, 0xdc, 0xc2, 0x54, 0x5e, 0xd5); -+DEFINE_GUID(CLSID_XACTEngine35, 0x074b110f, 0x7f58, 0x4743, 0xae, 0xa5, 0x12, 0xf1, 0x5b, 0x50, 0x74, 0xed); -+DEFINE_GUID(CLSID_XACTEngine36, 0x248d8a3b, 0x6256, 0x44d3, 0xa0, 0x18, 0x2a, 0xc9, 0x6c, 0x45, 0x9f, 0x47); -+ -+struct xact_interfaces -+{ -+ REFGUID clsid; -+ REFIID iid; -+ HRESULT expected; -+} xact_interfaces[] = -+{ -+ {&CLSID_XACTEngine30, &IID_IXACT3Engine30, S_OK }, -+ {&CLSID_XACTEngine30, &IID_IXACT3Engine31, E_NOINTERFACE}, -+ {&CLSID_XACTEngine30, &IID_IXACT3Engine, E_NOINTERFACE }, -+ -+ /* Version 3.1 to 3.4 use the same inteface */ -+ {&CLSID_XACTEngine31, &IID_IXACT3Engine31, S_OK }, -+ {&CLSID_XACTEngine32, &IID_IXACT3Engine31, S_OK }, -+ {&CLSID_XACTEngine33, &IID_IXACT3Engine31, S_OK }, -+ {&CLSID_XACTEngine34, &IID_IXACT3Engine31, S_OK }, -+ -+ /* Version 3.5 to 3.7 use the same inteface */ -+ {&CLSID_XACTEngine35, &IID_IXACT3Engine31, E_NOINTERFACE }, -+ {&CLSID_XACTEngine35, &IID_IXACT3Engine, S_OK }, -+ -+ {&CLSID_XACTEngine36, &IID_IXACT3Engine31, E_NOINTERFACE }, -+ {&CLSID_XACTEngine36, &IID_IXACT3Engine, S_OK }, -+ -+ {&CLSID_XACTEngine, &IID_IXACT3Engine31, E_NOINTERFACE }, -+ {&CLSID_XACTEngine, &IID_IXACT3Engine, S_OK }, -+ {&CLSID_XACTEngine, &IID_IUnknown, S_OK }, -+}; -+ -+static void test_interfaces(void) -+{ -+ IUnknown *unk; -+ HRESULT hr; -+ int i; -+ -+ for (i = 0; i < ARRAY_SIZE(xact_interfaces); i++) -+ { -+ hr = CoCreateInstance(xact_interfaces[i].clsid, NULL, CLSCTX_INPROC_SERVER, -+ xact_interfaces[i].iid, (void**)&unk); -+ if (hr == REGDB_E_CLASSNOTREG) -+ { -+ trace("%d %s not registered. Skipping\n", i, wine_dbgstr_guid(xact_interfaces[i].clsid) ); -+ continue; -+ } -+ ok(hr == xact_interfaces[i].expected, "%d, Unexpected value 0x%08x\n", i, hr); -+ if (hr == S_OK) -+ IUnknown_Release(unk); -+ } -+} -+ -+START_TEST(xact3) -+{ -+ CoInitialize(NULL); -+ -+ test_interfaces(); -+ -+ CoUninitialize(); -+} --- -2.28.0 - diff --git a/staging/upstream-commit b/staging/upstream-commit index 300da0ad..f1862f70 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -412db7789379549c4f821acb11c92f7aabab71c9 +f4a66ad257df4605e73dfea792eec55a70a04e84