diff --git a/patches/eventfd_synchronization/definition b/patches/eventfd_synchronization/definition index 9598a4c5..e21e1458 100644 --- a/patches/eventfd_synchronization/definition +++ b/patches/eventfd_synchronization/definition @@ -9,4 +9,6 @@ Depends: server-Realtime_Priority Depends: advapi32-Token_Integrity_Level Depends: ntdll-Junction_Points Depends: kernel32-K32GetPerformanceInfo -Depends: user32-rawinput-mouse \ No newline at end of file +Depends: user32-rawinput-mouse +Depends: server-Desktop_Refcount +Disabled: true \ No newline at end of file diff --git a/patches/ntdll-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch b/patches/ntdll-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch index baa16397..bf05ff10 100644 --- a/patches/ntdll-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch +++ b/patches/ntdll-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch @@ -1,4 +1,4 @@ -From 5ee2cbd7b66c190eae47785907fd40562b05379b Mon Sep 17 00:00:00 2001 +From e171bdbabedaeaafc0181ee156bf08ef180809da Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Thu, 16 Jan 2014 20:56:49 -0700 Subject: [PATCH] ntdll: Add support for junction point creation. @@ -18,10 +18,10 @@ Signed-off-by: Erich E. Hoover create mode 100644 libs/port/renameat2.c diff --git a/configure.ac b/configure.ac -index 395992046e8..6ea81e0641a 100644 +index 816e3684510..a1b6096b9b7 100644 --- a/configure.ac +++ b/configure.ac -@@ -2210,6 +2210,8 @@ AC_CHECK_FUNCS(\ +@@ -2202,6 +2202,8 @@ AC_CHECK_FUNCS(\ pwrite \ readdir \ readlink \ @@ -31,7 +31,7 @@ index 395992046e8..6ea81e0641a 100644 select \ setproctitle \ diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index 1adc1e094ec..3e10703c5da 100644 +index 013706889bb..37dca75651c 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -21,6 +21,7 @@ @@ -72,7 +72,7 @@ index 1adc1e094ec..3e10703c5da 100644 + NTSTATUS status; + int i; + -+ if ((status = server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) ++ if ((status = unix_funcs->server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) + return status; + + if ((status = server_get_unix_name( handle, &unix_src ))) @@ -181,7 +181,7 @@ index 1adc1e094ec..3e10703c5da 100644 return server_ioctl_file( handle, event, apc, apc_context, io, code, in_buffer, in_size, out_buffer, out_size ); diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 33b8ead5528..e6fea0ff7fe 100644 +index 31c18454f0e..046b49c2d2b 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -38,6 +38,7 @@ @@ -192,7 +192,7 @@ index 33b8ead5528..e6fea0ff7fe 100644 #ifndef IO_COMPLETION_ALL_ACCESS #define IO_COMPLETION_ALL_ACCESS 0x001F0003 -@@ -4951,6 +4952,105 @@ static void test_file_readonly_access(void) +@@ -4953,6 +4954,105 @@ static void test_file_readonly_access(void) DeleteFileW(path); } @@ -298,17 +298,17 @@ index 33b8ead5528..e6fea0ff7fe 100644 START_TEST(file) { HMODULE hkernel32 = GetModuleHandleA("kernel32.dll"); -@@ -5021,4 +5121,5 @@ START_TEST(file) +@@ -5023,4 +5123,5 @@ START_TEST(file) test_query_attribute_information_file(); test_ioctl(); test_flush_buffers_file(); + test_reparse_points(); } diff --git a/include/Makefile.in b/include/Makefile.in -index 3f29a374144..daeb92cd13b 100644 +index 9796dd8e5d9..410ae718e99 100644 --- a/include/Makefile.in +++ b/include/Makefile.in -@@ -510,6 +510,7 @@ SOURCES = \ +@@ -517,6 +517,7 @@ SOURCES = \ ntddvdeo.h \ ntdef.h \ ntdsapi.h \ @@ -365,7 +365,7 @@ index 00000000000..21d42e17325 + +#endif /* __WINE_NTIFS_H */ diff --git a/include/wine/port.h b/include/wine/port.h -index 8514a4a43bf..a17ffe7ab84 100644 +index 928730a41d7..e8434c73cca 100644 --- a/include/wine/port.h +++ b/include/wine/port.h @@ -334,6 +334,15 @@ double rint(double x); @@ -385,10 +385,10 @@ index 8514a4a43bf..a17ffe7ab84 100644 int statvfs( const char *path, struct statvfs *buf ); #endif diff --git a/libs/port/Makefile.in b/libs/port/Makefile.in -index 08e143d26d0..1c850116785 100644 +index 7bc67fa3fee..1963afe2423 100644 --- a/libs/port/Makefile.in +++ b/libs/port/Makefile.in -@@ -15,6 +15,7 @@ C_SRCS = \ +@@ -14,6 +14,7 @@ C_SRCS = \ pread.c \ pwrite.c \ readlink.c \ @@ -458,5 +458,5 @@ index 00000000000..f46f407ec71 +} +#endif /* HAVE_RENAMEAT2 */ -- -2.25.1 +2.26.2 diff --git a/patches/ntdll-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch b/patches/ntdll-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch index d4eeecb3..f8b80c69 100644 --- a/patches/ntdll-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch +++ b/patches/ntdll-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch @@ -1,7 +1,7 @@ -From 102451499f5de1148d55df7c7bdfe91257a13cef Mon Sep 17 00:00:00 2001 +From daf6a4fc8ae19ab9f9df39f958109c09232b5426 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Thu, 16 Jan 2014 20:57:57 -0700 -Subject: ntdll: Add support for reading junction points. +Subject: [PATCH] ntdll: Add support for reading junction points. Signed-off-by: Erich E. Hoover --- @@ -10,10 +10,10 @@ Signed-off-by: Erich E. Hoover 2 files changed, 119 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index 693caecffa..b9087cbf4d 100644 +index 37dca75651c..5a05217102d 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c -@@ -1739,6 +1739,106 @@ cleanup: +@@ -1763,6 +1763,106 @@ cleanup: } @@ -35,7 +35,7 @@ index 693caecffa..b9087cbf4d 100644 + char *p; + int i; + -+ if ((status = server_get_unix_fd( handle, FILE_ANY_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) ++ if ((status = unix_funcs->server_get_unix_fd( handle, FILE_ANY_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) + return status; + + if ((status = server_get_unix_name( handle, &unix_src ))) @@ -120,7 +120,7 @@ index 693caecffa..b9087cbf4d 100644 /************************************************************************** * NtFsControlFile [NTDLL.@] * ZwFsControlFile [NTDLL.@] -@@ -1824,6 +1924,12 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc +@@ -1848,6 +1948,12 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc status = STATUS_SUCCESS; break; @@ -134,10 +134,10 @@ index 693caecffa..b9087cbf4d 100644 { REPARSE_DATA_BUFFER *buffer = (REPARSE_DATA_BUFFER *)in_buffer; diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 322dadefe3..cdb608d305 100644 +index 046b49c2d2b..9197a234703 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c -@@ -4868,9 +4868,10 @@ static void test_reparse_points(void) +@@ -4990,9 +4990,10 @@ static void test_reparse_points(void) static const WCHAR dotW[] = {'.',0}; REPARSE_DATA_BUFFER *buffer = NULL; DWORD dwret, dwLen, dwFlags; @@ -149,7 +149,7 @@ index 322dadefe3..cdb608d305 100644 BOOL bret; /* Create a temporary folder for the junction point tests */ -@@ -4918,6 +4919,17 @@ static void test_reparse_points(void) +@@ -5040,6 +5041,17 @@ static void test_reparse_points(void) buffer_len = build_reparse_buffer(nameW.Buffer, &buffer); bret = DeviceIoControl(handle, FSCTL_SET_REPARSE_POINT, (LPVOID)buffer, buffer_len, NULL, 0, &dwret, 0); ok(bret, "Failed to create junction point! (0x%x)\n", GetLastError()); @@ -168,5 +168,5 @@ index 322dadefe3..cdb608d305 100644 cleanup: -- -2.17.1 +2.26.2 diff --git a/patches/ntdll-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch b/patches/ntdll-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch index 311bf592..0ec1c91e 100644 --- a/patches/ntdll-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch +++ b/patches/ntdll-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch @@ -1,7 +1,7 @@ -From b544a9cd5b1d8abe456125652e1a78b20bdc4a27 Mon Sep 17 00:00:00 2001 +From 10508a815ca734c8a94472f82e6c0f5ebe5fbbd9 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Thu, 16 Jan 2014 21:00:21 -0700 -Subject: ntdll: Add support for deleting junction points. +Subject: [PATCH] ntdll: Add support for deleting junction points. Signed-off-by: Erich E. Hoover --- @@ -11,10 +11,10 @@ Signed-off-by: Erich E. Hoover 3 files changed, 131 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index b9087cbf4d..dbbb54768b 100644 +index 5a05217102d..98f37af8793 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c -@@ -1839,6 +1839,87 @@ cleanup: +@@ -1863,6 +1863,87 @@ cleanup: } @@ -31,7 +31,7 @@ index b9087cbf4d..dbbb54768b 100644 + NTSTATUS status; + struct stat st; + -+ if ((status = server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) ++ if ((status = unix_funcs->server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) + return status; + + if ((status = server_get_unix_name( handle, &unix_name ))) @@ -102,7 +102,7 @@ index b9087cbf4d..dbbb54768b 100644 /************************************************************************** * NtFsControlFile [NTDLL.@] * ZwFsControlFile [NTDLL.@] -@@ -1924,6 +2005,22 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc +@@ -1948,6 +2029,22 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc status = STATUS_SUCCESS; break; @@ -126,10 +126,10 @@ index b9087cbf4d..dbbb54768b 100644 { REPARSE_DATA_BUFFER *buffer = (REPARSE_DATA_BUFFER *)out_buffer; diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index cdb608d305..bc6961bc61 100644 +index 9197a234703..6f6a49afd46 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c -@@ -4863,12 +4863,15 @@ static void test_reparse_points(void) +@@ -4985,12 +4985,15 @@ static void test_reparse_points(void) static const WCHAR reparseW[] = {'\\','r','e','p','a','r','s','e',0}; WCHAR path[MAX_PATH], reparse_path[MAX_PATH], target_path[MAX_PATH]; static const WCHAR targetW[] = {'\\','t','a','r','g','e','t',0}; @@ -145,7 +145,7 @@ index cdb608d305..bc6961bc61 100644 UNICODE_STRING nameW; HANDLE handle; WCHAR *dest; -@@ -4916,6 +4919,8 @@ static void test_reparse_points(void) +@@ -5038,6 +5041,8 @@ static void test_reparse_points(void) win_skip("Failed to open junction point directory handle (0x%x).\n", GetLastError()); goto cleanup; } @@ -154,7 +154,7 @@ index cdb608d305..bc6961bc61 100644 buffer_len = build_reparse_buffer(nameW.Buffer, &buffer); bret = DeviceIoControl(handle, FSCTL_SET_REPARSE_POINT, (LPVOID)buffer, buffer_len, NULL, 0, &dwret, 0); ok(bret, "Failed to create junction point! (0x%x)\n", GetLastError()); -@@ -4930,6 +4935,22 @@ static void test_reparse_points(void) +@@ -5052,6 +5057,22 @@ static void test_reparse_points(void) dest = &buffer->MountPointReparseBuffer.PathBuffer[buffer->MountPointReparseBuffer.SubstituteNameOffset/sizeof(WCHAR)]; ok((memcmp(dest, nameW.Buffer, string_len) == 0), "Junction point destination does not match ('%s' != '%s')!\n", wine_dbgstr_w(dest), wine_dbgstr_w(nameW.Buffer)); @@ -177,7 +177,7 @@ index cdb608d305..bc6961bc61 100644 CloseHandle(handle); cleanup: -@@ -4937,7 +4958,7 @@ cleanup: +@@ -5059,7 +5080,7 @@ cleanup: pRtlFreeUnicodeString(&nameW); HeapFree(GetProcessHeap(), 0, buffer); bret = RemoveDirectoryW(reparse_path); @@ -187,7 +187,7 @@ index cdb608d305..bc6961bc61 100644 ok(bret, "Failed to remove temporary target directory!\n"); RemoveDirectoryW(path); diff --git a/include/ntifs.h b/include/ntifs.h -index 21d42e1732..4539b89d58 100644 +index 21d42e17325..4539b89d583 100644 --- a/include/ntifs.h +++ b/include/ntifs.h @@ -39,4 +39,16 @@ typedef struct _REPARSE_DATA_BUFFER { @@ -208,5 +208,5 @@ index 21d42e1732..4539b89d58 100644 + #endif /* __WINE_NTIFS_H */ -- -2.17.1 +2.26.2 diff --git a/patches/ntdll-Junction_Points/0007-ntdll-Add-support-for-absolute-symlink-creation.patch b/patches/ntdll-Junction_Points/0007-ntdll-Add-support-for-absolute-symlink-creation.patch index 9df396a7..a0e62605 100644 --- a/patches/ntdll-Junction_Points/0007-ntdll-Add-support-for-absolute-symlink-creation.patch +++ b/patches/ntdll-Junction_Points/0007-ntdll-Add-support-for-absolute-symlink-creation.patch @@ -1,7 +1,7 @@ -From 5706d02d2bb68f87d4687f8acef96dd59978b6f8 Mon Sep 17 00:00:00 2001 +From d1024118fbb0a73abd19ef937d13d4378a61992b Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Thu, 16 Jan 2014 21:06:24 -0700 -Subject: ntdll: Add support for absolute symlink creation. +Subject: [PATCH] ntdll: Add support for absolute symlink creation. Signed-off-by: Erich E. Hoover --- @@ -11,10 +11,10 @@ Signed-off-by: Erich E. Hoover 3 files changed, 143 insertions(+), 19 deletions(-) diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index dbbb54768b..62941774ec 100644 +index 98f37af8793..825344dab86 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c -@@ -1648,17 +1648,33 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event, +@@ -1672,17 +1672,33 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event, NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer) { BOOL src_allocated = FALSE, dest_allocated = FALSE, tempdir_created = FALSE; @@ -48,10 +48,10 @@ index dbbb54768b..62941774ec 100644 + return STATUS_NOT_IMPLEMENTED; + } + - if ((status = server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) + if ((status = unix_funcs->server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) return status; -@@ -1682,6 +1698,18 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer) +@@ -1706,6 +1722,18 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer) strcat( magic_dest, "." ); strcat( magic_dest, "/" ); } @@ -70,7 +70,7 @@ index dbbb54768b..62941774ec 100644 strcat( magic_dest, unix_dest.Buffer ); /* Produce the link in a temporary location in the same folder */ -@@ -2034,6 +2062,7 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc +@@ -2058,6 +2086,7 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc switch(buffer->ReparseTag) { case IO_REPARSE_TAG_MOUNT_POINT: @@ -79,10 +79,10 @@ index dbbb54768b..62941774ec 100644 break; default: diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 71e7dd56f3..05ba0fc57e 100644 +index 89f291536b2..92f03ab3d34 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c -@@ -4832,26 +4832,50 @@ static void test_file_readonly_access(void) +@@ -4954,26 +4954,50 @@ static void test_file_readonly_access(void) DeleteFileW(path); } @@ -141,7 +141,7 @@ index 71e7dd56f3..05ba0fc57e 100644 lstrcpyW(subst_dest, filename); lstrcpyW(print_dest, &filename[prefix_len]); *pbuffer = buffer; -@@ -4871,10 +4895,12 @@ static void test_reparse_points(void) +@@ -4993,10 +5017,12 @@ static void test_reparse_points(void) REPARSE_DATA_BUFFER *buffer = NULL; DWORD dwret, dwLen, dwFlags, err; INT buffer_len, string_len; @@ -155,7 +155,7 @@ index 71e7dd56f3..05ba0fc57e 100644 BOOL bret; /* Create a temporary folder for the junction point tests */ -@@ -4921,7 +4947,7 @@ static void test_reparse_points(void) +@@ -5043,7 +5069,7 @@ static void test_reparse_points(void) } dwret = NtQueryInformationFile(handle, &iosb, &old_attrib, sizeof(old_attrib), FileBasicInformation); ok(dwret == STATUS_SUCCESS, "Failed to get junction point folder's attributes (0x%x).\n", dwret); @@ -164,7 +164,7 @@ index 71e7dd56f3..05ba0fc57e 100644 bret = DeviceIoControl(handle, FSCTL_SET_REPARSE_POINT, (LPVOID)buffer, buffer_len, NULL, 0, &dwret, 0); ok(bret, "Failed to create junction point! (0x%x)\n", GetLastError()); -@@ -4962,7 +4988,7 @@ static void test_reparse_points(void) +@@ -5084,7 +5110,7 @@ static void test_reparse_points(void) HeapFree(GetProcessHeap(), 0, buffer); handle = CreateFileW(reparse_path, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, 0); @@ -173,7 +173,7 @@ index 71e7dd56f3..05ba0fc57e 100644 bret = DeviceIoControl(handle, FSCTL_SET_REPARSE_POINT, (LPVOID)buffer, buffer_len, NULL, 0, &dwret, 0); ok(bret, "Failed to create junction point! (0x%x)\n", GetLastError()); CloseHandle(handle); -@@ -4977,7 +5003,7 @@ static void test_reparse_points(void) +@@ -5099,7 +5125,7 @@ static void test_reparse_points(void) ok(bret, "Failed to create junction point target directory.\n"); handle = CreateFileW(reparse_path, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, 0); @@ -182,7 +182,7 @@ index 71e7dd56f3..05ba0fc57e 100644 bret = DeviceIoControl(handle, FSCTL_SET_REPARSE_POINT, (LPVOID)buffer, buffer_len, NULL, 0, &dwret, 0); ok(bret, "Failed to create junction point! (0x%x)\n", GetLastError()); CloseHandle(handle); -@@ -4990,14 +5016,73 @@ static void test_reparse_points(void) +@@ -5112,14 +5138,73 @@ static void test_reparse_points(void) ok(dwret != (DWORD)~0, "Junction point doesn't exist (attributes: 0x%x)!\n", dwret); ok(dwret & FILE_ATTRIBUTE_REPARSE_POINT, "File is not a junction point! (attributes: 0x%x)\n", dwret); @@ -261,7 +261,7 @@ index 71e7dd56f3..05ba0fc57e 100644 } diff --git a/include/ntifs.h b/include/ntifs.h -index 4539b89d58..ab3273d3f8 100644 +index 4539b89d583..ab3273d3f81 100644 --- a/include/ntifs.h +++ b/include/ntifs.h @@ -21,11 +21,20 @@ @@ -294,5 +294,5 @@ index 4539b89d58..ab3273d3f8 100644 typedef struct _REPARSE_GUID_DATA_BUFFER { DWORD ReparseTag; -- -2.17.1 +2.26.2 diff --git a/patches/ntdll-Junction_Points/0014-ntdll-Correctly-report-file-symbolic-links-as-files.patch b/patches/ntdll-Junction_Points/0014-ntdll-Correctly-report-file-symbolic-links-as-files.patch index 97cce7c0..63549fa6 100644 --- a/patches/ntdll-Junction_Points/0014-ntdll-Correctly-report-file-symbolic-links-as-files.patch +++ b/patches/ntdll-Junction_Points/0014-ntdll-Correctly-report-file-symbolic-links-as-files.patch @@ -1,4 +1,4 @@ -From 4906830101f0de0e165def16ff869ecc8a307b57 Mon Sep 17 00:00:00 2001 +From 22a440051f4dd3b63977a384735cf60fad7f28f5 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Sat, 30 Mar 2019 12:00:51 -0600 Subject: [PATCH] ntdll: Correctly report file symbolic links as files. @@ -10,7 +10,7 @@ Signed-off-by: Erich E. Hoover 2 files changed, 84 insertions(+), 44 deletions(-) diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index 29a928153b9..4902dff190a 100644 +index 74df2aed687..7483c71a8db 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -123,6 +123,9 @@ mode_t FILE_umask = 0; @@ -73,7 +73,7 @@ index 29a928153b9..4902dff190a 100644 - char *p; int i; -- if ((status = server_get_unix_fd( handle, FILE_ANY_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) +- if ((status = unix_funcs->server_get_unix_fd( handle, FILE_ANY_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) - return status; - - if ((status = server_get_unix_name( handle, &unix_src ))) @@ -174,7 +174,7 @@ index 29a928153b9..4902dff190a 100644 + ULONG flags = 0; + INT prefix_len; + -+ if ((status = server_get_unix_fd( handle, FILE_ANY_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) ++ if ((status = unix_funcs->server_get_unix_fd( handle, FILE_ANY_ACCESS, &dest_fd, &needs_close, NULL, NULL ))) + return status; + + if ((status = server_get_unix_name( handle, &unix_src ))) @@ -191,10 +191,10 @@ index 29a928153b9..4902dff190a 100644 /* convert the relative path into an absolute path */ if (flags == SYMLINK_FLAG_RELATIVE) diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 21bd72c7358..a1654fb8e9b 100644 +index e0116491eee..7f983583268 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c -@@ -5185,13 +5185,13 @@ static void test_reparse_points(void) +@@ -5187,13 +5187,13 @@ static void test_reparse_points(void) /* Check deleting a file symlink as if it were a directory */ bret = RemoveDirectoryW(reparse_path); @@ -210,7 +210,7 @@ index 21bd72c7358..a1654fb8e9b 100644 ok(dwret & FILE_ATTRIBUTE_REPARSE_POINT, "File is not a symlink! (attributes: 0x%x)\n", dwret); /* Delete the symlink as a file */ -@@ -5200,10 +5200,10 @@ static void test_reparse_points(void) +@@ -5202,10 +5202,10 @@ static void test_reparse_points(void) /* Create a blank slate for directory symlink tests */ bret = CreateDirectoryW(reparse_path, NULL); @@ -224,5 +224,5 @@ index 21bd72c7358..a1654fb8e9b 100644 /* Create the directory symlink */ HeapFree(GetProcessHeap(), 0, buffer); -- -2.25.1 +2.26.2 diff --git a/patches/ntdll-NtQueryEaFile/0001-ntdll-Improve-stub-of-NtQueryEaFile.patch b/patches/ntdll-NtQueryEaFile/0001-ntdll-Improve-stub-of-NtQueryEaFile.patch index a50a4bec..5c4d4fbf 100644 --- a/patches/ntdll-NtQueryEaFile/0001-ntdll-Improve-stub-of-NtQueryEaFile.patch +++ b/patches/ntdll-NtQueryEaFile/0001-ntdll-Improve-stub-of-NtQueryEaFile.patch @@ -1,4 +1,4 @@ -From 1111d9a53405b19b57a4385f7e2815b9c62238fa Mon Sep 17 00:00:00 2001 +From 157385f6bdf23c65b1375126f73dad87fcb503f4 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 6 Jun 2015 07:03:33 +0800 Subject: [PATCH] ntdll: Improve stub of NtQueryEaFile. @@ -10,10 +10,10 @@ Based on a patch by Qian Hong. 2 files changed, 98 insertions(+), 4 deletions(-) diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index 2269ae311a..bed55c6fe7 100644 +index 7a49cb5d8db..b940201c5a8 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c -@@ -3962,14 +3962,25 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, PIO_STATUS_BLOCK io +@@ -4041,14 +4041,25 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, PIO_STATUS_BLOCK io * Success: 0. Attributes read into buffer * Failure: An NTSTATUS error code describing the error. */ @@ -32,7 +32,7 @@ index 2269ae311a..bed55c6fe7 100644 ea_list_len, ea_index, restart); - return STATUS_ACCESS_DENIED; + -+ if ((status = server_get_unix_fd( handle, 0, &fd, &needs_close, NULL, NULL )) != STATUS_SUCCESS) ++ if ((status = unix_funcs->server_get_unix_fd( handle, 0, &fd, &needs_close, NULL, NULL )) != STATUS_SUCCESS) + return status; + + if (buffer && length) @@ -44,7 +44,7 @@ index 2269ae311a..bed55c6fe7 100644 diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 1c3d0bc9a9..e210cbe9f2 100644 +index 44335514761..abd5903e804 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -85,6 +85,7 @@ static NTSTATUS (WINAPI *pNtQueryDirectoryFile)(HANDLE,HANDLE,PIO_APC_ROUTINE,PV @@ -55,7 +55,7 @@ index 1c3d0bc9a9..e210cbe9f2 100644 static WCHAR fooW[] = {'f','o','o',0}; -@@ -4994,6 +4995,86 @@ static void test_flush_buffers_file(void) +@@ -4886,6 +4887,86 @@ static void test_flush_buffers_file(void) DeleteFileA(buffer); } @@ -142,7 +142,7 @@ index 1c3d0bc9a9..e210cbe9f2 100644 static void test_file_readonly_access(void) { static const DWORD default_sharing = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE; -@@ -5483,6 +5564,7 @@ START_TEST(file) +@@ -5375,6 +5456,7 @@ START_TEST(file) pNtQueryVolumeInformationFile = (void *)GetProcAddress(hntdll, "NtQueryVolumeInformationFile"); pNtQueryFullAttributesFile = (void *)GetProcAddress(hntdll, "NtQueryFullAttributesFile"); pNtFlushBuffersFile = (void *)GetProcAddress(hntdll, "NtFlushBuffersFile"); @@ -150,7 +150,7 @@ index 1c3d0bc9a9..e210cbe9f2 100644 test_read_write(); test_NtCreateFile(); -@@ -5513,6 +5595,7 @@ START_TEST(file) +@@ -5404,6 +5486,7 @@ START_TEST(file) test_query_volume_information_file(); test_query_attribute_information_file(); test_ioctl(); @@ -159,5 +159,5 @@ index 1c3d0bc9a9..e210cbe9f2 100644 test_reparse_points(); } -- -2.23.0 +2.26.2 diff --git a/patches/ntdll-RtlCreateUserThread/0001-ntdll-Refactor-RtlCreateUserThread-into-NtCreateThre.patch b/patches/ntdll-RtlCreateUserThread/0001-ntdll-Refactor-RtlCreateUserThread-into-NtCreateThre.patch index 1dee3e61..568cfa9a 100644 --- a/patches/ntdll-RtlCreateUserThread/0001-ntdll-Refactor-RtlCreateUserThread-into-NtCreateThre.patch +++ b/patches/ntdll-RtlCreateUserThread/0001-ntdll-Refactor-RtlCreateUserThread-into-NtCreateThre.patch @@ -1,4 +1,4 @@ -From 1a7a4c790294dc0eddd3202853c17967d6bb8e1a Mon Sep 17 00:00:00 2001 +From 325be924c400a713b5122b7de800e197ddc3f8b7 Mon Sep 17 00:00:00 2001 From: Andrew Wesie Date: Fri, 27 Jul 2018 01:22:59 -0500 Subject: [PATCH] ntdll: Refactor RtlCreateUserThread into NtCreateThreadEx. @@ -12,7 +12,7 @@ reported version), and expects it to be called whenever a thread is created. 3 files changed, 187 insertions(+), 36 deletions(-) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index cb6a8ec8c4..16ec96bc56 100644 +index 42532bd9f1c..65fdc30d7a4 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -182,7 +182,7 @@ @@ -25,10 +25,10 @@ index cb6a8ec8c4..16ec96bc56 100644 @ stdcall NtCreateTimer(ptr long ptr long) @ stub NtCreateToken diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c -index ceadcff1b2..2c4a9c4949 100644 +index 20934448fa3..9deb4397ba9 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c -@@ -413,34 +413,18 @@ static void start_thread( struct startup_info *info ) +@@ -390,34 +390,18 @@ static void start_thread( struct startup_info *info ) /*********************************************************************** * NtCreateThreadEx (NTDLL.@) */ @@ -68,7 +68,7 @@ index ceadcff1b2..2c4a9c4949 100644 HANDLE handle = 0, actctx = 0; TEB *teb = NULL; DWORD tid = 0; -@@ -451,6 +435,33 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, SECURITY_DESCRIPTOR *descr, +@@ -428,6 +412,33 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, SECURITY_DESCRIPTOR *descr, struct object_attributes *objattr = NULL; INITIAL_TEB stack; @@ -102,7 +102,7 @@ index ceadcff1b2..2c4a9c4949 100644 if (process != NtCurrentProcess()) { apc_call_t call; -@@ -476,12 +487,7 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, SECURITY_DESCRIPTOR *descr, +@@ -453,12 +464,7 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, SECURITY_DESCRIPTOR *descr, return result.create_thread.status; } @@ -114,9 +114,9 @@ index ceadcff1b2..2c4a9c4949 100644 - } + if ((status = alloc_object_attributes( thread_attr, &objattr, &len ))) return status; - if (server_pipe( request_pipe ) == -1) + if (unix_funcs->server_pipe( request_pipe ) == -1) { -@@ -493,7 +499,7 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, SECURITY_DESCRIPTOR *descr, +@@ -470,7 +476,7 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, SECURITY_DESCRIPTOR *descr, SERVER_START_REQ( new_thread ) { req->process = wine_server_obj_handle( process ); @@ -125,7 +125,7 @@ index ceadcff1b2..2c4a9c4949 100644 req->suspend = suspended; req->request_fd = request_pipe[0]; wine_server_add_data( req, objattr, len ); -@@ -552,20 +558,20 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, SECURITY_DESCRIPTOR *descr, +@@ -529,20 +535,20 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, SECURITY_DESCRIPTOR *descr, thread_data->wait_fd[1] = -1; thread_data->start_stack = (char *)teb->Tib.StackBase; @@ -153,7 +153,7 @@ index ceadcff1b2..2c4a9c4949 100644 pthread_sigmask( SIG_SETMASK, &sigset, NULL ); if (id) id->UniqueThread = ULongToHandle(tid); -@@ -582,6 +588,124 @@ error: +@@ -559,6 +565,124 @@ error: return status; } @@ -279,10 +279,10 @@ index ceadcff1b2..2c4a9c4949 100644 /****************************************************************************** * RtlGetNtGlobalFlags (NTDLL.@) diff --git a/include/winternl.h b/include/winternl.h -index 733c8a33f6..5c3f7a05ff 100644 +index 199b8fc52f2..489b145937c 100644 --- a/include/winternl.h +++ b/include/winternl.h -@@ -2250,6 +2250,33 @@ typedef struct _NLSTABLEINFO +@@ -2274,6 +2274,33 @@ typedef struct _NLSTABLEINFO USHORT *LowerCaseTable; } NLSTABLEINFO, *PNLSTABLEINFO; diff --git a/patches/ntdll-WRITECOPY/0001-ntdll-Trigger-write-watches-before-passing-userdata-.patch b/patches/ntdll-WRITECOPY/0001-ntdll-Trigger-write-watches-before-passing-userdata-.patch index cb67b6c8..1f72cb10 100644 --- a/patches/ntdll-WRITECOPY/0001-ntdll-Trigger-write-watches-before-passing-userdata-.patch +++ b/patches/ntdll-WRITECOPY/0001-ntdll-Trigger-write-watches-before-passing-userdata-.patch @@ -1,4 +1,4 @@ -From de02412f5e105f162e2e457d5bec698575fffc10 Mon Sep 17 00:00:00 2001 +From 5ea68740395cd0ae34fb4d74d540b30170645ac3 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 4 Oct 2014 02:35:44 +0200 Subject: [PATCH] ntdll: Trigger write watches before passing userdata pointer @@ -10,7 +10,7 @@ Subject: [PATCH] ntdll: Trigger write watches before passing userdata pointer 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c -index 381062cceb1..e7c6ca63fe2 100644 +index 825f8451904..b414401634a 100644 --- a/dlls/advapi32/tests/security.c +++ b/dlls/advapi32/tests/security.c @@ -1557,7 +1557,6 @@ todo_wine @@ -22,28 +22,25 @@ index 381062cceb1..e7c6ca63fe2 100644 "Access and/or AccessStatus were changed!\n"); diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c -index 046cf601ebf..3d88b47a744 100644 +index ed4e3f25531..921dec86c82 100644 --- a/dlls/ntdll/server.c +++ b/dlls/ntdll/server.c -@@ -406,9 +406,18 @@ unsigned int server_call_unlocked( void *req_ptr ) +@@ -166,6 +166,15 @@ static DECLSPEC_NORETURN void server_protocol_perror( const char *err ) */ unsigned int CDECL wine_server_call( void *req_ptr ) { + struct __server_request_info * const req = req_ptr; - sigset_t old_set; - unsigned int ret; - ++ + /* trigger write watches, otherwise read() might return EFAULT */ + if (req->u.req.request_header.reply_size && + !virtual_check_buffer_for_write( req->reply_data, req->u.req.request_header.reply_size )) + { -+ ret = STATUS_ACCESS_VIOLATION; -+ return ret; ++ return STATUS_ACCESS_VIOLATION; + } + - pthread_sigmask( SIG_BLOCK, &server_block_set, &old_set ); - ret = server_call_unlocked( req_ptr ); - pthread_sigmask( SIG_SETMASK, &old_set, NULL ); + return unix_funcs->server_call( req_ptr ); + } + -- 2.26.2 diff --git a/patches/ntdll-ext4-case-folder/0002-ntdll-server-Mark-drive_c-as-case-insensitive-when-c.patch b/patches/ntdll-ext4-case-folder/0002-ntdll-server-Mark-drive_c-as-case-insensitive-when-c.patch index 78dac208..9711a716 100644 --- a/patches/ntdll-ext4-case-folder/0002-ntdll-server-Mark-drive_c-as-case-insensitive-when-c.patch +++ b/patches/ntdll-ext4-case-folder/0002-ntdll-server-Mark-drive_c-as-case-insensitive-when-c.patch @@ -1,4 +1,4 @@ -From acdd5aaf5d4f618a96f21710a8ee2f44a994194c Mon Sep 17 00:00:00 2001 +From 627618459891aa36fc9a9ac0c04b7035d2272fb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Iv=C4=83ncescu?= Date: Fri, 24 May 2019 15:09:35 +0300 Subject: [PATCH] ntdll/server: Mark drive_c as case-insensitive when created @@ -9,14 +9,14 @@ Content-Transfer-Encoding: 8bit Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47099 Signed-off-by: Gabriel Ivăncescu --- - dlls/ntdll/server.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ + dlls/ntdll/unix/server.c | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) -diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c -index bc25e242a77..f2109dd1ef0 100644 ---- a/dlls/ntdll/server.c -+++ b/dlls/ntdll/server.c -@@ -54,6 +54,12 @@ +diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c +index 8dc3f33bc80..0e6c9d90281 100644 +--- a/dlls/ntdll/unix/server.c ++++ b/dlls/ntdll/unix/server.c +@@ -55,6 +55,12 @@ #ifdef HAVE_SYS_MMAN_H #include #endif @@ -29,7 +29,7 @@ index bc25e242a77..f2109dd1ef0 100644 #ifdef HAVE_SYS_PRCTL_H # include #endif -@@ -87,6 +93,22 @@ +@@ -93,6 +99,22 @@ WINE_DEFAULT_DEBUG_CHANNEL(server); @@ -49,10 +49,10 @@ index bc25e242a77..f2109dd1ef0 100644 + +#endif + - /* Some versions of glibc don't define this */ - #ifndef SCM_RIGHTS - #define SCM_RIGHTS 1 -@@ -1380,6 +1402,28 @@ void init_paths(void) + #ifndef MSG_CMSG_CLOEXEC + #define MSG_CMSG_CLOEXEC 0 + #endif +@@ -729,6 +751,28 @@ static const char *init_server_dir( dev_t dev, ino_t ino ) } @@ -81,7 +81,7 @@ index bc25e242a77..f2109dd1ef0 100644 /*********************************************************************** * setup_config_dir * -@@ -1416,6 +1460,7 @@ static int setup_config_dir(void) +@@ -765,6 +809,7 @@ static int setup_config_dir(void) if (!mkdir( "dosdevices", 0777 )) { mkdir( "drive_c", 0777 ); diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 8fd37ebc..e62f1199 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -52,7 +52,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "e48fabff525061c8eea9558084a97308cebe6b7b" + echo "bf83d755d987fec552cd1dce30638c31c49ab760" } # Show version information @@ -133,7 +133,6 @@ patch_enable_all () enable_dxdiagn_Enumerate_DirectSound="$1" enable_dxdiagn_GetChildContainer_Leaf_Nodes="$1" enable_dxva2_Video_Decoder="$1" - enable_eventfd_synchronization="$1" enable_explorer_Video_Registry_Key="$1" enable_fonts_Missing_Fonts="$1" enable_fsutil_Stub_Program="$1" @@ -238,7 +237,6 @@ patch_enable_all () enable_server_PeekMessage="$1" enable_server_Realtime_Priority="$1" enable_server_Registry_Notifications="$1" - enable_server_Shared_Memory="$1" enable_server_Signal_Thread="$1" enable_server_Stored_ACLs="$1" enable_setupapi_DiskSpaceList="$1" @@ -502,9 +500,6 @@ patch_enable () dxva2-Video_Decoder) enable_dxva2_Video_Decoder="$2" ;; - eventfd_synchronization) - enable_eventfd_synchronization="$2" - ;; explorer-Video_Registry_Key) enable_explorer_Video_Registry_Key="$2" ;; @@ -817,9 +812,6 @@ patch_enable () server-Registry_Notifications) enable_server_Registry_Notifications="$2" ;; - server-Shared_Memory) - enable_server_Shared_Memory="$2" - ;; server-Signal_Thread) enable_server_Signal_Thread="$2" ;; @@ -1574,6 +1566,28 @@ if test "$enable_user32_rawinput_hid" -eq 1; then enable_user32_rawinput_nolegacy=1 fi +if test "$enable_user32_rawinput_nolegacy" -eq 1; then + if test "$enable_server_Key_State" -gt 1; then + abort "Patchset server-Key_State disabled, but user32-rawinput-nolegacy depends on that." + fi + if test "$enable_user32_rawinput_mouse" -gt 1; then + abort "Patchset user32-rawinput-mouse disabled, but user32-rawinput-nolegacy depends on that." + fi + enable_server_Key_State=1 + enable_user32_rawinput_mouse=1 +fi + +if test "$enable_user32_rawinput_mouse" -eq 1; then + if test "$enable_loader_KeyboardLayouts" -gt 1; then + abort "Patchset loader-KeyboardLayouts disabled, but user32-rawinput-mouse depends on that." + fi + if test "$enable_winex11_drv_mouse_coorrds" -gt 1; then + abort "Patchset winex11.drv-mouse-coorrds disabled, but user32-rawinput-mouse depends on that." + fi + enable_loader_KeyboardLayouts=1 + enable_winex11_drv_mouse_coorrds=1 +fi + if test "$enable_stdole32_tlb_SLTG_Typelib" -eq 1; then if test "$enable_widl_SLTG_Typelib_Support" -gt 1; then abort "Patchset widl-SLTG_Typelib_Support disabled, but stdole32.tlb-SLTG_Typelib depends on that." @@ -1599,11 +1613,11 @@ if test "$enable_shell32_Progress_Dialog" -eq 1; then enable_shell32_SHFileOperation_Move=1 fi -if test "$enable_server_Object_Types" -eq 1; then - if test "$enable_server_Shared_Memory" -gt 1; then - abort "Patchset server-Shared_Memory disabled, but server-Object_Types depends on that." +if test "$enable_server_Realtime_Priority" -eq 1; then + if test "$enable_ntdll_ThreadTime" -gt 1; then + abort "Patchset ntdll-ThreadTime disabled, but server-Realtime_Priority depends on that." fi - enable_server_Shared_Memory=1 + enable_ntdll_ThreadTime=1 fi if test "$enable_server_Inherited_ACLs" -eq 1; then @@ -1625,13 +1639,9 @@ if test "$enable_server_Stored_ACLs" -eq 1; then fi if test "$enable_server_Desktop_Refcount" -eq 1; then - if test "$enable_eventfd_synchronization" -gt 1; then - abort "Patchset eventfd_synchronization disabled, but server-Desktop_Refcount depends on that." - fi if test "$enable_ws2_32_WSACleanup" -gt 1; then abort "Patchset ws2_32-WSACleanup disabled, but server-Desktop_Refcount depends on that." fi - enable_eventfd_synchronization=1 enable_ws2_32_WSACleanup=1 fi @@ -1670,6 +1680,13 @@ if test "$enable_ntdll_Syscall_Emulation" -eq 1; then enable_winebuild_Fake_Dlls=1 fi +if test "$enable_ntdll_RtlCreateUserThread" -eq 1; then + if test "$enable_winebuild_Fake_Dlls" -gt 1; then + abort "Patchset winebuild-Fake_Dlls disabled, but ntdll-RtlCreateUserThread depends on that." + fi + enable_winebuild_Fake_Dlls=1 +fi + if test "$enable_ntdll_NtQueryVirtualMemory" -eq 1; then if test "$enable_ntdll_NtDevicePath" -gt 1; then abort "Patchset ntdll-NtDevicePath disabled, but ntdll-NtQueryVirtualMemory depends on that." @@ -1758,108 +1775,6 @@ if test "$enable_server_File_Permissions" -eq 1; then enable_ntdll_Junction_Points=1 fi -if test "$enable_eventfd_synchronization" -eq 1; then - if test "$enable_advapi32_Token_Integrity_Level" -gt 1; then - abort "Patchset advapi32-Token_Integrity_Level disabled, but eventfd_synchronization depends on that." - fi - if test "$enable_kernel32_K32GetPerformanceInfo" -gt 1; then - abort "Patchset kernel32-K32GetPerformanceInfo disabled, but eventfd_synchronization depends on that." - fi - if test "$enable_ntdll_Junction_Points" -gt 1; then - abort "Patchset ntdll-Junction_Points disabled, but eventfd_synchronization depends on that." - fi - if test "$enable_ntdll_RtlCreateUserThread" -gt 1; then - abort "Patchset ntdll-RtlCreateUserThread disabled, but eventfd_synchronization depends on that." - fi - if test "$enable_ntdll_SystemRoot_Symlink" -gt 1; then - abort "Patchset ntdll-SystemRoot_Symlink disabled, but eventfd_synchronization depends on that." - fi - if test "$enable_server_Realtime_Priority" -gt 1; then - abort "Patchset server-Realtime_Priority disabled, but eventfd_synchronization depends on that." - fi - if test "$enable_server_Shared_Memory" -gt 1; then - abort "Patchset server-Shared_Memory disabled, but eventfd_synchronization depends on that." - fi - if test "$enable_user32_rawinput_mouse" -gt 1; then - abort "Patchset user32-rawinput-mouse disabled, but eventfd_synchronization depends on that." - fi - if test "$enable_ws2_32_WSACleanup" -gt 1; then - abort "Patchset ws2_32-WSACleanup disabled, but eventfd_synchronization depends on that." - fi - enable_advapi32_Token_Integrity_Level=1 - enable_kernel32_K32GetPerformanceInfo=1 - enable_ntdll_Junction_Points=1 - enable_ntdll_RtlCreateUserThread=1 - enable_ntdll_SystemRoot_Symlink=1 - enable_server_Realtime_Priority=1 - enable_server_Shared_Memory=1 - enable_user32_rawinput_mouse=1 - enable_ws2_32_WSACleanup=1 -fi - -if test "$enable_server_Shared_Memory" -eq 1; then - if test "$enable_ntdll_Threading" -gt 1; then - abort "Patchset ntdll-Threading disabled, but server-Shared_Memory depends on that." - fi - if test "$enable_ntdll_ext4_case_folder" -gt 1; then - abort "Patchset ntdll-ext4-case-folder disabled, but server-Shared_Memory depends on that." - fi - if test "$enable_server_Key_State" -gt 1; then - abort "Patchset server-Key_State disabled, but server-Shared_Memory depends on that." - fi - if test "$enable_server_PeekMessage" -gt 1; then - abort "Patchset server-PeekMessage disabled, but server-Shared_Memory depends on that." - fi - if test "$enable_server_Signal_Thread" -gt 1; then - abort "Patchset server-Signal_Thread disabled, but server-Shared_Memory depends on that." - fi - if test "$enable_user32_rawinput_nolegacy" -gt 1; then - abort "Patchset user32-rawinput-nolegacy disabled, but server-Shared_Memory depends on that." - fi - enable_ntdll_Threading=1 - enable_ntdll_ext4_case_folder=1 - enable_server_Key_State=1 - enable_server_PeekMessage=1 - enable_server_Signal_Thread=1 - enable_user32_rawinput_nolegacy=1 -fi - -if test "$enable_user32_rawinput_nolegacy" -eq 1; then - if test "$enable_server_Key_State" -gt 1; then - abort "Patchset server-Key_State disabled, but user32-rawinput-nolegacy depends on that." - fi - if test "$enable_user32_rawinput_mouse" -gt 1; then - abort "Patchset user32-rawinput-mouse disabled, but user32-rawinput-nolegacy depends on that." - fi - enable_server_Key_State=1 - enable_user32_rawinput_mouse=1 -fi - -if test "$enable_user32_rawinput_mouse" -eq 1; then - if test "$enable_loader_KeyboardLayouts" -gt 1; then - abort "Patchset loader-KeyboardLayouts disabled, but user32-rawinput-mouse depends on that." - fi - if test "$enable_winex11_drv_mouse_coorrds" -gt 1; then - abort "Patchset winex11.drv-mouse-coorrds disabled, but user32-rawinput-mouse depends on that." - fi - enable_loader_KeyboardLayouts=1 - enable_winex11_drv_mouse_coorrds=1 -fi - -if test "$enable_server_Realtime_Priority" -eq 1; then - if test "$enable_ntdll_ThreadTime" -gt 1; then - abort "Patchset ntdll-ThreadTime disabled, but server-Realtime_Priority depends on that." - fi - enable_ntdll_ThreadTime=1 -fi - -if test "$enable_ntdll_RtlCreateUserThread" -eq 1; then - if test "$enable_winebuild_Fake_Dlls" -gt 1; then - abort "Patchset winebuild-Fake_Dlls disabled, but ntdll-RtlCreateUserThread depends on that." - fi - enable_winebuild_Fake_Dlls=1 -fi - if test "$enable_dxdiagn_GetChildContainer_Leaf_Nodes" -eq 1; then if test "$enable_dxdiagn_Enumerate_DirectSound" -gt 1; then abort "Patchset dxdiagn-Enumerate_DirectSound disabled, but dxdiagn-GetChildContainer_Leaf_Nodes depends on that." @@ -3132,625 +3047,6 @@ if test "$enable_dxva2_Video_Decoder" -eq 1; then ) >> "$patchlist" fi -# Patchset kernel32-K32GetPerformanceInfo -# | -# | Modified files: -# | * dlls/kernelbase/debug.c, server/process.c, server/protocol.def -# | -if test "$enable_kernel32_K32GetPerformanceInfo" -eq 1; then - patch_apply kernel32-K32GetPerformanceInfo/0001-kernel32-Make-K32GetPerformanceInfo-faster.patch - ( - printf '%s\n' '+ { "Michael Müller", "kernel32: Make K32GetPerformanceInfo faster.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset ntdll-Junction_Points -# | -# | This patchset fixes the following Wine bugs: -# | * [#12401] NET Framework 2.0, 3.0, 4.0 installers and other apps that make use of GAC API for managed assembly -# | installation on NTFS filesystems need reparse point/junction API support -# | (FSCTL_SET_REPARSE_POINT/FSCTL_GET_REPARSE_POINT) -# | * [#44948] Multiple apps (Spine (Mod starter for Gothic), MS Office 365 installer) need CreateSymbolicLinkW implementation -# | -# | Modified files: -# | * configure.ac, dlls/kernel32/path.c, dlls/ntdll/directory.c, dlls/ntdll/file.c, dlls/ntdll/tests/file.c, -# | include/Makefile.in, include/ntifs.h, include/wine/port.h, include/winternl.h, libs/port/Makefile.in, -# | libs/port/renameat2.c, server/fd.c -# | -if test "$enable_ntdll_Junction_Points" -eq 1; then - patch_apply ntdll-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch - patch_apply ntdll-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch - patch_apply ntdll-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch - patch_apply ntdll-Junction_Points/0004-ntdll-Add-a-test-for-junction-point-advertisement.patch - patch_apply ntdll-Junction_Points/0005-kernel32-ntdll-Add-support-for-deleting-junction-poi.patch - patch_apply ntdll-Junction_Points/0007-ntdll-Add-support-for-absolute-symlink-creation.patch - patch_apply ntdll-Junction_Points/0008-ntdll-Add-support-for-reading-absolute-symlinks.patch - patch_apply ntdll-Junction_Points/0009-ntdll-Add-support-for-deleting-symlinks.patch - patch_apply ntdll-Junction_Points/0010-ntdll-Add-support-for-relative-symlink-creation.patch - patch_apply ntdll-Junction_Points/0011-ntdll-Add-support-for-reading-relative-symlinks.patch - patch_apply ntdll-Junction_Points/0012-ntdll-Add-support-for-file-symlinks.patch - patch_apply ntdll-Junction_Points/0013-ntdll-Allow-creation-of-dangling-reparse-points-to-n.patch - patch_apply ntdll-Junction_Points/0014-ntdll-Correctly-report-file-symbolic-links-as-files.patch - patch_apply ntdll-Junction_Points/0015-kernel32-Set-error-code-when-attempting-to-delete-fi.patch - patch_apply ntdll-Junction_Points/0016-server-Properly-handle-file-symlink-deletion.patch - patch_apply ntdll-Junction_Points/0017-ntdll-Always-report-symbolic-links-as-containing-zer.patch - patch_apply ntdll-Junction_Points/0018-ntdll-Find-dangling-symlinks-quickly.patch - ( - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for junction point creation.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading junction points.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for deleting junction points.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add a test for junction point advertisement.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "kernel32,ntdll: Add support for deleting junction points with RemoveDirectory.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for absolute symlink creation.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading absolute symlinks.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for deleting symlinks.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for relative symlink creation.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading relative symlinks.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for file symlinks.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Allow creation of dangling reparse points to non-existent paths.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Correctly report file symbolic links as files.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "kernel32: Set error code when attempting to delete file symlinks as directories.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "server: Properly handle file symlink deletion.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Always report symbolic links as containing zero bytes.", 1 },'; - printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Find dangling symlinks quickly.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset winebuild-Fake_Dlls -# | -# | This patchset fixes the following Wine bugs: -# | * [#21232] Chromium-based browser engines (Chrome, Opera, Comodo Dragon, SRWare Iron) crash on startup unless '--no- -# | sandbox' is used (native API sandboxing/hooking scheme incompatible with Wine) -# | * [#42741] StarCraft I: 1.18 PTR fails to initialize ClientSdk.dll -# | * [#45349] Multiple applications and games crash due to missing support for 64-bit syscall thunks (StreetFighter V) -# | * [#45573] League of Legends 8.12+ fails to start a game (anticheat engine, hooking of syscall return instructions) -# | * [#45650] chromium 32-bit sandbox expects different syscall thunks depending on Windows version -# | -# | Modified files: -# | * dlls/dbghelp/cpu_i386.c, dlls/kernel32/tests/loader.c, dlls/krnl386.exe16/kernel.c, -# | dlls/krnl386.exe16/kernel16_private.h, dlls/krnl386.exe16/ne_module.c, dlls/krnl386.exe16/ne_segment.c, -# | dlls/krnl386.exe16/task.c, dlls/krnl386.exe16/thunk.c, dlls/krnl386.exe16/wowthunk.c, dlls/ntdll/actctx.c, -# | dlls/ntdll/directory.c, dlls/ntdll/loader.c, dlls/ntdll/locale.c, dlls/ntdll/ntdll_misc.h, dlls/ntdll/path.c, -# | dlls/ntdll/process.c, dlls/ntdll/signal_i386.c, dlls/ntdll/signal_x86_64.c, dlls/ntdll/tests/exception.c, -# | dlls/ntdll/thread.c, dlls/system.drv16/system.c, dlls/toolhelp.dll16/toolhelp.c, dlls/user.exe16/message.c, -# | dlls/user.exe16/user.c, dlls/user.exe16/window.c, include/winternl.h, libs/wine/loader.c, tools/winebuild/build.h, -# | tools/winebuild/import.c, tools/winebuild/parser.c, tools/winebuild/relay.c, tools/winebuild/res32.c, -# | tools/winebuild/spec16.c, tools/winebuild/spec32.c, tools/winebuild/utils.c -# | -if test "$enable_winebuild_Fake_Dlls" -eq 1; then - patch_apply winebuild-Fake_Dlls/0001-kernel32-tests-Add-basic-tests-for-fake-dlls.patch - patch_apply winebuild-Fake_Dlls/0002-krnl386.exe16-Do-not-abuse-WOW32Reserved-field-for-1.patch - patch_apply winebuild-Fake_Dlls/0003-winebuild-Generate-syscall-thunks-for-ntdll-exports.patch - patch_apply winebuild-Fake_Dlls/0004-winebuild-Use-multipass-label-system-to-generate-fak.patch - patch_apply winebuild-Fake_Dlls/0005-winebuild-Add-stub-functions-in-fake-dlls.patch - patch_apply winebuild-Fake_Dlls/0006-winebuild-Add-syscall-thunks-in-fake-dlls.patch - patch_apply winebuild-Fake_Dlls/0007-winebuild-Fix-size-of-relocation-information-in-fake.patch - patch_apply winebuild-Fake_Dlls/0008-winebuild-Try-to-make-sure-RVA-matches-between-fake-.patch - patch_apply winebuild-Fake_Dlls/0009-libs-wine-Use-same-file-alignment-for-fake-and-built.patch - patch_apply winebuild-Fake_Dlls/0010-tools-winebuild-Add-syscall-thunks-for-64-bit.patch - patch_apply winebuild-Fake_Dlls/0011-ntdll-Call-NtOpenFile-through-syscall-thunk.patch - ( - printf '%s\n' '+ { "Michael Müller", "kernel32/tests: Add basic tests for fake dlls.", 1 },'; - printf '%s\n' '+ { "Sebastian Lackner", "krnl386.exe16: Do not abuse WOW32Reserved field for 16-bit stack address.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Generate syscall thunks for ntdll exports.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Use multipass label system to generate fake dlls.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Add stub functions in fake dlls.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Add syscall thunks in fake dlls.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Fix size of relocation information in fake dlls.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Try to make sure RVA matches between fake and builtin DLLs.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "libs/wine: Use same file alignment for fake and builtin DLLs.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "tools/winebuild: Add syscall thunks for 64 bit.", 1 },'; - printf '%s\n' '+ { "Paul Gofman", "ntdll: Call NtOpenFile through syscall thunk.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset ntdll-RtlCreateUserThread -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * winebuild-Fake_Dlls -# | -# | This patchset fixes the following Wine bugs: -# | * [#45571] League of Legends 8.12+ fails to start a game (anticheat engine, hooking of NtCreateThread/Ex) -# | -# | Modified files: -# | * dlls/ntdll/ntdll.spec, dlls/ntdll/thread.c, include/winternl.h -# | -if test "$enable_ntdll_RtlCreateUserThread" -eq 1; then - patch_apply ntdll-RtlCreateUserThread/0001-ntdll-Refactor-RtlCreateUserThread-into-NtCreateThre.patch - ( - printf '%s\n' '+ { "Andrew Wesie", "ntdll: Refactor RtlCreateUserThread into NtCreateThreadEx.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset ntdll-SystemRoot_Symlink -# | -# | Modified files: -# | * dlls/ntdll/om.c -# | -if test "$enable_ntdll_SystemRoot_Symlink" -eq 1; then - patch_apply ntdll-SystemRoot_Symlink/0001-ntdll-Add-special-handling-for-SystemRoot-to-satisfy.patch - ( - printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Add special handling for \\SystemRoot to satisfy MSYS2 case-insensitive system check.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset ntdll-ThreadTime -# | -# | This patchset fixes the following Wine bugs: -# | * [#20230] Return correct values for GetThreadTimes function -# | -# | Modified files: -# | * dlls/ntdll/nt.c, dlls/ntdll/ntdll_misc.h, dlls/ntdll/process.c, dlls/ntdll/thread.c, server/protocol.def, -# | server/snapshot.c, server/thread.c, server/thread.h -# | -if test "$enable_ntdll_ThreadTime" -eq 1; then - patch_apply ntdll-ThreadTime/0001-ntdll-Return-correct-values-in-GetThreadTimes-for-al.patch - patch_apply ntdll-ThreadTime/0002-ntdll-Set-correct-thread-creation-time-for-SystemPro.patch - patch_apply ntdll-ThreadTime/0003-ntdll-Fill-process-kernel-and-user-time.patch - patch_apply ntdll-ThreadTime/0004-ntdll-Set-process-start-time.patch - patch_apply ntdll-ThreadTime/0005-ntdll-Fill-out-thread-times-in-process-enumeration.patch - patch_apply ntdll-ThreadTime/0006-ntdll-Fill-process-virtual-memory-counters-in-NtQuer.patch - ( - printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Return correct values in GetThreadTimes() for all threads.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "ntdll: Set correct thread creation time for SystemProcessInformation in NtQuerySystemInformation.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "ntdll: Fill process kernel and user time.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "ntdll: Set process start time.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "ntdll: Fill out thread times in process enumeration.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "ntdll: Fill process virtual memory counters in NtQuerySystemInformation.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset server-Realtime_Priority -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-ThreadTime -# | -# | Modified files: -# | * server/Makefile.in, server/main.c, server/scheduler.c, server/thread.c, server/thread.h -# | -if test "$enable_server_Realtime_Priority" -eq 1; then - patch_apply server-Realtime_Priority/0001-wineserver-Draft-to-implement-priority-levels-throug.patch - ( - printf '%s\n' '+ { "Joakim Hernberg", "wineserver: Draft to implement priority levels through POSIX scheduling policies on linux.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset ntdll-Threading -# | -# | Modified files: -# | * dlls/ntdll/thread.c -# | -if test "$enable_ntdll_Threading" -eq 1; then - patch_apply ntdll-Threading/0001-ntdll-Fix-race-condition-when-threads-are-killed-dur.patch - ( - printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Fix race-condition when threads are killed during shutdown.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset ntdll-ext4-case-folder -# | -# | This patchset fixes the following Wine bugs: -# | * [#47099] Support for EXT4 case folding per directory. -# | -# | Modified files: -# | * dlls/ntdll/server.c -# | -if test "$enable_ntdll_ext4_case_folder" -eq 1; then - patch_apply ntdll-ext4-case-folder/0002-ntdll-server-Mark-drive_c-as-case-insensitive-when-c.patch - ( - printf '%s\n' '+ { "Gabriel Ivăncescu", "ntdll/server: Mark drive_c as case-insensitive when created.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset server-Key_State -# | -# | This patchset fixes the following Wine bugs: -# | * [#31899] Implement locking and synchronization of key states -# | * [#35907] Fix caps lock state issues with multiple processes -# | -# | Modified files: -# | * server/queue.c -# | -if test "$enable_server_Key_State" -eq 1; then - patch_apply server-Key_State/0001-server-Introduce-a-helper-function-to-update-the-thr.patch - patch_apply server-Key_State/0002-server-Implement-locking-and-synchronization-of-keys.patch - ( - printf '%s\n' '+ { "Sebastian Lackner", "server: Introduce a helper function to update the thread_input key state.", 1 },'; - printf '%s\n' '+ { "Sebastian Lackner", "server: Implement locking and synchronization of keystate buffer.", 3 },'; - ) >> "$patchlist" -fi - -# Patchset server-PeekMessage -# | -# | This patchset fixes the following Wine bugs: -# | * [#28884] GetMessage should remove already seen messages with higher priority -# | -# | Modified files: -# | * dlls/user32/tests/msg.c, server/queue.c -# | -if test "$enable_server_PeekMessage" -eq 1; then - patch_apply server-PeekMessage/0001-server-Fix-handling-of-GetMessage-after-previous-Pee.patch - ( - printf '%s\n' '+ { "Sebastian Lackner", "server: Fix handling of GetMessage after previous PeekMessage call.", 3 },'; - ) >> "$patchlist" -fi - -# Patchset server-Signal_Thread -# | -# | Modified files: -# | * server/thread.c, server/thread.h -# | -if test "$enable_server_Signal_Thread" -eq 1; then - patch_apply server-Signal_Thread/0001-server-Do-not-signal-thread-until-it-is-really-gone.patch - ( - printf '%s\n' '+ { "Sebastian Lackner", "server: Do not signal violently terminated threads until they are really gone.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset loader-KeyboardLayouts -# | -# | This patchset fixes the following Wine bugs: -# | * [#47439] loader: Add Keyboard Layouts registry enteries. -# | -# | Modified files: -# | * dlls/user32/driver.c, dlls/user32/tests/input.c, loader/wine.inf.in -# | -if test "$enable_loader_KeyboardLayouts" -eq 1; then - patch_apply loader-KeyboardLayouts/0001-loader-Add-Keyboard-Layouts-registry-enteries.patch - patch_apply loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch - ( - printf '%s\n' '+ { "Alistair Leslie-Hughes", "loader: Add Keyboard Layouts registry enteries.", 1 },'; - printf '%s\n' '+ { "Alistair Leslie-Hughes", "user32: Improve GetKeyboardLayoutList.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset winex11.drv-mouse-coorrds -# | -# | This patchset fixes the following Wine bugs: -# | * [#46309] winex11.drv: Use root-relative coordinates for events, if possible. -# | -# | Modified files: -# | * dlls/winex11.drv/mouse.c -# | -if test "$enable_winex11_drv_mouse_coorrds" -eq 1; then - patch_apply winex11.drv-mouse-coorrds/0001-winex11.drv-mouse-Use-root-relative-coordinates-for-ev.patch - ( - printf '%s\n' '+ { "Gabriel Ivăncescu", "winex11.drv/mouse: Use root-relative coordinates for events, if possible.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset user32-rawinput-mouse -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * loader-KeyboardLayouts, winex11.drv-mouse-coorrds -# | -# | This patchset fixes the following Wine bugs: -# | * [#42631] Mouse drift, jump or don't react to small slow movements in Unity-engine games and Fallout 4 (partly fixed in -# | Unity games, have walkaround in Fallout4 ) -# | * [#42675] Overwatch: Phantom mouse input / view pulled up to ceiling -# | -# | Modified files: -# | * dlls/dinput/device_private.h, dlls/dinput/dinput_main.c, dlls/dinput/mouse.c, dlls/dinput8/tests/device.c, -# | dlls/user32/input.c, dlls/user32/rawinput.c, dlls/user32/tests/input.c, dlls/user32/user32.spec, -# | dlls/wineandroid.drv/keyboard.c, dlls/wineandroid.drv/window.c, dlls/winemac.drv/ime.c, dlls/winemac.drv/keyboard.c, -# | dlls/winemac.drv/mouse.c, dlls/winex11.drv/event.c, dlls/winex11.drv/keyboard.c, dlls/winex11.drv/mouse.c, -# | dlls/winex11.drv/x11drv.h, dlls/winex11.drv/x11drv_main.c, include/winuser.h, server/protocol.def, server/queue.c -# | -if test "$enable_user32_rawinput_mouse" -eq 1; then - patch_apply user32-rawinput-mouse/0001-user32-tests-Add-rawinput-test-for-ClipCursor-intera.patch - patch_apply user32-rawinput-mouse/0002-user32-tests-Add-rawinput-test-for-cross-thread-inte.patch - patch_apply user32-rawinput-mouse/0003-user32-tests-Add-rawinput-test-for-cross-process-int.patch - patch_apply user32-rawinput-mouse/0004-server-Add-send_hardware_message-flags-for-rawinput-.patch - patch_apply user32-rawinput-mouse/0005-server-Broadcast-rawinput-message-if-request-flag-is.patch - patch_apply user32-rawinput-mouse/0006-user32-Add-__wine_send_input-flags-to-hint-raw-input.patch - patch_apply user32-rawinput-mouse/0007-winex11.drv-Advertise-XInput2-version-2.1-support.patch - patch_apply user32-rawinput-mouse/0008-winex11.drv-Keep-track-of-pointer-and-device-button-.patch - patch_apply user32-rawinput-mouse/0009-winex11.drv-Listen-to-RawMotion-and-RawButton-events.patch - patch_apply user32-rawinput-mouse/0010-user32-Implement-GetRegisteredRawInputDevices.patch - patch_apply user32-rawinput-mouse/0011-dinput8-Add-support-for-dinput-devices-that-use-raw-.patch - patch_apply user32-rawinput-mouse/0012-dinput8-Use-raw-input-interface-for-dinput8-mouse-de.patch - patch_apply user32-rawinput-mouse/0013-dinput-Fix-rawinput-events-sequence-number.patch - ( - printf '%s\n' '+ { "Rémi Bernon", "user32/tests: Add rawinput test for ClipCursor interactions.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "user32/tests: Add rawinput test for cross-thread interactions.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "user32/tests: Add rawinput test for cross-process interactions.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "server: Add send_hardware_message flags for rawinput translation.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "server: Broadcast rawinput message if request flag is SEND_HWMSG_RAWINPUT.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "user32: Add __wine_send_input flags to hint raw input translation.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "winex11.drv: Advertise XInput2 version 2.1 support.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "winex11.drv: Keep track of pointer and device button mappings.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "winex11.drv: Listen to RawMotion and RawButton* events in the desktop thread.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "user32: Implement GetRegisteredRawInputDevices.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "dinput8: Add support for dinput devices that use raw input interface.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "dinput8: Use raw input interface for dinput8 mouse device.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "dinput: Fix rawinput events sequence number.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset user32-rawinput-nolegacy -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * server-Key_State, loader-KeyboardLayouts, winex11.drv-mouse-coorrds, user32-rawinput-mouse -# | -# | Modified files: -# | * dlls/dinput/dinput_main.c, dlls/dinput8/tests/device.c, dlls/user32/rawinput.c, server/queue.c -# | -if test "$enable_user32_rawinput_nolegacy" -eq 1; then - patch_apply user32-rawinput-nolegacy/0001-dinput8-tests-Add-test-for-DISCL_EXCLUSIVE-flag-inte.patch - patch_apply user32-rawinput-nolegacy/0002-user32-Add-support-for-RIDEV_NOLEGACY-flag-in-Regist.patch - patch_apply user32-rawinput-nolegacy/0003-dinput-Set-RIDEV_INPUTSINK-flag-only-when-DISCL_BACK.patch - patch_apply user32-rawinput-nolegacy/0004-dinput-Set-correct-rawinput-flags-for-DISCL_EXCLUSIV.patch - patch_apply user32-rawinput-nolegacy/0005-server-Update-desktop-cursor-pos-even-if-RIDEV_NOLEG.patch - patch_apply user32-rawinput-nolegacy/0006-server-Also-update-the-key-state-if-RIDEV_NOLEGACY-i.patch - ( - printf '%s\n' '+ { "Rémi Bernon", "dinput8/tests: Add test for DISCL_EXCLUSIVE flag interaction with rawinput.", 1 },'; - printf '%s\n' '+ { "Derek Lesho", "user32: Add support for RIDEV_NOLEGACY flag in RegisterRawInputDevices.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "dinput: Set RIDEV_INPUTSINK flag only when DISCL_BACKGROUND is requested.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "dinput: Set correct rawinput flags for DISCL_EXCLUSIVE.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "server: Update desktop cursor pos even if RIDEV_NOLEGACY flag is set.", 1 },'; - printf '%s\n' '+ { "Rémi Bernon", "server: Also update the key state if RIDEV_NOLEGACY is used.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset server-Shared_Memory -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-Threading, ntdll-ext4-case-folder, server-Key_State, server-PeekMessage, server-Signal_Thread, loader- -# | KeyboardLayouts, winex11.drv-mouse-coorrds, user32-rawinput-mouse, user32-rawinput-nolegacy -# | -# | Modified files: -# | * dlls/ntdll/ntdll_misc.h, dlls/ntdll/server.c, dlls/ntdll/thread.c, dlls/ntdll/virtual.c, dlls/user32/focus.c, -# | dlls/user32/input.c, dlls/user32/message.c, dlls/user32/user_private.h, include/wine/server.h, include/winternl.h, -# | server/fd.c, server/file.h, server/main.c, server/mapping.c, server/protocol.def, server/queue.c, server/thread.c, -# | server/thread.h -# | -if test "$enable_server_Shared_Memory" -eq 1; then - patch_apply server-Shared_Memory/0001-ntdll-Implement-virtual_map_shared_memory.patch - patch_apply server-Shared_Memory/0002-server-Implement-support-for-global-and-local-shared.patch - patch_apply server-Shared_Memory/0003-user32-Get-rid-of-wineserver-call-for-GetInputState.patch - patch_apply server-Shared_Memory/0004-user32-Avoid-unnecessary-wineserver-calls-in-PeekMes.patch - patch_apply server-Shared_Memory/0005-user32-Get-rid-of-wineserver-call-for-GetLastInputIn.patch - patch_apply server-Shared_Memory/0006-ntdll-Only-enable-wineserver-shared-memory-communica.patch - patch_apply server-Shared_Memory/0007-server-Store-a-list-of-associated-queues-for-each-th.patch - patch_apply server-Shared_Memory/0008-user32-Get-rid-of-wineserver-call-for-GetActiveWindo.patch - ( - printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Implement virtual_map_shared_memory.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "server: Implement support for global and local shared memory blocks based on memfd.", 1 },'; - printf '%s\n' '+ { "Sebastian Lackner", "user32: Get rid of wineserver call for GetInputState.", 1 },'; - printf '%s\n' '+ { "Sebastian Lackner", "user32: Avoid unnecessary wineserver calls in PeekMessage/GetMessage.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "user32: Get rid of wineserver call for GetLastInputInfo.", 1 },'; - printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Only enable wineserver shared memory communication when a special environment variable is set.", 1 },'; - printf '%s\n' '+ { "Sebastian Lackner", "server: Store a list of associated queues for each thread input.", 1 },'; - printf '%s\n' '+ { "Sebastian Lackner", "user32: Get rid of wineserver call for GetActiveWindow, GetFocus, GetCapture.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset ws2_32-WSACleanup -# | -# | This patchset fixes the following Wine bugs: -# | * [#18670] Properly close sockets when WSACleanup is called -# | -# | Modified files: -# | * dlls/ntdll/ntdll.spec, dlls/ntdll/server.c, dlls/ws2_32/socket.c, dlls/ws2_32/tests/sock.c, include/wine/server.h, -# | server/protocol.def, server/sock.c -# | -if test "$enable_ws2_32_WSACleanup" -eq 1; then - patch_apply ws2_32-WSACleanup/0001-ws2_32-Proper-WSACleanup-implementation-using-winese.patch - patch_apply ws2_32-WSACleanup/0002-ws2_32-Invalidate-client-side-file-descriptor-cache-.patch - ( - printf '%s\n' '+ { "Matt Durgavich", "ws2_32: Proper WSACleanup implementation using wineserver function.", 2 },'; - printf '%s\n' '+ { "Sebastian Lackner", "ws2_32: Invalidate client-side file descriptor cache in WSACleanup.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset eventfd_synchronization -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * Staging, advapi32-CreateRestrictedToken, advapi32-Token_Integrity_Level, kernel32-K32GetPerformanceInfo, ntdll- -# | Junction_Points, winebuild-Fake_Dlls, ntdll-RtlCreateUserThread, ntdll-SystemRoot_Symlink, ntdll-ThreadTime, server- -# | Realtime_Priority, ntdll-Threading, ntdll-ext4-case-folder, server-Key_State, server-PeekMessage, server-Signal_Thread, -# | loader-KeyboardLayouts, winex11.drv-mouse-coorrds, user32-rawinput-mouse, user32-rawinput-nolegacy, server- -# | Shared_Memory, ws2_32-WSACleanup -# | -# | This patchset fixes the following Wine bugs: -# | * [#36692] Many multi-threaded applications have poor performance due to heavy use of synchronization primitives -# | -# | Modified files: -# | * README.esync, configure.ac, dlls/kernel32/tests/sync.c, dlls/ntdll/Makefile.in, dlls/ntdll/critsection.c, -# | dlls/ntdll/esync.c, dlls/ntdll/esync.h, dlls/ntdll/loader.c, dlls/ntdll/ntdll.spec, dlls/ntdll/ntdll_misc.h, -# | dlls/ntdll/om.c, dlls/ntdll/server.c, dlls/ntdll/sync.c, dlls/ntdll/thread.c, dlls/rpcrt4/rpc_server.c, -# | dlls/user32/hook.c, dlls/wineandroid.drv/window.c, dlls/winemac.drv/macdrv_main.c, dlls/winex11.drv/x11drv_main.c, -# | server/Makefile.in, server/async.c, server/atom.c, server/change.c, server/clipboard.c, server/completion.c, -# | server/console.c, server/debugger.c, server/device.c, server/directory.c, server/esync.c, server/esync.h, -# | server/event.c, server/fd.c, server/file.c, server/file.h, server/handle.c, server/hook.c, server/mailslot.c, -# | server/main.c, server/mapping.c, server/mutex.c, server/named_pipe.c, server/object.h, server/process.c, -# | server/process.h, server/protocol.def, server/queue.c, server/registry.c, server/request.c, server/semaphore.c, -# | server/serial.c, server/signal.c, server/snapshot.c, server/sock.c, server/symlink.c, server/thread.c, server/thread.h, -# | server/timer.c, server/token.c, server/winstation.c -# | -if test "$enable_eventfd_synchronization" -eq 1; then - patch_apply eventfd_synchronization/0001-configure-Check-for-sys-eventfd.h-ppoll-and-shm_open.patch - patch_apply eventfd_synchronization/0002-server-Create-server-objects-for-eventfd-based-synch.patch - patch_apply eventfd_synchronization/0003-ntdll-Create-eventfd-based-objects-for-semaphores.patch - patch_apply eventfd_synchronization/0004-ntdll-Store-esync-objects-locally.patch - patch_apply eventfd_synchronization/0005-ntdll-Implement-NtReleaseSemaphore.patch - patch_apply eventfd_synchronization/0006-ntdll-Close-esync-objects.patch - patch_apply eventfd_synchronization/0007-ntdll-Implement-waiting-on-esync-objects.patch - patch_apply eventfd_synchronization/0008-ntdll-Create-esync-objects-for-events.patch - patch_apply eventfd_synchronization/0009-ntdll-Implement-NtSetEvent.patch - patch_apply eventfd_synchronization/0010-ntdll-Implement-NtResetEvent.patch - patch_apply eventfd_synchronization/0011-ntdll-Implement-NtPulseEvent.patch - patch_apply eventfd_synchronization/0012-ntdll-Implement-waiting-on-events.patch - patch_apply eventfd_synchronization/0013-server-Add-an-object-operation-to-grab-the-esync-fil.patch - patch_apply eventfd_synchronization/0014-server-Add-a-request-to-get-the-eventfd-file-descrip.patch - patch_apply eventfd_synchronization/0015-server-Create-eventfd-file-descriptors-for-process-o.patch - patch_apply eventfd_synchronization/0016-ntdll-server-Implement-waiting-on-server-bound-objec.patch - patch_apply eventfd_synchronization/0017-server-Create-eventfd-file-descriptors-for-event-obj.patch - patch_apply eventfd_synchronization/0018-server-Allow-re-setting-esync-events-on-the-server-s.patch - patch_apply eventfd_synchronization/0019-ntdll-Try-again-if-poll-returns-EINTR.patch - patch_apply eventfd_synchronization/0020-server-Create-eventfd-file-descriptors-for-thread-ob.patch - patch_apply eventfd_synchronization/0021-rpcrt4-Avoid-closing-the-server-thread-handle-while-.patch - patch_apply eventfd_synchronization/0022-server-Create-eventfd-file-descriptors-for-message-q.patch - patch_apply eventfd_synchronization/0023-ntdll-wineandroid.drv-winemac.drv-winex11.drv-Store-.patch - patch_apply eventfd_synchronization/0024-server-ntdll-Also-wait-on-the-queue-fd-when-waiting-.patch - patch_apply eventfd_synchronization/0025-server-Create-eventfd-descriptors-for-device-manager.patch - patch_apply eventfd_synchronization/0026-ntdll-Create-esync-objects-for-mutexes.patch - patch_apply eventfd_synchronization/0027-ntdll-Implement-NtReleaseMutant.patch - patch_apply eventfd_synchronization/0028-ntdll-Implement-waiting-on-mutexes.patch - patch_apply eventfd_synchronization/0029-ntdll-Implement-wait-all.patch - patch_apply eventfd_synchronization/0030-esync-Add-a-README.patch - patch_apply eventfd_synchronization/0031-ntdll-Implement-NtSignalAndWaitForSingleObject.patch - patch_apply eventfd_synchronization/0032-server-ntdll-Also-store-the-esync-type-in-the-server.patch - patch_apply eventfd_synchronization/0033-ntdll-server-Implement-NtOpenSemaphore.patch - patch_apply eventfd_synchronization/0034-ntdll-Implement-NtOpenEvent.patch - patch_apply eventfd_synchronization/0035-ntdll-Implement-NtOpenMutant.patch - patch_apply eventfd_synchronization/0036-ntdll-Record-the-current-count-of-a-semaphore-locall.patch - patch_apply eventfd_synchronization/0037-server-Implement-esync_map_access.patch - patch_apply eventfd_synchronization/0038-server-Alter-conditions-in-is_queue_hung.patch - patch_apply eventfd_synchronization/0039-ntdll-server-Allow-DuplicateHandle-to-succeed-by-imp.patch - patch_apply eventfd_synchronization/0040-server-Create-eventfd-descriptors-for-timers.patch - patch_apply eventfd_synchronization/0041-server-Allocate-shared-memory-segments-for-semaphore.patch - patch_apply eventfd_synchronization/0042-ntdll-Use-shared-memory-segments-to-store-semaphore-.patch - patch_apply eventfd_synchronization/0043-ntdll-Lock-creating-and-opening-objects-with-volatil.patch - patch_apply eventfd_synchronization/0044-server-ntdll-Pass-the-shared-memory-index-back-from-.patch - patch_apply eventfd_synchronization/0045-server-ntdll-Implement-alertable-waits.patch - patch_apply eventfd_synchronization/0046-esync-Update-README.patch - patch_apply eventfd_synchronization/0047-kernel32-tests-Mark-some-existing-tests-as-failing-u.patch - patch_apply eventfd_synchronization/0048-kernel32-tests-Add-some-semaphore-tests.patch - patch_apply eventfd_synchronization/0049-kernel32-tests-Add-some-event-tests.patch - patch_apply eventfd_synchronization/0050-kernel32-tests-Add-some-mutex-tests.patch - patch_apply eventfd_synchronization/0051-kernel32-tests-Add-some-tests-for-wait-timeouts.patch - patch_apply eventfd_synchronization/0052-ntdll-Go-through-the-server-if-necessary-when-perfor.patch - patch_apply eventfd_synchronization/0053-server-Create-eventfd-descriptors-for-console_input_.patch - patch_apply eventfd_synchronization/0054-server-Alter-conditions-in-is_queue_hung-again.patch - patch_apply eventfd_synchronization/0055-ntdll-Let-the-server-know-when-we-are-doing-a-messag.patch - patch_apply eventfd_synchronization/0056-ntdll-Avoid-server_select-when-waiting-for-critical-.patch - patch_apply eventfd_synchronization/0057-user32-Remove-hooks-that-time-out.patch - patch_apply eventfd_synchronization/0058-server-Don-t-check-for-a-hung-queue-when-sending-low.patch - patch_apply eventfd_synchronization/0059-kernel32-tests-Zigzag-test.patch - patch_apply eventfd_synchronization/0060-server-Try-to-remove-a-pre-xisting-shm-file.patch - patch_apply eventfd_synchronization/0061-ntdll-Implement-NtQuerySemaphore.patch - patch_apply eventfd_synchronization/0062-ntdll-Implement-NtQueryEvent.patch - patch_apply eventfd_synchronization/0063-ntdll-Implement-NtQueryMutant.patch - patch_apply eventfd_synchronization/0064-server-Create-eventfd-descriptors-for-pseudo-fd-obje.patch - patch_apply eventfd_synchronization/0065-ntdll-Cache-the-esync-struct-itself-instead-of-a-poi.patch - patch_apply eventfd_synchronization/0066-esync-Update-README.patch - patch_apply eventfd_synchronization/0067-esync-Add-note-about-file-limits-not-being-raised-wh.patch - patch_apply eventfd_synchronization/0068-ntdll-Ignore-pseudo-handles.patch - patch_apply eventfd_synchronization/0069-ntdll-Try-to-avoid-poll-for-uncontended-objects.patch - patch_apply eventfd_synchronization/0070-ntdll-Store-an-event-s-signaled-state-internally.patch - patch_apply eventfd_synchronization/0071-ntdll-Fix-growing-the-shm_addrs-array.patch - patch_apply eventfd_synchronization/0072-server-Update-the-shared-memory-state-when-re-settin.patch - patch_apply eventfd_synchronization/0073-ntdll-Fix-a-missing-break-statement.patch - patch_apply eventfd_synchronization/0074-ntdll-server-Abort-if-esync-is-enabled-for-the-serve.patch - patch_apply eventfd_synchronization/0075-esync-Update-README.patch - patch_apply eventfd_synchronization/0076-ntdll-Correctly-allocate-the-esync-handle-cache.patch - patch_apply eventfd_synchronization/0077-ntdll-server-Specify-EFD_SEMAPHORE-on-the-server-sid.patch - patch_apply eventfd_synchronization/0078-ntdll-server-Initialize-the-shared-memory-portion-on.patch - patch_apply eventfd_synchronization/0079-ntdll-server-Revert-to-old-implementation-of-hung-qu.patch - patch_apply eventfd_synchronization/0080-ntdll-Fix-a-couple-of-misplaced-global-variables.patch - patch_apply eventfd_synchronization/0081-ntdll-Yield-during-PulseEvent.patch - patch_apply eventfd_synchronization/0082-ntdll-server-Check-the-value-of-WINEESYNC-instead-of.patch - patch_apply eventfd_synchronization/0083-esync-Update-README.patch - patch_apply eventfd_synchronization/0084-server-Use-default_fd_get_esync_fd-for-directory-cha.patch - patch_apply eventfd_synchronization/0085-server-Only-signal-the-APC-fd-for-user-APCs.patch - patch_apply eventfd_synchronization/0086-ntdll-Check-the-APC-fd-first.patch - patch_apply eventfd_synchronization/0087-ntdll-esync-Lock-accessing-the-shm_addrs-array.patch - patch_apply eventfd_synchronization/0088-ntdll-Get-rid-of-the-per-event-spinlock-for-auto-res.patch - patch_apply eventfd_synchronization/0089-ntdll-server-Abandon-esync-mutexes-on-thread-exit.patch - ( - printf '%s\n' '+ { "Zebediah Figura", "configure: Check for sys/eventfd.h, ppoll(), and shm_open().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Create server objects for eventfd-based synchronization objects.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Create eventfd-based objects for semaphores.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Store esync objects locally.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtReleaseSemaphore().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Close esync objects.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement waiting on esync objects.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Create esync objects for events.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtSetEvent().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtResetEvent().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtPulseEvent().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement waiting on events.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Add an object operation to grab the esync file descriptor.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Add a request to get the eventfd file descriptor associated with a waitable handle.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Create eventfd file descriptors for process objects.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll, server: Implement waiting on server-bound objects.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Create eventfd file descriptors for event objects.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Allow (re)setting esync events on the server side.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Try again if poll() returns EINTR.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Create eventfd file descriptors for thread objects.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "rpcrt4: Avoid closing the server thread handle while it is being waited on.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Create eventfd file descriptors for message queues.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll, wineandroid.drv, winemac.drv, winex11.drv: Store the thread'\''s queue fd in ntdll.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server, ntdll: Also wait on the queue fd when waiting for driver events.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Create eventfd descriptors for device manager objects.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Create esync objects for mutexes.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtReleaseMutant().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement waiting on mutexes.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement wait-all.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "esync: Add a README.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtSignalAndWaitForSingleObject().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server, ntdll: Also store the esync type in the server.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll, server: Implement NtOpenSemaphore().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtOpenEvent().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtOpenMutant().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Record the current count of a semaphore locally.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Implement esync_map_access().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Alter conditions in is_queue_hung().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll, server: Allow DuplicateHandle() to succeed by implementing esync_get_esync_fd().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Create eventfd descriptors for timers.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Allocate shared memory segments for semaphores and mutexes.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Use shared memory segments to store semaphore and mutex state.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Lock creating and opening objects with volatile state.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server, ntdll: Pass the shared memory index back from get_esync_fd.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server, ntdll: Implement alertable waits.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "esync: Update README.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "kernel32/tests: Mark some existing tests as failing under esync.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "kernel32/tests: Add some semaphore tests.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "kernel32/tests: Add some event tests.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "kernel32/tests: Add some mutex tests.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "kernel32/tests: Add some tests for wait timeouts.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Go through the server if necessary when performing event/semaphore/mutex ops.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Create eventfd descriptors for console_input_events objects.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Alter conditions in is_queue_hung(), again.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Let the server know when we are doing a message wait.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Avoid server_select() when waiting for critical sections.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "user32: Remove hooks that time out.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Don'\''t check for a hung queue when sending low-level hooks.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "kernel32/tests: Zigzag test.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "=?UTF-8?q?server:=20Try=20to=20remove=20a=20pre?= =?UTF-8?q?=C3=ABxisting=20shm=20file.?=.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtQuerySemaphore().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtQueryEvent().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Implement NtQueryMutant().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Create eventfd descriptors for pseudo-fd objects and use them for named pipes.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Cache the esync struct itself instead of a pointer to it.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "esync: Update README.", 1 },'; - printf '%s\n' '+ { "Mathieu Comandon", "esync: Add note about file limits not being raised when using systemd.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Ignore pseudo-handles.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Try to avoid poll() for uncontended objects.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Store an event'\''s signaled state internally.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Fix growing the shm_addrs array.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Update the shared memory state when (re)setting an event.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Fix a missing break statement.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll, server: Abort if esync is enabled for the server but not the client, and vice versa.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "esync: Update README.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Correctly allocate the esync handle cache.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll, server: Specify EFD_SEMAPHORE on the server side.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll, server: Initialize the shared memory portion on the server side.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll, server: Revert to old implementation of hung queue detection.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Fix a couple of misplaced global variables.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Yield during PulseEvent().", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll, server: Check the value of WINEESYNC instead of just the presence.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "esync: Update README.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Create esync file descriptors for true file objects and use them for directory change notifications.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "server: Only signal the APC fd for user APCs.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Check the APC fd first.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll/esync: Lock accessing the shm_addrs array.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll: Get rid of the per-event spinlock for auto-reset events.", 1 },'; - printf '%s\n' '+ { "Zebediah Figura", "ntdll, server: Abandon esync mutexes on thread exit.", 1 },'; - ) >> "$patchlist" -fi - # Patchset explorer-Video_Registry_Key # | # | Modified files: @@ -3926,6 +3222,58 @@ if test "$enable_iphlpapi_System_Ping" -eq 1; then ) >> "$patchlist" fi +# Patchset ntdll-Junction_Points +# | +# | This patchset fixes the following Wine bugs: +# | * [#12401] NET Framework 2.0, 3.0, 4.0 installers and other apps that make use of GAC API for managed assembly +# | installation on NTFS filesystems need reparse point/junction API support +# | (FSCTL_SET_REPARSE_POINT/FSCTL_GET_REPARSE_POINT) +# | * [#44948] Multiple apps (Spine (Mod starter for Gothic), MS Office 365 installer) need CreateSymbolicLinkW implementation +# | +# | Modified files: +# | * configure.ac, dlls/kernel32/path.c, dlls/ntdll/directory.c, dlls/ntdll/file.c, dlls/ntdll/tests/file.c, +# | include/Makefile.in, include/ntifs.h, include/wine/port.h, include/winternl.h, libs/port/Makefile.in, +# | libs/port/renameat2.c, server/fd.c +# | +if test "$enable_ntdll_Junction_Points" -eq 1; then + patch_apply ntdll-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch + patch_apply ntdll-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch + patch_apply ntdll-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch + patch_apply ntdll-Junction_Points/0004-ntdll-Add-a-test-for-junction-point-advertisement.patch + patch_apply ntdll-Junction_Points/0005-kernel32-ntdll-Add-support-for-deleting-junction-poi.patch + patch_apply ntdll-Junction_Points/0007-ntdll-Add-support-for-absolute-symlink-creation.patch + patch_apply ntdll-Junction_Points/0008-ntdll-Add-support-for-reading-absolute-symlinks.patch + patch_apply ntdll-Junction_Points/0009-ntdll-Add-support-for-deleting-symlinks.patch + patch_apply ntdll-Junction_Points/0010-ntdll-Add-support-for-relative-symlink-creation.patch + patch_apply ntdll-Junction_Points/0011-ntdll-Add-support-for-reading-relative-symlinks.patch + patch_apply ntdll-Junction_Points/0012-ntdll-Add-support-for-file-symlinks.patch + patch_apply ntdll-Junction_Points/0013-ntdll-Allow-creation-of-dangling-reparse-points-to-n.patch + patch_apply ntdll-Junction_Points/0014-ntdll-Correctly-report-file-symbolic-links-as-files.patch + patch_apply ntdll-Junction_Points/0015-kernel32-Set-error-code-when-attempting-to-delete-fi.patch + patch_apply ntdll-Junction_Points/0016-server-Properly-handle-file-symlink-deletion.patch + patch_apply ntdll-Junction_Points/0017-ntdll-Always-report-symbolic-links-as-containing-zer.patch + patch_apply ntdll-Junction_Points/0018-ntdll-Find-dangling-symlinks-quickly.patch + ( + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for junction point creation.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading junction points.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for deleting junction points.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add a test for junction point advertisement.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "kernel32,ntdll: Add support for deleting junction points with RemoveDirectory.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for absolute symlink creation.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading absolute symlinks.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for deleting symlinks.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for relative symlink creation.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading relative symlinks.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for file symlinks.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Allow creation of dangling reparse points to non-existent paths.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Correctly report file symbolic links as files.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "kernel32: Set error code when attempting to delete file symlinks as directories.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "server: Properly handle file symlink deletion.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Always report symbolic links as containing zero bytes.", 1 },'; + printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Find dangling symlinks quickly.", 1 },'; + ) >> "$patchlist" +fi + # Patchset server-File_Permissions # | # | This patchset has the following (direct or indirect) dependencies: @@ -4035,6 +3383,18 @@ if test "$enable_kernel32_Job_Tests" -eq 1; then ) >> "$patchlist" fi +# Patchset kernel32-K32GetPerformanceInfo +# | +# | Modified files: +# | * dlls/kernelbase/debug.c, server/process.c, server/protocol.def +# | +if test "$enable_kernel32_K32GetPerformanceInfo" -eq 1; then + patch_apply kernel32-K32GetPerformanceInfo/0001-kernel32-Make-K32GetPerformanceInfo-faster.patch + ( + printf '%s\n' '+ { "Michael Müller", "kernel32: Make K32GetPerformanceInfo faster.", 1 },'; + ) >> "$patchlist" +fi + # Patchset kernel32-Processor_Group # | # | This patchset has the following (direct or indirect) dependencies: @@ -4103,6 +3463,23 @@ if test "$enable_krnl386_exe16_Invalid_Console_Handles" -eq 1; then ) >> "$patchlist" fi +# Patchset loader-KeyboardLayouts +# | +# | This patchset fixes the following Wine bugs: +# | * [#47439] loader: Add Keyboard Layouts registry enteries. +# | +# | Modified files: +# | * dlls/user32/driver.c, dlls/user32/tests/input.c, loader/wine.inf.in +# | +if test "$enable_loader_KeyboardLayouts" -eq 1; then + patch_apply loader-KeyboardLayouts/0001-loader-Add-Keyboard-Layouts-registry-enteries.patch + patch_apply loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch + ( + printf '%s\n' '+ { "Alistair Leslie-Hughes", "loader: Add Keyboard Layouts registry enteries.", 1 },'; + printf '%s\n' '+ { "Alistair Leslie-Hughes", "user32: Improve GetKeyboardLayoutList.", 1 },'; + ) >> "$patchlist" +fi + # Patchset mmsystem.dll16-MIDIHDR_Refcount # | # | This patchset fixes the following Wine bugs: @@ -4246,6 +3623,32 @@ if test "$enable_ntdll_Activation_Context" -eq 1; then ) >> "$patchlist" fi +# Patchset ntdll-ThreadTime +# | +# | This patchset fixes the following Wine bugs: +# | * [#20230] Return correct values for GetThreadTimes function +# | +# | Modified files: +# | * dlls/ntdll/nt.c, dlls/ntdll/ntdll_misc.h, dlls/ntdll/process.c, dlls/ntdll/thread.c, server/protocol.def, +# | server/snapshot.c, server/thread.c, server/thread.h +# | +if test "$enable_ntdll_ThreadTime" -eq 1; then + patch_apply ntdll-ThreadTime/0001-ntdll-Return-correct-values-in-GetThreadTimes-for-al.patch + patch_apply ntdll-ThreadTime/0002-ntdll-Set-correct-thread-creation-time-for-SystemPro.patch + patch_apply ntdll-ThreadTime/0003-ntdll-Fill-process-kernel-and-user-time.patch + patch_apply ntdll-ThreadTime/0004-ntdll-Set-process-start-time.patch + patch_apply ntdll-ThreadTime/0005-ntdll-Fill-out-thread-times-in-process-enumeration.patch + patch_apply ntdll-ThreadTime/0006-ntdll-Fill-process-virtual-memory-counters-in-NtQuer.patch + ( + printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Return correct values in GetThreadTimes() for all threads.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "ntdll: Set correct thread creation time for SystemProcessInformation in NtQuerySystemInformation.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "ntdll: Fill process kernel and user time.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "ntdll: Set process start time.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "ntdll: Fill out thread times in process enumeration.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "ntdll: Fill process virtual memory counters in NtQuerySystemInformation.", 1 },'; + ) >> "$patchlist" +fi + # Patchset ntdll-ApiSetMap # | # | This patchset has the following (direct or indirect) dependencies: @@ -4582,6 +3985,54 @@ if test "$enable_ntdll_NtAccessCheck" -eq 1; then ) >> "$patchlist" fi +# Patchset winebuild-Fake_Dlls +# | +# | This patchset fixes the following Wine bugs: +# | * [#21232] Chromium-based browser engines (Chrome, Opera, Comodo Dragon, SRWare Iron) crash on startup unless '--no- +# | sandbox' is used (native API sandboxing/hooking scheme incompatible with Wine) +# | * [#42741] StarCraft I: 1.18 PTR fails to initialize ClientSdk.dll +# | * [#45349] Multiple applications and games crash due to missing support for 64-bit syscall thunks (StreetFighter V) +# | * [#45573] League of Legends 8.12+ fails to start a game (anticheat engine, hooking of syscall return instructions) +# | * [#45650] chromium 32-bit sandbox expects different syscall thunks depending on Windows version +# | +# | Modified files: +# | * dlls/dbghelp/cpu_i386.c, dlls/kernel32/tests/loader.c, dlls/krnl386.exe16/kernel.c, +# | dlls/krnl386.exe16/kernel16_private.h, dlls/krnl386.exe16/ne_module.c, dlls/krnl386.exe16/ne_segment.c, +# | dlls/krnl386.exe16/task.c, dlls/krnl386.exe16/thunk.c, dlls/krnl386.exe16/wowthunk.c, dlls/ntdll/actctx.c, +# | dlls/ntdll/directory.c, dlls/ntdll/loader.c, dlls/ntdll/locale.c, dlls/ntdll/ntdll_misc.h, dlls/ntdll/path.c, +# | dlls/ntdll/process.c, dlls/ntdll/signal_i386.c, dlls/ntdll/signal_x86_64.c, dlls/ntdll/tests/exception.c, +# | dlls/ntdll/thread.c, dlls/system.drv16/system.c, dlls/toolhelp.dll16/toolhelp.c, dlls/user.exe16/message.c, +# | dlls/user.exe16/user.c, dlls/user.exe16/window.c, include/winternl.h, libs/wine/loader.c, programs/wineboot/wineboot.c, +# | tools/winebuild/build.h, tools/winebuild/import.c, tools/winebuild/parser.c, tools/winebuild/relay.c, +# | tools/winebuild/res32.c, tools/winebuild/spec16.c, tools/winebuild/spec32.c, tools/winebuild/utils.c +# | +if test "$enable_winebuild_Fake_Dlls" -eq 1; then + patch_apply winebuild-Fake_Dlls/0001-kernel32-tests-Add-basic-tests-for-fake-dlls.patch + patch_apply winebuild-Fake_Dlls/0002-krnl386.exe16-Do-not-abuse-WOW32Reserved-field-for-1.patch + patch_apply winebuild-Fake_Dlls/0003-winebuild-Generate-syscall-thunks-for-ntdll-exports.patch + patch_apply winebuild-Fake_Dlls/0004-winebuild-Use-multipass-label-system-to-generate-fak.patch + patch_apply winebuild-Fake_Dlls/0005-winebuild-Add-stub-functions-in-fake-dlls.patch + patch_apply winebuild-Fake_Dlls/0006-winebuild-Add-syscall-thunks-in-fake-dlls.patch + patch_apply winebuild-Fake_Dlls/0007-winebuild-Fix-size-of-relocation-information-in-fake.patch + patch_apply winebuild-Fake_Dlls/0008-winebuild-Try-to-make-sure-RVA-matches-between-fake-.patch + patch_apply winebuild-Fake_Dlls/0009-libs-wine-Use-same-file-alignment-for-fake-and-built.patch + patch_apply winebuild-Fake_Dlls/0010-tools-winebuild-Add-syscall-thunks-for-64-bit.patch + patch_apply winebuild-Fake_Dlls/0011-ntdll-Call-NtOpenFile-through-syscall-thunk.patch + ( + printf '%s\n' '+ { "Michael Müller", "kernel32/tests: Add basic tests for fake dlls.", 1 },'; + printf '%s\n' '+ { "Sebastian Lackner", "krnl386.exe16: Do not abuse WOW32Reserved field for 16-bit stack address.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "winebuild: Generate syscall thunks for ntdll exports.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "winebuild: Use multipass label system to generate fake dlls.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "winebuild: Add stub functions in fake dlls.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "winebuild: Add syscall thunks in fake dlls.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "winebuild: Fix size of relocation information in fake dlls.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "winebuild: Try to make sure RVA matches between fake and builtin DLLs.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "libs/wine: Use same file alignment for fake and builtin DLLs.", 1 },'; + printf '%s\n' '+ { "Michael Müller", "tools/winebuild: Add syscall thunks for 64 bit.", 1 },'; + printf '%s\n' '+ { "Paul Gofman", "ntdll: Call NtOpenFile through syscall thunk.", 1 },'; + ) >> "$patchlist" +fi + # Patchset ntdll-NtContinue # | # | This patchset has the following (direct or indirect) dependencies: @@ -4723,6 +4174,24 @@ if test "$enable_ntdll_ProcessQuotaLimits" -eq 1; then ) >> "$patchlist" fi +# Patchset ntdll-RtlCreateUserThread +# | +# | This patchset has the following (direct or indirect) dependencies: +# | * winebuild-Fake_Dlls +# | +# | This patchset fixes the following Wine bugs: +# | * [#45571] League of Legends 8.12+ fails to start a game (anticheat engine, hooking of NtCreateThread/Ex) +# | +# | Modified files: +# | * dlls/ntdll/ntdll.spec, dlls/ntdll/thread.c, include/winternl.h +# | +if test "$enable_ntdll_RtlCreateUserThread" -eq 1; then + patch_apply ntdll-RtlCreateUserThread/0001-ntdll-Refactor-RtlCreateUserThread-into-NtCreateThre.patch + ( + printf '%s\n' '+ { "Andrew Wesie", "ntdll: Refactor RtlCreateUserThread into NtCreateThreadEx.", 1 },'; + ) >> "$patchlist" +fi + # Patchset ntdll-RtlQueryPackageIdentity # | # | Modified files: @@ -4866,6 +4335,18 @@ if test "$enable_ntdll_SystemModuleInformation" -eq 1; then ) >> "$patchlist" fi +# Patchset ntdll-SystemRoot_Symlink +# | +# | Modified files: +# | * dlls/ntdll/om.c +# | +if test "$enable_ntdll_SystemRoot_Symlink" -eq 1; then + patch_apply ntdll-SystemRoot_Symlink/0001-ntdll-Add-special-handling-for-SystemRoot-to-satisfy.patch + ( + printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Add special handling for \\SystemRoot to satisfy MSYS2 case-insensitive system check.", 1 },'; + ) >> "$patchlist" +fi + # Patchset ntdll-ThreadHideFromDebugger # | # | This patchset fixes the following Wine bugs: @@ -4881,6 +4362,18 @@ if test "$enable_ntdll_ThreadHideFromDebugger" -eq 1; then ) >> "$patchlist" fi +# Patchset ntdll-Threading +# | +# | Modified files: +# | * dlls/ntdll/thread.c +# | +if test "$enable_ntdll_Threading" -eq 1; then + patch_apply ntdll-Threading/0001-ntdll-Fix-race-condition-when-threads-are-killed-dur.patch + ( + printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Fix race-condition when threads are killed during shutdown.", 1 },'; + ) >> "$patchlist" +fi + # Patchset ntdll-Zero_mod_name # | # | Modified files: @@ -4910,6 +4403,21 @@ if test "$enable_ntdll_aarch_TEB" -eq 1; then ) >> "$patchlist" fi +# Patchset ntdll-ext4-case-folder +# | +# | This patchset fixes the following Wine bugs: +# | * [#47099] Support for EXT4 case folding per directory. +# | +# | Modified files: +# | * dlls/ntdll/unix/server.c +# | +if test "$enable_ntdll_ext4_case_folder" -eq 1; then + patch_apply ntdll-ext4-case-folder/0002-ntdll-server-Mark-drive_c-as-case-insensitive-when-c.patch + ( + printf '%s\n' '+ { "Gabriel Ivăncescu", "ntdll/server: Mark drive_c as case-insensitive when created.", 1 },'; + ) >> "$patchlist" +fi + # Patchset ntdll-set_full_cpu_context # | # | Modified files: @@ -5192,14 +4700,29 @@ if test "$enable_riched20_IText_Interface" -eq 1; then ) >> "$patchlist" fi +# Patchset ws2_32-WSACleanup +# | +# | This patchset fixes the following Wine bugs: +# | * [#18670] Properly close sockets when WSACleanup is called +# | +# | Modified files: +# | * dlls/ntdll/ntdll.spec, dlls/ntdll/server.c, dlls/ntdll/unix/loader.c, dlls/ntdll/unix/server.c, +# | dlls/ntdll/unix/unix_private.h, dlls/ntdll/unixlib.h, dlls/ws2_32/socket.c, dlls/ws2_32/tests/sock.c, +# | include/wine/server.h, server/protocol.def, server/sock.c +# | +if test "$enable_ws2_32_WSACleanup" -eq 1; then + patch_apply ws2_32-WSACleanup/0001-ws2_32-Proper-WSACleanup-implementation-using-winese.patch + patch_apply ws2_32-WSACleanup/0002-ws2_32-Invalidate-client-side-file-descriptor-cache-.patch + ( + printf '%s\n' '+ { "Matt Durgavich", "ws2_32: Proper WSACleanup implementation using wineserver function.", 2 },'; + printf '%s\n' '+ { "Sebastian Lackner", "ws2_32: Invalidate client-side file descriptor cache in WSACleanup.", 1 },'; + ) >> "$patchlist" +fi + # Patchset server-Desktop_Refcount # | # | This patchset has the following (direct or indirect) dependencies: -# | * Staging, advapi32-CreateRestrictedToken, advapi32-Token_Integrity_Level, kernel32-K32GetPerformanceInfo, ntdll- -# | Junction_Points, winebuild-Fake_Dlls, ntdll-RtlCreateUserThread, ntdll-SystemRoot_Symlink, ntdll-ThreadTime, server- -# | Realtime_Priority, ntdll-Threading, ntdll-ext4-case-folder, server-Key_State, server-PeekMessage, server-Signal_Thread, -# | loader-KeyboardLayouts, winex11.drv-mouse-coorrds, user32-rawinput-mouse, user32-rawinput-nolegacy, server- -# | Shared_Memory, ws2_32-WSACleanup, eventfd_synchronization +# | * ws2_32-WSACleanup # | # | This patchset fixes the following Wine bugs: # | * [#46967] GOG Galaxy doesn't run in virtual desktop. @@ -5207,11 +4730,10 @@ fi # | Modified files: # | * dlls/user32/tests/winstation.c, programs/explorer/desktop.c, server/async.c, server/atom.c, server/change.c, # | server/clipboard.c, server/completion.c, server/console.c, server/debugger.c, server/device.c, server/directory.c, -# | server/esync.c, server/event.c, server/fd.c, server/file.c, server/handle.c, server/handle.h, server/hook.c, -# | server/mailslot.c, server/mapping.c, server/mutex.c, server/named_pipe.c, server/object.c, server/object.h, -# | server/process.c, server/queue.c, server/registry.c, server/request.c, server/semaphore.c, server/serial.c, -# | server/signal.c, server/snapshot.c, server/sock.c, server/symlink.c, server/thread.c, server/timer.c, server/token.c, -# | server/winstation.c +# | server/event.c, server/fd.c, server/file.c, server/handle.c, server/handle.h, server/hook.c, server/mailslot.c, +# | server/mapping.c, server/mutex.c, server/named_pipe.c, server/object.c, server/object.h, server/process.c, +# | server/queue.c, server/registry.c, server/request.c, server/semaphore.c, server/serial.c, server/signal.c, +# | server/snapshot.c, server/sock.c, server/symlink.c, server/thread.c, server/timer.c, server/token.c, server/winstation.c # | if test "$enable_server_Desktop_Refcount" -eq 1; then patch_apply server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch @@ -5284,11 +4806,25 @@ if test "$enable_server_Inherited_ACLs" -eq 1; then ) >> "$patchlist" fi -# Patchset server-Object_Types +# Patchset server-Key_State # | -# | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-Threading, ntdll-ext4-case-folder, server-Key_State, server-PeekMessage, server-Signal_Thread, loader- -# | KeyboardLayouts, winex11.drv-mouse-coorrds, user32-rawinput-mouse, user32-rawinput-nolegacy, server-Shared_Memory +# | This patchset fixes the following Wine bugs: +# | * [#31899] Implement locking and synchronization of key states +# | * [#35907] Fix caps lock state issues with multiple processes +# | +# | Modified files: +# | * server/queue.c +# | +if test "$enable_server_Key_State" -eq 1; then + patch_apply server-Key_State/0001-server-Introduce-a-helper-function-to-update-the-thr.patch + patch_apply server-Key_State/0002-server-Implement-locking-and-synchronization-of-keys.patch + ( + printf '%s\n' '+ { "Sebastian Lackner", "server: Introduce a helper function to update the thread_input key state.", 1 },'; + printf '%s\n' '+ { "Sebastian Lackner", "server: Implement locking and synchronization of keystate buffer.", 3 },'; + ) >> "$patchlist" +fi + +# Patchset server-Object_Types # | # | This patchset fixes the following Wine bugs: # | * [#44629] Process Hacker can't enumerate handles @@ -5320,6 +4856,36 @@ if test "$enable_server_Object_Types" -eq 1; then ) >> "$patchlist" fi +# Patchset server-PeekMessage +# | +# | This patchset fixes the following Wine bugs: +# | * [#28884] GetMessage should remove already seen messages with higher priority +# | +# | Modified files: +# | * dlls/user32/tests/msg.c, server/queue.c +# | +if test "$enable_server_PeekMessage" -eq 1; then + patch_apply server-PeekMessage/0001-server-Fix-handling-of-GetMessage-after-previous-Pee.patch + ( + printf '%s\n' '+ { "Sebastian Lackner", "server: Fix handling of GetMessage after previous PeekMessage call.", 3 },'; + ) >> "$patchlist" +fi + +# Patchset server-Realtime_Priority +# | +# | This patchset has the following (direct or indirect) dependencies: +# | * ntdll-ThreadTime +# | +# | Modified files: +# | * server/Makefile.in, server/main.c, server/scheduler.c, server/thread.c, server/thread.h +# | +if test "$enable_server_Realtime_Priority" -eq 1; then + patch_apply server-Realtime_Priority/0001-wineserver-Draft-to-implement-priority-levels-throug.patch + ( + printf '%s\n' '+ { "Joakim Hernberg", "wineserver: Draft to implement priority levels through POSIX scheduling policies on linux.", 1 },'; + ) >> "$patchlist" +fi + # Patchset server-Registry_Notifications # | # | Modified files: @@ -5334,6 +4900,18 @@ if test "$enable_server_Registry_Notifications" -eq 1; then ) >> "$patchlist" fi +# Patchset server-Signal_Thread +# | +# | Modified files: +# | * server/thread.c, server/thread.h +# | +if test "$enable_server_Signal_Thread" -eq 1; then + patch_apply server-Signal_Thread/0001-server-Do-not-signal-thread-until-it-is-really-gone.patch + ( + printf '%s\n' '+ { "Sebastian Lackner", "server: Do not signal violently terminated threads until they are really gone.", 1 },'; + ) >> "$patchlist" +fi + # Patchset setupapi-DiskSpaceList # | # | Modified files: @@ -6009,6 +5587,94 @@ if test "$enable_user32_msgbox_Support_WM_COPY_mesg" -eq 1; then ) >> "$patchlist" fi +# Patchset winex11.drv-mouse-coorrds +# | +# | This patchset fixes the following Wine bugs: +# | * [#46309] winex11.drv: Use root-relative coordinates for events, if possible. +# | +# | Modified files: +# | * dlls/winex11.drv/mouse.c +# | +if test "$enable_winex11_drv_mouse_coorrds" -eq 1; then + patch_apply winex11.drv-mouse-coorrds/0001-winex11.drv-mouse-Use-root-relative-coordinates-for-ev.patch + ( + printf '%s\n' '+ { "Gabriel Ivăncescu", "winex11.drv/mouse: Use root-relative coordinates for events, if possible.", 1 },'; + ) >> "$patchlist" +fi + +# Patchset user32-rawinput-mouse +# | +# | This patchset has the following (direct or indirect) dependencies: +# | * loader-KeyboardLayouts, winex11.drv-mouse-coorrds +# | +# | This patchset fixes the following Wine bugs: +# | * [#42631] Mouse drift, jump or don't react to small slow movements in Unity-engine games and Fallout 4 (partly fixed in +# | Unity games, have walkaround in Fallout4 ) +# | * [#42675] Overwatch: Phantom mouse input / view pulled up to ceiling +# | +# | Modified files: +# | * dlls/dinput/device_private.h, dlls/dinput/dinput_main.c, dlls/dinput/mouse.c, dlls/dinput8/tests/device.c, +# | dlls/user32/input.c, dlls/user32/rawinput.c, dlls/user32/tests/input.c, dlls/user32/user32.spec, +# | dlls/wineandroid.drv/keyboard.c, dlls/wineandroid.drv/window.c, dlls/winemac.drv/ime.c, dlls/winemac.drv/keyboard.c, +# | dlls/winemac.drv/mouse.c, dlls/winex11.drv/event.c, dlls/winex11.drv/keyboard.c, dlls/winex11.drv/mouse.c, +# | dlls/winex11.drv/x11drv.h, dlls/winex11.drv/x11drv_main.c, include/winuser.h, server/protocol.def, server/queue.c +# | +if test "$enable_user32_rawinput_mouse" -eq 1; then + patch_apply user32-rawinput-mouse/0001-user32-tests-Add-rawinput-test-for-ClipCursor-intera.patch + patch_apply user32-rawinput-mouse/0002-user32-tests-Add-rawinput-test-for-cross-thread-inte.patch + patch_apply user32-rawinput-mouse/0003-user32-tests-Add-rawinput-test-for-cross-process-int.patch + patch_apply user32-rawinput-mouse/0004-server-Add-send_hardware_message-flags-for-rawinput-.patch + patch_apply user32-rawinput-mouse/0005-server-Broadcast-rawinput-message-if-request-flag-is.patch + patch_apply user32-rawinput-mouse/0006-user32-Add-__wine_send_input-flags-to-hint-raw-input.patch + patch_apply user32-rawinput-mouse/0007-winex11.drv-Advertise-XInput2-version-2.1-support.patch + patch_apply user32-rawinput-mouse/0008-winex11.drv-Keep-track-of-pointer-and-device-button-.patch + patch_apply user32-rawinput-mouse/0009-winex11.drv-Listen-to-RawMotion-and-RawButton-events.patch + patch_apply user32-rawinput-mouse/0010-user32-Implement-GetRegisteredRawInputDevices.patch + patch_apply user32-rawinput-mouse/0011-dinput8-Add-support-for-dinput-devices-that-use-raw-.patch + patch_apply user32-rawinput-mouse/0012-dinput8-Use-raw-input-interface-for-dinput8-mouse-de.patch + patch_apply user32-rawinput-mouse/0013-dinput-Fix-rawinput-events-sequence-number.patch + ( + printf '%s\n' '+ { "Rémi Bernon", "user32/tests: Add rawinput test for ClipCursor interactions.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "user32/tests: Add rawinput test for cross-thread interactions.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "user32/tests: Add rawinput test for cross-process interactions.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "server: Add send_hardware_message flags for rawinput translation.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "server: Broadcast rawinput message if request flag is SEND_HWMSG_RAWINPUT.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "user32: Add __wine_send_input flags to hint raw input translation.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "winex11.drv: Advertise XInput2 version 2.1 support.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "winex11.drv: Keep track of pointer and device button mappings.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "winex11.drv: Listen to RawMotion and RawButton* events in the desktop thread.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "user32: Implement GetRegisteredRawInputDevices.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "dinput8: Add support for dinput devices that use raw input interface.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "dinput8: Use raw input interface for dinput8 mouse device.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "dinput: Fix rawinput events sequence number.", 1 },'; + ) >> "$patchlist" +fi + +# Patchset user32-rawinput-nolegacy +# | +# | This patchset has the following (direct or indirect) dependencies: +# | * server-Key_State, loader-KeyboardLayouts, winex11.drv-mouse-coorrds, user32-rawinput-mouse +# | +# | Modified files: +# | * dlls/dinput/dinput_main.c, dlls/dinput8/tests/device.c, dlls/user32/rawinput.c, server/queue.c +# | +if test "$enable_user32_rawinput_nolegacy" -eq 1; then + patch_apply user32-rawinput-nolegacy/0001-dinput8-tests-Add-test-for-DISCL_EXCLUSIVE-flag-inte.patch + patch_apply user32-rawinput-nolegacy/0002-user32-Add-support-for-RIDEV_NOLEGACY-flag-in-Regist.patch + patch_apply user32-rawinput-nolegacy/0003-dinput-Set-RIDEV_INPUTSINK-flag-only-when-DISCL_BACK.patch + patch_apply user32-rawinput-nolegacy/0004-dinput-Set-correct-rawinput-flags-for-DISCL_EXCLUSIV.patch + patch_apply user32-rawinput-nolegacy/0005-server-Update-desktop-cursor-pos-even-if-RIDEV_NOLEG.patch + patch_apply user32-rawinput-nolegacy/0006-server-Also-update-the-key-state-if-RIDEV_NOLEGACY-i.patch + ( + printf '%s\n' '+ { "Rémi Bernon", "dinput8/tests: Add test for DISCL_EXCLUSIVE flag interaction with rawinput.", 1 },'; + printf '%s\n' '+ { "Derek Lesho", "user32: Add support for RIDEV_NOLEGACY flag in RegisterRawInputDevices.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "dinput: Set RIDEV_INPUTSINK flag only when DISCL_BACKGROUND is requested.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "dinput: Set correct rawinput flags for DISCL_EXCLUSIVE.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "server: Update desktop cursor pos even if RIDEV_NOLEGACY flag is set.", 1 },'; + printf '%s\n' '+ { "Rémi Bernon", "server: Also update the key state if RIDEV_NOLEGACY is used.", 1 },'; + ) >> "$patchlist" +fi + # Patchset user32-rawinput-hid # | # | This patchset has the following (direct or indirect) dependencies: @@ -6969,11 +6635,7 @@ fi # Patchset ws2_32-TransmitFile # | # | This patchset has the following (direct or indirect) dependencies: -# | * Staging, advapi32-CreateRestrictedToken, advapi32-Token_Integrity_Level, kernel32-K32GetPerformanceInfo, ntdll- -# | Junction_Points, winebuild-Fake_Dlls, ntdll-RtlCreateUserThread, ntdll-SystemRoot_Symlink, ntdll-ThreadTime, server- -# | Realtime_Priority, ntdll-Threading, ntdll-ext4-case-folder, server-Key_State, server-PeekMessage, server-Signal_Thread, -# | loader-KeyboardLayouts, winex11.drv-mouse-coorrds, user32-rawinput-mouse, user32-rawinput-nolegacy, server- -# | Shared_Memory, ws2_32-WSACleanup, eventfd_synchronization, server-Desktop_Refcount +# | * ws2_32-WSACleanup, server-Desktop_Refcount # | # | Modified files: # | * dlls/ws2_32/socket.c, dlls/ws2_32/tests/sock.c, include/winsock.h, server/protocol.def, server/sock.c diff --git a/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch b/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch index 69c400d5..645514f5 100644 --- a/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch +++ b/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch @@ -1,4 +1,4 @@ -From 600ea7fc2412aab4970a3c7c54cd00c801a79f7f Mon Sep 17 00:00:00 2001 +From adbfc52aca7f4bd1b103dde52f0beb3e6ea52c14 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Fri, 4 Dec 2015 10:36:47 +0100 Subject: [PATCH] server: Introduce a new alloc_handle object callback. (v2) @@ -14,7 +14,6 @@ Signed-off-by: Sebastian Lackner server/debugger.c | 2 ++ server/device.c | 4 ++++ server/directory.c | 2 ++ - server/esync.c | 1 + server/event.c | 2 ++ server/fd.c | 4 ++++ server/file.c | 1 + @@ -40,13 +39,13 @@ Signed-off-by: Sebastian Lackner server/timer.c | 1 + server/token.c | 1 + server/winstation.c | 2 ++ - 35 files changed, 79 insertions(+), 4 deletions(-) + 34 files changed, 78 insertions(+), 4 deletions(-) diff --git a/server/async.c b/server/async.c -index cadd3563232..4d39c4896f6 100644 +index 03994e8fac2..9feafd01847 100644 --- a/server/async.c +++ b/server/async.c -@@ -82,6 +82,7 @@ static const struct object_ops async_ops = +@@ -81,6 +81,7 @@ static const struct object_ops async_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -54,7 +53,7 @@ index cadd3563232..4d39c4896f6 100644 no_close_handle, /* close_handle */ async_destroy /* destroy */ }; -@@ -496,6 +497,7 @@ static const struct object_ops iosb_ops = +@@ -494,6 +495,7 @@ static const struct object_ops iosb_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -63,10 +62,10 @@ index cadd3563232..4d39c4896f6 100644 iosb_destroy /* destroy */ }; diff --git a/server/atom.c b/server/atom.c -index a3b0d83f68d..96717a154f0 100644 +index 57aff7b8918..04e301b0bc9 100644 --- a/server/atom.c +++ b/server/atom.c -@@ -92,6 +92,7 @@ static const struct object_ops atom_table_ops = +@@ -91,6 +91,7 @@ static const struct object_ops atom_table_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -75,10 +74,10 @@ index a3b0d83f68d..96717a154f0 100644 atom_table_destroy /* destroy */ }; diff --git a/server/change.c b/server/change.c -index 9f07be705d7..1c384310d59 100644 +index a8f3329c722..d0744e72f07 100644 --- a/server/change.c +++ b/server/change.c -@@ -127,6 +127,7 @@ static const struct object_ops dir_ops = +@@ -126,6 +126,7 @@ static const struct object_ops dir_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -87,10 +86,10 @@ index 9f07be705d7..1c384310d59 100644 dir_destroy /* destroy */ }; diff --git a/server/clipboard.c b/server/clipboard.c -index 673aabbd080..588875439a5 100644 +index e6884dd75fa..dcc92507bc1 100644 --- a/server/clipboard.c +++ b/server/clipboard.c -@@ -89,6 +89,7 @@ static const struct object_ops clipboard_ops = +@@ -88,6 +88,7 @@ static const struct object_ops clipboard_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -99,10 +98,10 @@ index 673aabbd080..588875439a5 100644 clipboard_destroy /* destroy */ }; diff --git a/server/completion.c b/server/completion.c -index 4da2ed844aa..857662afb29 100644 +index db04727b93b..e72a155eeeb 100644 --- a/server/completion.c +++ b/server/completion.c -@@ -76,6 +76,7 @@ static const struct object_ops completion_ops = +@@ -75,6 +75,7 @@ static const struct object_ops completion_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -111,10 +110,10 @@ index 4da2ed844aa..857662afb29 100644 completion_destroy /* destroy */ }; diff --git a/server/console.c b/server/console.c -index fdf3d3c6889..806293a546a 100644 +index 302be6a1c1a..26545baea47 100644 --- a/server/console.c +++ b/server/console.c -@@ -97,6 +97,7 @@ static const struct object_ops console_input_ops = +@@ -95,6 +95,7 @@ static const struct object_ops console_input_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -122,7 +121,7 @@ index fdf3d3c6889..806293a546a 100644 no_close_handle, /* close_handle */ console_input_destroy /* destroy */ }; -@@ -135,6 +136,7 @@ static const struct object_ops console_input_events_ops = +@@ -130,6 +131,7 @@ static const struct object_ops console_input_events_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -130,7 +129,7 @@ index fdf3d3c6889..806293a546a 100644 no_close_handle, /* close_handle */ console_input_events_destroy /* destroy */ }; -@@ -197,6 +199,7 @@ static const struct object_ops screen_buffer_ops = +@@ -191,6 +193,7 @@ static const struct object_ops screen_buffer_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -139,10 +138,10 @@ index fdf3d3c6889..806293a546a 100644 screen_buffer_destroy /* destroy */ }; diff --git a/server/debugger.c b/server/debugger.c -index ad581be8458..0bab7485101 100644 +index 401ce36a47a..b7746d55c0e 100644 --- a/server/debugger.c +++ b/server/debugger.c -@@ -85,6 +85,7 @@ static const struct object_ops debug_event_ops = +@@ -84,6 +84,7 @@ static const struct object_ops debug_event_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -150,7 +149,7 @@ index ad581be8458..0bab7485101 100644 no_close_handle, /* close_handle */ debug_event_destroy /* destroy */ }; -@@ -113,6 +114,7 @@ static const struct object_ops debug_ctx_ops = +@@ -111,6 +112,7 @@ static const struct object_ops debug_ctx_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -159,10 +158,10 @@ index ad581be8458..0bab7485101 100644 debug_ctx_destroy /* destroy */ }; diff --git a/server/device.c b/server/device.c -index 17260340aad..3380d00fd54 100644 +index 01e08f295f7..90150e1b251 100644 --- a/server/device.c +++ b/server/device.c -@@ -81,6 +81,7 @@ static const struct object_ops irp_call_ops = +@@ -79,6 +79,7 @@ static const struct object_ops irp_call_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -170,7 +169,7 @@ index 17260340aad..3380d00fd54 100644 no_close_handle, /* close_handle */ irp_call_destroy /* destroy */ }; -@@ -123,6 +124,7 @@ static const struct object_ops device_manager_ops = +@@ -118,6 +119,7 @@ static const struct object_ops device_manager_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -178,7 +177,7 @@ index 17260340aad..3380d00fd54 100644 no_close_handle, /* close_handle */ device_manager_destroy /* destroy */ }; -@@ -167,6 +169,7 @@ static const struct object_ops device_ops = +@@ -161,6 +163,7 @@ static const struct object_ops device_ops = default_unlink_name, /* unlink_name */ device_open_file, /* open_file */ device_get_kernel_obj_list, /* get_kernel_obj_list */ @@ -186,7 +185,7 @@ index 17260340aad..3380d00fd54 100644 no_close_handle, /* close_handle */ device_destroy /* destroy */ }; -@@ -217,6 +220,7 @@ static const struct object_ops device_file_ops = +@@ -210,6 +213,7 @@ static const struct object_ops device_file_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ device_file_get_kernel_obj_list, /* get_kernel_obj_list */ @@ -195,10 +194,10 @@ index 17260340aad..3380d00fd54 100644 device_file_destroy /* destroy */ }; diff --git a/server/directory.c b/server/directory.c -index 8083c686e11..a1e631d435f 100644 +index 74cbb3ca974..0092b37b0be 100644 --- a/server/directory.c +++ b/server/directory.c -@@ -69,6 +69,7 @@ static const struct object_ops object_type_ops = +@@ -68,6 +68,7 @@ static const struct object_ops object_type_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -206,7 +205,7 @@ index 8083c686e11..a1e631d435f 100644 no_close_handle, /* close_handle */ no_destroy /* destroy */ }; -@@ -106,6 +107,7 @@ static const struct object_ops directory_ops = +@@ -104,6 +105,7 @@ static const struct object_ops directory_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -214,31 +213,19 @@ index 8083c686e11..a1e631d435f 100644 no_close_handle, /* close_handle */ directory_destroy /* destroy */ }; -diff --git a/server/esync.c b/server/esync.c -index 1b035bdb066..4563b97573a 100644 ---- a/server/esync.c -+++ b/server/esync.c -@@ -140,6 +140,7 @@ const struct object_ops esync_ops = - default_unlink_name, /* unlink_name */ - no_open_file, /* open_file */ - no_kernel_obj_list, /* get_kernel_obj_list */ -+ no_alloc_handle, /* alloc_handle */ - no_close_handle, /* close_handle */ - esync_destroy /* destroy */ - }; diff --git a/server/event.c b/server/event.c -index 79287e7edc0..ad8fddbfade 100644 +index d339d85aa45..a78d73d9e78 100644 --- a/server/event.c +++ b/server/event.c -@@ -76,6 +76,7 @@ static const struct object_ops event_ops = +@@ -71,6 +71,7 @@ static const struct object_ops event_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ event_get_kernel_obj_list, /* get_kernel_obj_list */ + no_alloc_handle, /* alloc_handle */ no_close_handle, /* close_handle */ - event_destroy /* destroy */ + no_destroy /* destroy */ }; -@@ -111,6 +112,7 @@ static const struct object_ops keyed_event_ops = +@@ -105,6 +106,7 @@ static const struct object_ops keyed_event_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -247,10 +234,10 @@ index 79287e7edc0..ad8fddbfade 100644 no_destroy /* destroy */ }; diff --git a/server/fd.c b/server/fd.c -index 34e925f0ed7..6a539a282d7 100644 +index 06d1d81bdb0..81089321e53 100644 --- a/server/fd.c +++ b/server/fd.c -@@ -226,6 +226,7 @@ static const struct object_ops fd_ops = +@@ -220,6 +220,7 @@ static const struct object_ops fd_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -258,7 +245,7 @@ index 34e925f0ed7..6a539a282d7 100644 no_close_handle, /* close_handle */ fd_destroy /* destroy */ }; -@@ -267,6 +268,7 @@ static const struct object_ops device_ops = +@@ -260,6 +261,7 @@ static const struct object_ops device_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -266,7 +253,7 @@ index 34e925f0ed7..6a539a282d7 100644 no_close_handle, /* close_handle */ device_destroy /* destroy */ }; -@@ -307,6 +309,7 @@ static const struct object_ops inode_ops = +@@ -299,6 +301,7 @@ static const struct object_ops inode_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -274,7 +261,7 @@ index 34e925f0ed7..6a539a282d7 100644 no_close_handle, /* close_handle */ inode_destroy /* destroy */ }; -@@ -349,6 +352,7 @@ static const struct object_ops file_lock_ops = +@@ -340,6 +343,7 @@ static const struct object_ops file_lock_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -283,10 +270,10 @@ index 34e925f0ed7..6a539a282d7 100644 no_destroy /* destroy */ }; diff --git a/server/file.c b/server/file.c -index 8ab254d1abf..7d36ad8e1fb 100644 +index bce202138e0..d4697c953ac 100644 --- a/server/file.c +++ b/server/file.c -@@ -98,6 +98,7 @@ static const struct object_ops file_ops = +@@ -97,6 +97,7 @@ static const struct object_ops file_ops = NULL, /* unlink_name */ file_open_file, /* open_file */ file_get_kernel_obj_list, /* get_kernel_obj_list */ @@ -295,10 +282,10 @@ index 8ab254d1abf..7d36ad8e1fb 100644 file_destroy /* destroy */ }; diff --git a/server/handle.c b/server/handle.c -index 6ca4489a828..879098aee85 100644 +index a2a8bb5479c..47378259df4 100644 --- a/server/handle.c +++ b/server/handle.c -@@ -135,6 +135,7 @@ static const struct object_ops handle_table_ops = +@@ -134,6 +134,7 @@ static const struct object_ops handle_table_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -306,7 +293,7 @@ index 6ca4489a828..879098aee85 100644 no_close_handle, /* close_handle */ handle_table_destroy /* destroy */ }; -@@ -234,7 +235,7 @@ static int grow_handle_table( struct handle_table *table ) +@@ -233,7 +234,7 @@ static int grow_handle_table( struct handle_table *table ) } /* allocate the first free entry in the handle table */ @@ -315,7 +302,7 @@ index 6ca4489a828..879098aee85 100644 { struct handle_entry *entry = table->entries + table->free; int i; -@@ -250,6 +251,10 @@ static obj_handle_t alloc_entry( struct handle_table *table, void *obj, unsigned +@@ -249,6 +250,10 @@ static obj_handle_t alloc_entry( struct handle_table *table, void *obj, unsigned table->free = i + 1; entry->ptr = grab_object_for_handle( obj ); entry->access = access; @@ -326,7 +313,7 @@ index 6ca4489a828..879098aee85 100644 return index_to_handle(i); } -@@ -375,7 +380,11 @@ struct handle_table *copy_handle_table( struct process *process, struct process +@@ -374,7 +379,11 @@ struct handle_table *copy_handle_table( struct process *process, struct process for (i = 0; i <= table->last; i++, ptr++) { if (!ptr->ptr) continue; @@ -340,10 +327,10 @@ index 6ca4489a828..879098aee85 100644 } } diff --git a/server/hook.c b/server/hook.c -index f5d7639fd74..22b14828977 100644 +index ec6be582482..c2a26eb4dff 100644 --- a/server/hook.c +++ b/server/hook.c -@@ -93,6 +93,7 @@ static const struct object_ops hook_table_ops = +@@ -92,6 +92,7 @@ static const struct object_ops hook_table_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -352,10 +339,10 @@ index f5d7639fd74..22b14828977 100644 hook_table_destroy /* destroy */ }; diff --git a/server/mailslot.c b/server/mailslot.c -index 3523e18d8f6..f3e69f0b34f 100644 +index 781e6f3141a..6f0321393e2 100644 --- a/server/mailslot.c +++ b/server/mailslot.c -@@ -90,6 +90,7 @@ static const struct object_ops mailslot_ops = +@@ -89,6 +89,7 @@ static const struct object_ops mailslot_ops = default_unlink_name, /* unlink_name */ mailslot_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -363,7 +350,7 @@ index 3523e18d8f6..f3e69f0b34f 100644 fd_close_handle, /* close_handle */ mailslot_destroy /* destroy */ }; -@@ -148,6 +149,7 @@ static const struct object_ops mail_writer_ops = +@@ -146,6 +147,7 @@ static const struct object_ops mail_writer_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -371,7 +358,7 @@ index 3523e18d8f6..f3e69f0b34f 100644 fd_close_handle, /* close_handle */ mail_writer_destroy /* destroy */ }; -@@ -207,6 +209,7 @@ static const struct object_ops mailslot_device_ops = +@@ -204,6 +206,7 @@ static const struct object_ops mailslot_device_ops = default_unlink_name, /* unlink_name */ mailslot_device_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -380,10 +367,10 @@ index 3523e18d8f6..f3e69f0b34f 100644 mailslot_device_destroy /* destroy */ }; diff --git a/server/mapping.c b/server/mapping.c -index b19403b18f9..a882d0cda00 100644 +index 0941dd87c05..42c207b3367 100644 --- a/server/mapping.c +++ b/server/mapping.c -@@ -103,6 +103,7 @@ static const struct object_ops ranges_ops = +@@ -79,6 +79,7 @@ static const struct object_ops ranges_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -391,7 +378,7 @@ index b19403b18f9..a882d0cda00 100644 no_close_handle, /* close_handle */ ranges_destroy /* destroy */ }; -@@ -139,6 +140,7 @@ static const struct object_ops shared_map_ops = +@@ -114,6 +115,7 @@ static const struct object_ops shared_map_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -399,7 +386,7 @@ index b19403b18f9..a882d0cda00 100644 no_close_handle, /* close_handle */ shared_map_destroy /* destroy */ }; -@@ -196,6 +198,7 @@ static const struct object_ops mapping_ops = +@@ -171,6 +173,7 @@ static const struct object_ops mapping_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -408,10 +395,10 @@ index b19403b18f9..a882d0cda00 100644 mapping_destroy /* destroy */ }; diff --git a/server/mutex.c b/server/mutex.c -index f5f969b3d6e..a4ab6bdb3df 100644 +index 8a8f7248eae..3754c35acbb 100644 --- a/server/mutex.c +++ b/server/mutex.c -@@ -73,6 +73,7 @@ static const struct object_ops mutex_ops = +@@ -72,6 +72,7 @@ static const struct object_ops mutex_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -420,10 +407,10 @@ index f5f969b3d6e..a4ab6bdb3df 100644 mutex_destroy /* destroy */ }; diff --git a/server/named_pipe.c b/server/named_pipe.c -index 51a43e24404..6cd6c0623e0 100644 +index f97b1416415..ef611f49918 100644 --- a/server/named_pipe.c +++ b/server/named_pipe.c -@@ -130,6 +130,7 @@ static const struct object_ops named_pipe_ops = +@@ -129,6 +129,7 @@ static const struct object_ops named_pipe_ops = default_unlink_name, /* unlink_name */ named_pipe_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -431,7 +418,7 @@ index 51a43e24404..6cd6c0623e0 100644 no_close_handle, /* close_handle */ named_pipe_destroy /* destroy */ }; -@@ -173,6 +174,7 @@ static const struct object_ops pipe_server_ops = +@@ -171,6 +172,7 @@ static const struct object_ops pipe_server_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -439,7 +426,7 @@ index 51a43e24404..6cd6c0623e0 100644 fd_close_handle, /* close_handle */ pipe_server_destroy /* destroy */ }; -@@ -216,6 +218,7 @@ static const struct object_ops pipe_client_ops = +@@ -213,6 +215,7 @@ static const struct object_ops pipe_client_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -447,7 +434,7 @@ index 51a43e24404..6cd6c0623e0 100644 fd_close_handle, /* close_handle */ pipe_end_destroy /* destroy */ }; -@@ -263,7 +266,8 @@ static const struct object_ops named_pipe_device_ops = +@@ -259,7 +262,8 @@ static const struct object_ops named_pipe_device_ops = default_unlink_name, /* unlink_name */ named_pipe_device_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -457,7 +444,7 @@ index 51a43e24404..6cd6c0623e0 100644 named_pipe_device_destroy /* destroy */ }; -@@ -293,6 +297,7 @@ static const struct object_ops named_pipe_device_file_ops = +@@ -288,6 +292,7 @@ static const struct object_ops named_pipe_device_file_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -481,10 +468,10 @@ index dacfe1d71a0..55321dddd87 100644 { return 1; /* ok to close */ diff --git a/server/object.h b/server/object.h -index e0e8515ba15..c983d1667a8 100644 +index 3144eb56678..a903479bb69 100644 --- a/server/object.h +++ b/server/object.h -@@ -93,8 +93,10 @@ struct object_ops +@@ -91,8 +91,10 @@ struct object_ops unsigned int options); /* return list of kernel objects */ struct list *(*get_kernel_obj_list)(struct object *); @@ -496,7 +483,7 @@ index e0e8515ba15..c983d1667a8 100644 /* destroy on refcount == 0 */ void (*destroy)(struct object *); }; -@@ -170,6 +172,7 @@ extern void default_unlink_name( struct object *obj, struct object_name *name ); +@@ -168,6 +170,7 @@ extern void default_unlink_name( struct object *obj, struct object_name *name ); extern struct object *no_open_file( struct object *obj, unsigned int access, unsigned int sharing, unsigned int options ); extern struct list *no_kernel_obj_list( struct object *obj ); @@ -505,10 +492,10 @@ index e0e8515ba15..c983d1667a8 100644 extern void no_destroy( struct object *obj ); #ifdef DEBUG_OBJECTS diff --git a/server/process.c b/server/process.c -index 69e5a37eccb..d497723fea5 100644 +index 76bb6faa91a..f76bc7167bf 100644 --- a/server/process.c +++ b/server/process.c -@@ -91,6 +91,7 @@ static const struct object_ops process_ops = +@@ -88,6 +88,7 @@ static const struct object_ops process_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ process_get_kernel_obj_list, /* get_kernel_obj_list */ @@ -516,7 +503,7 @@ index 69e5a37eccb..d497723fea5 100644 no_close_handle, /* close_handle */ process_destroy /* destroy */ }; -@@ -142,6 +143,7 @@ static const struct object_ops startup_info_ops = +@@ -138,6 +139,7 @@ static const struct object_ops startup_info_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -524,7 +511,7 @@ index 69e5a37eccb..d497723fea5 100644 no_close_handle, /* close_handle */ startup_info_destroy /* destroy */ }; -@@ -187,6 +189,7 @@ static const struct object_ops job_ops = +@@ -182,6 +184,7 @@ static const struct object_ops job_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -533,10 +520,10 @@ index 69e5a37eccb..d497723fea5 100644 job_destroy /* destroy */ }; diff --git a/server/queue.c b/server/queue.c -index ad3ed008f61..3b3cc3910aa 100644 +index 84ee0f9a4ea..a963c68c45d 100644 --- a/server/queue.c +++ b/server/queue.c -@@ -194,6 +194,7 @@ static const struct object_ops msg_queue_ops = +@@ -182,6 +182,7 @@ static const struct object_ops msg_queue_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -544,7 +531,7 @@ index ad3ed008f61..3b3cc3910aa 100644 no_close_handle, /* close_handle */ msg_queue_destroy /* destroy */ }; -@@ -231,6 +232,7 @@ static const struct object_ops thread_input_ops = +@@ -218,6 +219,7 @@ static const struct object_ops thread_input_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -553,10 +540,10 @@ index ad3ed008f61..3b3cc3910aa 100644 thread_input_destroy /* destroy */ }; diff --git a/server/registry.c b/server/registry.c -index ec30b7b2355..db15f225714 100644 +index dcbb3f791e1..6e5eddcd257 100644 --- a/server/registry.c +++ b/server/registry.c -@@ -171,6 +171,7 @@ static const struct object_ops key_ops = +@@ -170,6 +170,7 @@ static const struct object_ops key_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -565,10 +552,10 @@ index ec30b7b2355..db15f225714 100644 key_destroy /* destroy */ }; diff --git a/server/request.c b/server/request.c -index 4807ca9398f..6d2011fb444 100644 +index 4c1f30a5fe7..42cc83c3037 100644 --- a/server/request.c +++ b/server/request.c -@@ -108,6 +108,7 @@ static const struct object_ops master_socket_ops = +@@ -107,6 +107,7 @@ static const struct object_ops master_socket_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -577,10 +564,10 @@ index 4807ca9398f..6d2011fb444 100644 master_socket_destroy /* destroy */ }; diff --git a/server/semaphore.c b/server/semaphore.c -index 36e3e79e5d6..1913871859a 100644 +index 6e2415fd79a..457cd6f4558 100644 --- a/server/semaphore.c +++ b/server/semaphore.c -@@ -70,6 +70,7 @@ static const struct object_ops semaphore_ops = +@@ -69,6 +69,7 @@ static const struct object_ops semaphore_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -589,10 +576,10 @@ index 36e3e79e5d6..1913871859a 100644 no_destroy /* destroy */ }; diff --git a/server/serial.c b/server/serial.c -index 2848e1dc795..966b8bc6b81 100644 +index 4292472613a..ecb9a9350ad 100644 --- a/server/serial.c +++ b/server/serial.c -@@ -104,6 +104,7 @@ static const struct object_ops serial_ops = +@@ -103,6 +103,7 @@ static const struct object_ops serial_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -601,10 +588,10 @@ index 2848e1dc795..966b8bc6b81 100644 serial_destroy /* destroy */ }; diff --git a/server/signal.c b/server/signal.c -index ca200394f7e..a2e0efef121 100644 +index c81f6b8e989..b8dd87d86f1 100644 --- a/server/signal.c +++ b/server/signal.c -@@ -79,6 +79,7 @@ static const struct object_ops handler_ops = +@@ -78,6 +78,7 @@ static const struct object_ops handler_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -613,10 +600,10 @@ index ca200394f7e..a2e0efef121 100644 handler_destroy /* destroy */ }; diff --git a/server/snapshot.c b/server/snapshot.c -index 7d0d742ee9e..2ad9d5d7809 100644 +index a0f2ea17a3e..d5ba720980a 100644 --- a/server/snapshot.c +++ b/server/snapshot.c -@@ -73,6 +73,7 @@ static const struct object_ops snapshot_ops = +@@ -72,6 +72,7 @@ static const struct object_ops snapshot_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -625,10 +612,10 @@ index 7d0d742ee9e..2ad9d5d7809 100644 snapshot_destroy /* destroy */ }; diff --git a/server/sock.c b/server/sock.c -index 4a10aaccf94..f951f23d64a 100644 +index 5095a6ef9f0..7b10b74cc4e 100644 --- a/server/sock.c +++ b/server/sock.c -@@ -156,6 +156,7 @@ static const struct object_ops sock_ops = +@@ -155,6 +155,7 @@ static const struct object_ops sock_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -636,7 +623,7 @@ index 4a10aaccf94..f951f23d64a 100644 fd_close_handle, /* close_handle */ sock_destroy /* destroy */ }; -@@ -972,6 +973,7 @@ static const struct object_ops ifchange_ops = +@@ -970,6 +971,7 @@ static const struct object_ops ifchange_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -645,10 +632,10 @@ index 4a10aaccf94..f951f23d64a 100644 ifchange_destroy /* destroy */ }; diff --git a/server/symlink.c b/server/symlink.c -index b4b6a44616e..44237bc8b18 100644 +index e5ee09f015a..d60611d592a 100644 --- a/server/symlink.c +++ b/server/symlink.c -@@ -72,6 +72,7 @@ static const struct object_ops symlink_ops = +@@ -71,6 +71,7 @@ static const struct object_ops symlink_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -657,10 +644,10 @@ index b4b6a44616e..44237bc8b18 100644 symlink_destroy /* destroy */ }; diff --git a/server/thread.c b/server/thread.c -index 874555bd7b4..92b83ea7f79 100644 +index e2bfa50c7ba..9faef2dcd34 100644 --- a/server/thread.c +++ b/server/thread.c -@@ -123,6 +123,7 @@ static const struct object_ops thread_apc_ops = +@@ -121,6 +121,7 @@ static const struct object_ops thread_apc_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -668,7 +655,7 @@ index 874555bd7b4..92b83ea7f79 100644 no_close_handle, /* close_handle */ thread_apc_destroy /* destroy */ }; -@@ -160,6 +161,7 @@ static const struct object_ops context_ops = +@@ -157,6 +158,7 @@ static const struct object_ops context_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -676,7 +663,7 @@ index 874555bd7b4..92b83ea7f79 100644 no_close_handle, /* close_handle */ no_destroy /* destroy */ }; -@@ -196,6 +198,7 @@ static const struct object_ops thread_ops = +@@ -191,6 +193,7 @@ static const struct object_ops thread_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ thread_get_kernel_obj_list, /* get_kernel_obj_list */ @@ -685,10 +672,10 @@ index 874555bd7b4..92b83ea7f79 100644 destroy_thread /* destroy */ }; diff --git a/server/timer.c b/server/timer.c -index 0499080fd0c..279417b9f4c 100644 +index 6460acbf519..2b5ae29a45a 100644 --- a/server/timer.c +++ b/server/timer.c -@@ -80,6 +80,7 @@ static const struct object_ops timer_ops = +@@ -76,6 +76,7 @@ static const struct object_ops timer_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -697,10 +684,10 @@ index 0499080fd0c..279417b9f4c 100644 timer_destroy /* destroy */ }; diff --git a/server/token.c b/server/token.c -index 5e47d76ef40..1cdab79da70 100644 +index 2fa95e17aaf..8464eaf83eb 100644 --- a/server/token.c +++ b/server/token.c -@@ -162,6 +162,7 @@ static const struct object_ops token_ops = +@@ -157,6 +157,7 @@ static const struct object_ops token_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -709,10 +696,10 @@ index 5e47d76ef40..1cdab79da70 100644 token_destroy /* destroy */ }; diff --git a/server/winstation.c b/server/winstation.c -index d7c1a8ca8bf..32772d4805b 100644 +index 43d112334d4..993a41178c6 100644 --- a/server/winstation.c +++ b/server/winstation.c -@@ -76,6 +76,7 @@ static const struct object_ops winstation_ops = +@@ -75,6 +75,7 @@ static const struct object_ops winstation_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -720,7 +707,7 @@ index d7c1a8ca8bf..32772d4805b 100644 winstation_close_handle, /* close_handle */ winstation_destroy /* destroy */ }; -@@ -101,6 +102,7 @@ static const struct object_ops desktop_ops = +@@ -99,6 +100,7 @@ static const struct object_ops desktop_ops = default_unlink_name, /* unlink_name */ no_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ @@ -729,5 +716,5 @@ index d7c1a8ca8bf..32772d4805b 100644 desktop_destroy /* destroy */ }; -- -2.26.0 +2.26.2 diff --git a/patches/server-Desktop_Refcount/definition b/patches/server-Desktop_Refcount/definition index c56a7052..413dc31a 100644 --- a/patches/server-Desktop_Refcount/definition +++ b/patches/server-Desktop_Refcount/definition @@ -1,5 +1,4 @@ Fixes: Fix possible leak of explorer.exe processes and implement proper desktop refcounting Fixes: Assign random name when trying to create Window Station without name Fixes: [46967] GOG Galaxy doesn't run in virtual desktop. -Depends: eventfd_synchronization Depends: ws2_32-WSACleanup diff --git a/patches/server-FileEndOfFileInformation/0001-ntdll-Set-EOF-on-file-which-has-a-memory-mapping-sho.patch b/patches/server-FileEndOfFileInformation/0001-ntdll-Set-EOF-on-file-which-has-a-memory-mapping-sho.patch index a243e034..229655b2 100644 --- a/patches/server-FileEndOfFileInformation/0001-ntdll-Set-EOF-on-file-which-has-a-memory-mapping-sho.patch +++ b/patches/server-FileEndOfFileInformation/0001-ntdll-Set-EOF-on-file-which-has-a-memory-mapping-sho.patch @@ -1,26 +1,27 @@ -From 3b5ea5ff15907d1d8f1902a08451b0a03eb11dc9 Mon Sep 17 00:00:00 2001 +From ed63a76dc481da8af510fb8f9ae6c399ca0ca0ac Mon Sep 17 00:00:00 2001 From: Qian Hong Date: Fri, 21 Aug 2015 21:58:51 +0800 -Subject: ntdll: Set EOF on file which has a memory mapping should fail. +Subject: [PATCH] ntdll: Set EOF on file which has a memory mapping should + fail. --- - dlls/ntdll/file.c | 27 +++++++------------------- - server/fd.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ - server/protocol.def | 7 +++++++ + dlls/ntdll/file.c | 27 ++++++---------------- + server/fd.c | 55 +++++++++++++++++++++++++++++++++++++++++++++ + server/protocol.def | 7 ++++++ 3 files changed, 69 insertions(+), 20 deletions(-) diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index be6b591..8c9b076 100644 +index 013706889bb..a28ae265687 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c -@@ -2650,30 +2650,17 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io, +@@ -2747,30 +2747,17 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io, case FileEndOfFileInformation: if (len >= sizeof(FILE_END_OF_FILE_INFORMATION)) { - struct stat st; const FILE_END_OF_FILE_INFORMATION *info = ptr; -- if ((io->u.Status = server_get_unix_fd( handle, 0, &fd, &needs_close, NULL, NULL ))) +- if ((io->u.Status = unix_funcs->server_get_unix_fd( handle, 0, &fd, &needs_close, NULL, NULL ))) - return io->u.Status; - - /* first try normal truncate */ @@ -52,10 +53,10 @@ index be6b591..8c9b076 100644 case FilePipeInformation: diff --git a/server/fd.c b/server/fd.c -index fef4827..62373d8 100644 +index 06d1d81bdb0..7b016acb382 100644 --- a/server/fd.c +++ b/server/fd.c -@@ -2353,6 +2353,50 @@ failed: +@@ -2534,6 +2534,50 @@ failed: free( name ); } @@ -106,7 +107,7 @@ index fef4827..62373d8 100644 struct completion *fd_get_completion( struct fd *fd, apc_param_t *p_key ) { *p_key = fd->comp_key; -@@ -2593,3 +2637,14 @@ DECL_HANDLER(set_fd_name_info) +@@ -2812,3 +2856,14 @@ DECL_HANDLER(set_fd_name_info) } if (root_fd) release_object( root_fd ); } @@ -122,10 +123,10 @@ index fef4827..62373d8 100644 + } +} diff --git a/server/protocol.def b/server/protocol.def -index c313006..8d197f0 100644 +index 423e6079009..c6110fc675e 100644 --- a/server/protocol.def +++ b/server/protocol.def -@@ -3541,6 +3541,13 @@ enum coords_relative +@@ -3821,6 +3821,13 @@ struct handle_info @END @@ -140,5 +141,5 @@ index c313006..8d197f0 100644 @REQ(get_window_layered_info) user_handle_t handle; /* handle to the window */ -- -2.5.0 +2.26.2 diff --git a/patches/server-Object_Types/0003-server-Register-types-during-startup.patch b/patches/server-Object_Types/0003-server-Register-types-during-startup.patch index 1905f8f1..769f1f3c 100644 --- a/patches/server-Object_Types/0003-server-Register-types-during-startup.patch +++ b/patches/server-Object_Types/0003-server-Register-types-during-startup.patch @@ -1,4 +1,4 @@ -From 276db2921f3643686de6360d882c344fe86e6d99 Mon Sep 17 00:00:00 2001 +From 3f37e21dc1ff1cbd971b5bf7307b6898c2339b29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Wed, 8 Mar 2017 03:32:43 +0100 Subject: [PATCH] server: Register types during startup. @@ -40,7 +40,7 @@ index db04727b93b..f8561172b70 100644 } diff --git a/server/directory.c b/server/directory.c -index 28aec30304a..0a591ed6d9a 100644 +index 75f1e8f117d..b39a4606277 100644 --- a/server/directory.c +++ b/server/directory.c @@ -121,8 +121,7 @@ static void object_type_dump( struct object *obj, int verbose ) @@ -116,22 +116,22 @@ index 781e6f3141a..42350048877 100644 } diff --git a/server/main.c b/server/main.c -index 43297a3e93d..0a628c30e2d 100644 +index efb205f5292..fee10ea3d37 100644 --- a/server/main.c +++ b/server/main.c -@@ -146,6 +146,7 @@ int main( int argc, char *argv[] ) +@@ -145,6 +145,7 @@ int main( int argc, char *argv[] ) + init_signals(); init_directories(); init_registry(); - init_shared_memory(); + init_types(); main_loop(); return 0; } diff --git a/server/mapping.c b/server/mapping.c -index 2a2803404cc..24ab0f63e48 100644 +index 0941dd87c05..88894661025 100644 --- a/server/mapping.c +++ b/server/mapping.c -@@ -979,8 +979,7 @@ static void mapping_dump( struct object *obj, int verbose ) +@@ -915,8 +915,7 @@ static void mapping_dump( struct object *obj, int verbose ) static struct object_type *mapping_get_type( struct object *obj ) { @@ -249,7 +249,7 @@ index 3144eb56678..5cc593f5c52 100644 extern struct object *create_obj_symlink( struct object *root, const struct unicode_str *name, diff --git a/server/process.c b/server/process.c -index 6722addb091..aded1da8901 100644 +index 76bb6faa91a..be5caaecd7e 100644 --- a/server/process.c +++ b/server/process.c @@ -215,8 +215,7 @@ static struct job *get_job_obj( struct process *process, obj_handle_t handle, un @@ -315,10 +315,10 @@ index e5ee09f015a..287432f692e 100644 } diff --git a/server/thread.c b/server/thread.c -index 0226e744d7b..7fb902c9648 100644 +index e2bfa50c7ba..4d518a93403 100644 --- a/server/thread.c +++ b/server/thread.c -@@ -454,8 +454,7 @@ static void dump_thread( struct object *obj, int verbose ) +@@ -445,8 +445,7 @@ static void dump_thread( struct object *obj, int verbose ) static struct object_type *thread_get_type( struct object *obj ) { diff --git a/patches/server-Object_Types/definition b/patches/server-Object_Types/definition index 9f2708c1..724bb014 100644 --- a/patches/server-Object_Types/definition +++ b/patches/server-Object_Types/definition @@ -1,3 +1,3 @@ Fixes: [44629] Process Hacker can't enumerate handles Fixes: [45374] Yet Another Process Monitor (.NET 2.0 app) reports System.AccessViolationException -Depends: server-Shared_Memory +#Depends: server-Shared_Memory diff --git a/patches/server-Shared_Memory/definition b/patches/server-Shared_Memory/definition index 644589e6..31633846 100644 --- a/patches/server-Shared_Memory/definition +++ b/patches/server-Shared_Memory/definition @@ -7,3 +7,5 @@ Depends: server-PeekMessage Depends: server-Signal_Thread Depends: user32-rawinput-nolegacy Depends: ntdll-ext4-case-folder +# This is not worth rebasing right now. +Disabled: true diff --git a/patches/wineboot-DriveSerial/0001-wineboot-Assign-a-drive-serial-number-during-prefix-.patch b/patches/wineboot-DriveSerial/0001-wineboot-Assign-a-drive-serial-number-during-prefix-.patch index 42745555..093120d0 100644 --- a/patches/wineboot-DriveSerial/0001-wineboot-Assign-a-drive-serial-number-during-prefix-.patch +++ b/patches/wineboot-DriveSerial/0001-wineboot-Assign-a-drive-serial-number-during-prefix-.patch @@ -1,4 +1,4 @@ -From c7d08fae58702256a3034521632553740f590750 Mon Sep 17 00:00:00 2001 +From 738b377c97704144b9e750c284155d0c7ac7bd4a Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 25 May 2015 06:07:50 +0200 Subject: [PATCH] wineboot: Assign a drive serial number during prefix @@ -9,10 +9,10 @@ Subject: [PATCH] wineboot: Assign a drive serial number during prefix 1 file changed, 32 insertions(+) diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c -index e1dbe6630..f8b0c4d74 100644 +index 21be0f55fb0..b67b60974b4 100644 --- a/programs/wineboot/wineboot.c +++ b/programs/wineboot/wineboot.c -@@ -71,6 +71,7 @@ +@@ -76,6 +76,7 @@ #include #include #include @@ -20,7 +20,7 @@ index e1dbe6630..f8b0c4d74 100644 #include #include "resource.h" -@@ -537,6 +538,36 @@ done: +@@ -580,6 +581,36 @@ done: RegCloseKey( bios_key ); } @@ -57,14 +57,14 @@ index e1dbe6630..f8b0c4d74 100644 /* create the volatile hardware registry keys */ static void create_hardware_registry_keys(void) { -@@ -1694,6 +1725,7 @@ int __cdecl main( int argc, char *argv[] ) - +@@ -1590,6 +1621,7 @@ int __cdecl main( int argc, char *argv[] ) ResetEvent( event ); /* in case this is a restart */ + create_user_shared_data(); + create_disk_serial_number(); create_hardware_registry_keys(); create_dynamic_registry_keys(); create_environment_registry_keys(); -- -2.25.0 +2.26.2 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 4d57a3e5..a4cf647d 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,4 +1,4 @@ -From b72a4fc5697e18fab51553bf182e10352893b09f Mon Sep 17 00:00:00 2001 +From 45598a4fa2472c7df34c472fb0c193d9948a469d 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: [PATCH] tools/winebuild: Add syscall thunks for 64 bit. @@ -6,11 +6,12 @@ Subject: [PATCH] tools/winebuild: Add syscall thunks for 64 bit. --- dlls/kernel32/tests/loader.c | 7 +- dlls/ntdll/signal_x86_64.c | 2 + - dlls/ntdll/thread.c | 17 ++- + dlls/ntdll/thread.c | 13 +- libs/wine/loader.c | 4 + + programs/wineboot/wineboot.c | 4 + tools/winebuild/parser.c | 2 +- tools/winebuild/spec32.c | 285 ++++++++++++++++++++++++++++++++++- - 6 files changed, 307 insertions(+), 10 deletions(-) + 7 files changed, 307 insertions(+), 10 deletions(-) diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c index 95939ba6bde..ae5462f6e55 100644 @@ -40,7 +41,7 @@ index 95939ba6bde..ae5462f6e55 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 31af1e98d3f..324a92b41a9 100644 +index e92470e9606..e089afd71f5 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -354,6 +354,7 @@ static inline void set_sigcontext( const CONTEXT *context, ucontext_t *sigcontex @@ -60,7 +61,7 @@ index 31af1e98d3f..324a92b41a9 100644 } diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c -index 9fcbd8310ed..ed1183b0512 100644 +index fb5320603dc..20934448fa3 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -54,6 +54,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(thread); @@ -72,18 +73,7 @@ index 9fcbd8310ed..ed1183b0512 100644 void (WINAPI *kernel32_start_process)(LPTHREAD_START_ROUTINE,void*) = NULL; /* info passed to a starting thread */ -@@ -206,6 +208,10 @@ static void fill_user_shared_data( struct _KUSER_SHARED_DATA *data ) - data->NumberOfPhysicalPages = sbi.MmNumberOfPhysicalPages; - wcscpy( data->NtSystemRoot, windows_dir ); - -+ /* Pretend we don't support the SYSCALL instruction on x86-64. Needed for -+ * Chromium; see output_syscall_thunks_x64() in winebuild. */ -+ data->SystemCallPad[0] = 1; -+ - switch (sci.Architecture) - { - case PROCESSOR_ARCHITECTURE_INTEL: -@@ -312,9 +318,9 @@ TEB *thread_init(void) +@@ -230,9 +232,9 @@ TEB *thread_init(void) /* reserve space for shared user data */ addr = (void *)0x7ffe0000; @@ -95,7 +85,7 @@ index 9fcbd8310ed..ed1183b0512 100644 if (status) { MESSAGE( "wine: failed to map the shared user data: %08x\n", status ); -@@ -322,6 +328,13 @@ TEB *thread_init(void) +@@ -240,6 +242,13 @@ TEB *thread_init(void) } user_shared_data = addr; @@ -125,6 +115,21 @@ index 4597a6cb324..3d0d75e9c6d 100644 sec->Characteristics = (IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ); sec++; +diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c +index 21be0f55fb0..f84a7fe8a0c 100644 +--- a/programs/wineboot/wineboot.c ++++ b/programs/wineboot/wineboot.c +@@ -235,6 +235,10 @@ static void create_user_shared_data(void) + data->NumberOfPhysicalPages = sbi.MmNumberOfPhysicalPages; + wcscpy( data->NtSystemRoot, L"C:\\windows" ); + ++ /* Pretend we don't support the SYSCALL instruction on x86-64. Needed for ++ * Chromium; see output_syscall_thunks_x64() in winebuild. */ ++ data->SystemCallPad[0] = 1; ++ + features = data->ProcessorFeatures; + switch (sci.Architecture) + { diff --git a/tools/winebuild/parser.c b/tools/winebuild/parser.c index 74216f8bb6e..820516329a4 100644 --- a/tools/winebuild/parser.c diff --git a/patches/ws2_32-WSACleanup/0002-ws2_32-Invalidate-client-side-file-descriptor-cache-.patch b/patches/ws2_32-WSACleanup/0002-ws2_32-Invalidate-client-side-file-descriptor-cache-.patch index 7c65d3ba..384fc90a 100644 --- a/patches/ws2_32-WSACleanup/0002-ws2_32-Invalidate-client-side-file-descriptor-cache-.patch +++ b/patches/ws2_32-WSACleanup/0002-ws2_32-Invalidate-client-side-file-descriptor-cache-.patch @@ -1,21 +1,26 @@ -From 380a706bf10f26de9a1cd1a440b427f01f012285 Mon Sep 17 00:00:00 2001 +From e5ee1bec04910d5109591ee82177cdddaab60da7 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sun, 6 Sep 2015 12:41:17 +0200 -Subject: ws2_32: Invalidate client-side file descriptor cache in WSACleanup. +Subject: [PATCH] ws2_32: Invalidate client-side file descriptor cache in + WSACleanup. --- - dlls/ntdll/ntdll.spec | 1 + - dlls/ntdll/server.c | 24 ++++++++++++++++++++++++ - dlls/ws2_32/socket.c | 1 + - dlls/ws2_32/tests/sock.c | 5 +---- - include/wine/server.h | 1 + - 5 files changed, 28 insertions(+), 4 deletions(-) + dlls/ntdll/ntdll.spec | 1 + + dlls/ntdll/server.c | 8 ++++++++ + dlls/ntdll/unix/loader.c | 1 + + dlls/ntdll/unix/server.c | 20 ++++++++++++++++++++ + dlls/ntdll/unix/unix_private.h | 1 + + dlls/ntdll/unixlib.h | 3 ++- + dlls/ws2_32/socket.c | 1 + + dlls/ws2_32/tests/sock.c | 5 +---- + include/wine/server.h | 1 + + 9 files changed, 36 insertions(+), 5 deletions(-) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index c3b6bf0..2b52562 100644 +index 42532bd9f1c..ba46f170670 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec -@@ -1458,6 +1458,7 @@ +@@ -1575,6 +1575,7 @@ # Server interface @ cdecl -norelay wine_server_call(ptr) @@ -24,19 +29,49 @@ index c3b6bf0..2b52562 100644 @ cdecl wine_server_handle_to_fd(long long ptr ptr) @ cdecl wine_server_release_fd(long long) diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c -index 356d631..381d5aa 100644 +index ed4e3f25531..ae1e41a485e 100644 --- a/dlls/ntdll/server.c +++ b/dlls/ntdll/server.c -@@ -915,6 +915,30 @@ int server_remove_fd_from_cache( HANDLE handle ) +@@ -687,6 +687,14 @@ void CDECL wine_server_release_fd( HANDLE handle, int unix_fd ) + unix_funcs->server_release_fd( handle, unix_fd ); + } - - /*********************************************************************** ++ /*********************************************************************** + * wine_server_close_fds_by_type -+ * -+ * Needed for a proper implementation of WSACleanup. + */ +void CDECL wine_server_close_fds_by_type( enum server_fd_type type ) +{ ++ unix_funcs->server_remove_fds_from_cache_by_type( type ); ++} ++ + + /*********************************************************************** + * server_init_process +diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c +index 4a3f101d301..8b10964603e 100644 +--- a/dlls/ntdll/unix/loader.c ++++ b/dlls/ntdll/unix/loader.c +@@ -1000,6 +1000,7 @@ static struct unix_funcs unix_funcs = + wine_server_call, + server_send_fd, + server_remove_fd_from_cache, ++ server_remove_fds_from_cache_by_type, + server_get_unix_fd, + server_fd_to_handle, + server_handle_to_fd, +diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c +index 8dc3f33bc80..dd2cb6cf5e2 100644 +--- a/dlls/ntdll/unix/server.c ++++ b/dlls/ntdll/unix/server.c +@@ -559,6 +559,26 @@ int CDECL server_remove_fd_from_cache( HANDLE handle ) + return fd; + } + ++/*********************************************************************** ++ * server_remove_fds_from_cache_by_type ++ */ ++void CDECL server_remove_fds_from_cache_by_type( enum server_fd_type type ) ++{ + union fd_cache_entry cache; + unsigned int entry, idx; + @@ -52,17 +87,47 @@ index 356d631..381d5aa 100644 + } + } +} -+ -+ -+/*********************************************************************** + + /*********************************************************************** * server_get_unix_fd - * - * The returned unix_fd should be closed iff needs_close is non-zero. +diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h +index 2bf39f85371..32c03fd8983 100644 +--- a/dlls/ntdll/unix/unix_private.h ++++ b/dlls/ntdll/unix/unix_private.h +@@ -63,6 +63,7 @@ extern void CDECL dbg_init(void) DECLSPEC_HIDDEN; + extern unsigned int CDECL server_call_unlocked( void *req_ptr ) DECLSPEC_HIDDEN; + extern void CDECL server_send_fd( int fd ) DECLSPEC_HIDDEN; + extern int CDECL server_remove_fd_from_cache( HANDLE handle ) DECLSPEC_HIDDEN; ++extern void CDECL server_remove_fds_from_cache_by_type( enum server_fd_type type ) DECLSPEC_HIDDEN; + extern int CDECL server_get_unix_fd( HANDLE handle, unsigned int wanted_access, int *unix_fd, + int *needs_close, enum server_fd_type *type, + unsigned int *options ) DECLSPEC_HIDDEN; +diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h +index 142e8956e7e..452c725dfde 100644 +--- a/dlls/ntdll/unixlib.h ++++ b/dlls/ntdll/unixlib.h +@@ -25,7 +25,7 @@ + #include "wine/debug.h" + + /* increment this when you change the function table */ +-#define NTDLL_UNIXLIB_VERSION 10 ++#define NTDLL_UNIXLIB_VERSION 11 + + struct unix_funcs + { +@@ -55,6 +55,7 @@ struct unix_funcs + unsigned int (CDECL *server_call)( void *req_ptr ); + void (CDECL *server_send_fd)( int fd ); + int (CDECL *server_remove_fd_from_cache)( HANDLE handle ); ++ void (CDECL *server_remove_fds_from_cache_by_type)( enum server_fd_type type ); + int (CDECL *server_get_unix_fd)( HANDLE handle, unsigned int wanted_access, int *unix_fd, + int *needs_close, enum server_fd_type *type, unsigned int *options ); + NTSTATUS (CDECL *server_fd_to_handle)( int fd, unsigned int access, unsigned int attributes, diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c -index ea45397..c50d2b6 100644 +index bbc44ca2c20..37d110d216f 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c -@@ -1495,6 +1495,7 @@ INT WINAPI WSACleanup(void) +@@ -1729,6 +1729,7 @@ INT WINAPI WSACleanup(void) if (!--num_startup) { @@ -71,10 +136,10 @@ index ea45397..c50d2b6 100644 { wine_server_call( req ); diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c -index e3732a3..9ed71aa 100644 +index 9fe89d9dba3..c2e1379fe6f 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c -@@ -1179,10 +1179,7 @@ static void test_WithWSAStartup(void) +@@ -1250,10 +1250,7 @@ static void test_WithWSAStartup(void) SetLastError(0xdeadbeef); res = getsockname(sock, (struct sockaddr *)&saddr, &size); error = WSAGetLastError(); @@ -87,7 +152,7 @@ index e3732a3..9ed71aa 100644 } } diff --git a/include/wine/server.h b/include/wine/server.h -index d573d1f..02d9c7b 100644 +index ac5dcc6f8bc..5cf52887516 100644 --- a/include/wine/server.h +++ b/include/wine/server.h @@ -54,6 +54,7 @@ extern void CDECL wine_server_send_fd( int fd ); @@ -99,5 +164,5 @@ index d573d1f..02d9c7b 100644 /* do a server call and set the last error code */ static inline unsigned int wine_server_call_err( void *req_ptr ) -- -2.6.2 +2.26.2 diff --git a/patches/wtsapi32-EnumerateProcesses/0001-wtsapi32-Partial-implementation-of-WTSEnumerateProce.patch b/patches/wtsapi32-EnumerateProcesses/0001-wtsapi32-Partial-implementation-of-WTSEnumerateProce.patch index f9c30212..a750bbac 100644 --- a/patches/wtsapi32-EnumerateProcesses/0001-wtsapi32-Partial-implementation-of-WTSEnumerateProce.patch +++ b/patches/wtsapi32-EnumerateProcesses/0001-wtsapi32-Partial-implementation-of-WTSEnumerateProce.patch @@ -1,4 +1,4 @@ -From 6122f1c9de4a8e595c15034753c2838579548254 Mon Sep 17 00:00:00 2001 +From 3e86366ed3ab3aca555d2457e930cf7dbd08a105 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sun, 22 Jun 2014 19:04:38 +0200 Subject: [PATCH] wtsapi32: Partial implementation of WTSEnumerateProcessesW. @@ -9,7 +9,7 @@ Subject: [PATCH] wtsapi32: Partial implementation of WTSEnumerateProcessesW. 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/dlls/wtsapi32/tests/wtsapi.c b/dlls/wtsapi32/tests/wtsapi.c -index 67f56bbd7f5..5b4e28a1a30 100644 +index c9312cd97c5..72b57c16ffa 100644 --- a/dlls/wtsapi32/tests/wtsapi.c +++ b/dlls/wtsapi32/tests/wtsapi.c @@ -85,7 +85,6 @@ static void test_WTSEnumerateProcessesW(void) @@ -21,7 +21,7 @@ index 67f56bbd7f5..5b4e28a1a30 100644 WTSFreeMemory(info); } diff --git a/dlls/wtsapi32/wtsapi32.c b/dlls/wtsapi32/wtsapi32.c -index 2f5e73d05af..c3a483af10f 100644 +index ef3e0d10a0f..06ce384a337 100644 --- a/dlls/wtsapi32/wtsapi32.c +++ b/dlls/wtsapi32/wtsapi32.c @@ -17,8 +17,11 @@ @@ -33,10 +33,10 @@ index 2f5e73d05af..c3a483af10f 100644 #include "windef.h" #include "winbase.h" +#include "winternl.h" + #include "winnls.h" #include "wtsapi32.h" #include "wine/debug.h" - #include "wine/heap.h" -@@ -93,8 +96,13 @@ BOOL WINAPI WTSEnumerateProcessesA(HANDLE hServer, DWORD Reserved, DWORD Version +@@ -115,8 +118,13 @@ BOOL WINAPI WTSEnumerateProcessesA(HANDLE hServer, DWORD Reserved, DWORD Version BOOL WINAPI WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_PROCESS_INFOW* ppProcessInfo, DWORD* pCount) { @@ -52,7 +52,7 @@ index 2f5e73d05af..c3a483af10f 100644 if (!ppProcessInfo || !pCount || Reserved != 0 || Version != 1) { -@@ -102,9 +110,71 @@ BOOL WINAPI WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved, DWORD Version +@@ -124,9 +132,71 @@ BOOL WINAPI WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved, DWORD Version return FALSE; } @@ -127,5 +127,5 @@ index 2f5e73d05af..c3a483af10f 100644 } -- -2.20.1 +2.26.2 diff --git a/staging/upstream-commit b/staging/upstream-commit index b747f91e..3c361cae 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -e48fabff525061c8eea9558084a97308cebe6b7b +bf83d755d987fec552cd1dce30638c31c49ab760