mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
Rebase against 9bd963065b1fb7b445d010897d5f84967eadf75b.
This commit is contained in:
parent
6ef9e97ec1
commit
eb98f4e74f
@ -34,7 +34,7 @@ Wine. All those differences are also documented on the
|
||||
Included bug fixes and improvements
|
||||
-----------------------------------
|
||||
|
||||
**Bug fixes and features included in the next upcoming release [13]:**
|
||||
**Bug fixes and features included in the next upcoming release [12]:**
|
||||
|
||||
* Add implementation for msidb commandline tool
|
||||
* Codepage conversion should fail when destination length is < 0
|
||||
@ -43,7 +43,6 @@ Included bug fixes and improvements
|
||||
* Do not wait for hook thread startup in IDirectInput8::Initialize ([Wine Bug #21403](https://bugs.winehq.org/show_bug.cgi?id=21403))
|
||||
* Fix calculation of listbox size when horizontal scrollbar is present ([Wine Bug #38142](https://bugs.winehq.org/show_bug.cgi?id=38142))
|
||||
* Implement additional stub functions in authz.dll
|
||||
* Implement semi-stub for d3d8 swapchain effect D3DSWAPEFFECT_COPY_VSYNC ([Wine Bug #39281](https://bugs.winehq.org/show_bug.cgi?id=39281))
|
||||
* Pass cookie by reference to msvcrt_local_unwind4 in _seh_longjmp_unwind4 ([Wine Bug #39356](https://bugs.winehq.org/show_bug.cgi?id=39356))
|
||||
* Protect TVM_GETITEM from invalid item pointers ([Wine Bug #33001](https://bugs.winehq.org/show_bug.cgi?id=33001))
|
||||
* Reduce stack usage of virtual memory functions ([Wine Bug #34558](https://bugs.winehq.org/show_bug.cgi?id=34558))
|
||||
@ -213,7 +212,7 @@ for more details.*
|
||||
* Implement stub for ntoskrnl.KeDelayExecutionThread.
|
||||
* Implement stubs for ntoskrnl.Ex{Acquire,Release}FastMutexUnsafe
|
||||
* Implement stubs for ntoskrnl.ObReferenceObjectByPointer and ntoskrnl.ObDereferenceObject
|
||||
* Implement {Set,Get}ThreadGroupAffinity and related ntdll functions ([Wine Bug #36549](https://bugs.winehq.org/show_bug.cgi?id=36549))
|
||||
* ~~Implement {Set,Get}ThreadGroupAffinity and related ntdll functions~~ ([Wine Bug #36549](https://bugs.winehq.org/show_bug.cgi?id=36549))
|
||||
* Improve ReadDataAvailable handling in FilePipeLocalInformation class
|
||||
* Improve startup performance by delaying font initialization
|
||||
* Improve stub for AEV_GetVolumeRange ([Wine Bug #35658](https://bugs.winehq.org/show_bug.cgi?id=35658))
|
||||
@ -245,7 +244,7 @@ for more details.*
|
||||
* Properly render themed buttons when they are pressed ([Wine Bug #37584](https://bugs.winehq.org/show_bug.cgi?id=37584))
|
||||
* Reduced SetTimer minimum value from 10 ms to 5 ms (improves Silverlight framerates)
|
||||
* Report correct ObjectName for NamedPipe wineserver objects
|
||||
* Return STATUS_OBJECT_NAME_INVALID in wine_nt_to_unix_file_name for paths that only contain a prefix ([Wine Bug #39133](https://bugs.winehq.org/show_bug.cgi?id=39133))
|
||||
* ~~Return STATUS_OBJECT_NAME_INVALID in wine_nt_to_unix_file_name for paths that only contain a prefix~~ ([Wine Bug #39133](https://bugs.winehq.org/show_bug.cgi?id=39133))
|
||||
* Return a dummy BIOS name in Win32_BIOS record
|
||||
* Return a valid mesh in D3DXCreateTeapot ([Wine Bug #36884](https://bugs.winehq.org/show_bug.cgi?id=36884))
|
||||
* Return an error when trying to open a terminated process ([Wine Bug #37087](https://bugs.winehq.org/show_bug.cgi?id=37087))
|
||||
@ -295,7 +294,7 @@ for more details.*
|
||||
* Support for linux priority levels for faster performance
|
||||
* Support for loader dll redirections
|
||||
* Support for named pipe message mode (Linux only) ([Wine Bug #17195](https://bugs.winehq.org/show_bug.cgi?id=17195))
|
||||
* Support for non-blocking SIO_ADDRESS_LIST_CHANGE requests ([Wine Bug #38062](https://bugs.winehq.org/show_bug.cgi?id=38062))
|
||||
* ~~Support for non-blocking SIO_ADDRESS_LIST_CHANGE requests~~ ([Wine Bug #38062](https://bugs.winehq.org/show_bug.cgi?id=38062))
|
||||
* Support for pasting HTML from Unix applications ([Wine Bug #7372](https://bugs.winehq.org/show_bug.cgi?id=7372))
|
||||
* Support for process ACLs ([Wine Bug #22006](https://bugs.winehq.org/show_bug.cgi?id=22006))
|
||||
* Support for setcap on wine-preloader ([Wine Bug #26256](https://bugs.winehq.org/show_bug.cgi?id=26256))
|
||||
|
9
debian/changelog
vendored
9
debian/changelog
vendored
@ -42,6 +42,15 @@ wine-staging (1.7.52) UNRELEASED; urgency=low
|
||||
(accepted upstream).
|
||||
* Removed patch to fix failure to create anonymous file mapping after failed
|
||||
open_fd server call (accepted upstream).
|
||||
* Removed patch to implement semi-stub for d3d8 swapchain effect
|
||||
D3DSWAPEFFECT_COPY_VSYNC (identical patch accepted upstream).
|
||||
* Removed patch to implement {Set,Get}ThreadGroupAffinity and related ntdll
|
||||
functions (accepted upstream).
|
||||
* Removed patch to return STATUS_OBJECT_NAME_INVALID in
|
||||
wine_nt_to_unix_file_name for paths that only contain a prefix (accepted
|
||||
upstream).
|
||||
* Removed patch to implement support for non-blocking SIO_ADDRESS_LIST_CHANGE
|
||||
requests (accepted upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Mon, 07 Sep 2015 16:51:25 +0200
|
||||
|
||||
wine-staging (1.7.51) unstable; urgency=low
|
||||
|
@ -1,33 +0,0 @@
|
||||
From d65c501e946415d47bb6fc7f084233ac8de43dec Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 26 Sep 2015 17:21:22 +0200
|
||||
Subject: d3d8: Handle D3DSWAPEFFECT_COPY_VSYNC swapchain effect like
|
||||
D3DSWAPEFFECT_COPY.
|
||||
|
||||
---
|
||||
dlls/d3d8/device.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
|
||||
index e899b34..d006c12 100644
|
||||
--- a/dlls/d3d8/device.c
|
||||
+++ b/dlls/d3d8/device.c
|
||||
@@ -191,13 +191,13 @@ static void present_parameters_from_wined3d_swapchain_desc(D3DPRESENT_PARAMETERS
|
||||
static BOOL wined3d_swapchain_desc_from_present_parameters(struct wined3d_swapchain_desc *swapchain_desc,
|
||||
const D3DPRESENT_PARAMETERS *present_parameters)
|
||||
{
|
||||
- if (!present_parameters->SwapEffect || present_parameters->SwapEffect > D3DSWAPEFFECT_COPY)
|
||||
+ if (!present_parameters->SwapEffect || present_parameters->SwapEffect > D3DSWAPEFFECT_COPY_VSYNC)
|
||||
{
|
||||
WARN("Invalid swap effect %u passed.\n", present_parameters->SwapEffect);
|
||||
return FALSE;
|
||||
}
|
||||
if (present_parameters->BackBufferCount > 3
|
||||
- || (present_parameters->SwapEffect == D3DSWAPEFFECT_COPY
|
||||
+ || (present_parameters->SwapEffect >= D3DSWAPEFFECT_COPY
|
||||
&& present_parameters->BackBufferCount > 1))
|
||||
{
|
||||
WARN("Invalid backbuffer count %u.\n", present_parameters->BackBufferCount);
|
||||
--
|
||||
2.5.1
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [39281] Implement semi-stub for d3d8 swapchain effect D3DSWAPEFFECT_COPY_VSYNC
|
@ -1,108 +0,0 @@
|
||||
From c12f95c2b6fefcbe086e1d623d2124f31b84b53e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 6 Sep 2015 06:17:46 +0200
|
||||
Subject: ntdll: Implement ThreadGroupInformation class.
|
||||
|
||||
---
|
||||
dlls/ntdll/thread.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
include/winternl.h | 16 ++++++++++++++++
|
||||
2 files changed, 66 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
|
||||
index 0a8a7b9..afb347f 100644
|
||||
--- a/dlls/ntdll/thread.c
|
||||
+++ b/dlls/ntdll/thread.c
|
||||
@@ -1103,6 +1103,29 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class,
|
||||
SERVER_END_REQ;
|
||||
return status;
|
||||
}
|
||||
+ case ThreadGroupInformation:
|
||||
+ {
|
||||
+ const ULONG_PTR affinity_mask = get_system_affinity_mask();
|
||||
+ GROUP_AFFINITY affinity;
|
||||
+
|
||||
+ memset(&affinity, 0, sizeof(affinity));
|
||||
+ affinity.Group = 0; /* Wine only supports max 64 processors */
|
||||
+
|
||||
+ SERVER_START_REQ( get_thread_info )
|
||||
+ {
|
||||
+ req->handle = wine_server_obj_handle( handle );
|
||||
+ req->tid_in = 0;
|
||||
+ if (!(status = wine_server_call( req )))
|
||||
+ affinity.Mask = reply->affinity & affinity_mask;
|
||||
+ }
|
||||
+ SERVER_END_REQ;
|
||||
+ if (status == STATUS_SUCCESS)
|
||||
+ {
|
||||
+ if (data) memcpy( data, &affinity, min( length, sizeof(affinity) ));
|
||||
+ if (ret_len) *ret_len = min( length, sizeof(affinity) );
|
||||
+ }
|
||||
+ }
|
||||
+ return status;
|
||||
case ThreadPriority:
|
||||
case ThreadBasePriority:
|
||||
case ThreadImpersonationToken:
|
||||
@@ -1233,6 +1256,33 @@ NTSTATUS WINAPI NtSetInformationThread( HANDLE handle, THREADINFOCLASS class,
|
||||
SERVER_END_REQ;
|
||||
}
|
||||
return status;
|
||||
+ case ThreadGroupInformation:
|
||||
+ {
|
||||
+ const ULONG_PTR affinity_mask = get_system_affinity_mask();
|
||||
+ const GROUP_AFFINITY *req_aff;
|
||||
+
|
||||
+ if (length != sizeof(*req_aff)) return STATUS_INVALID_PARAMETER;
|
||||
+ if (!data) return STATUS_ACCESS_VIOLATION;
|
||||
+ req_aff = data;
|
||||
+
|
||||
+ /* On windows the request fails if the reserved fields are set */
|
||||
+ if (req_aff->Reserved[0] || req_aff->Reserved[1] || req_aff->Reserved[2])
|
||||
+ return STATUS_INVALID_PARAMETER;
|
||||
+
|
||||
+ /* Wine only supports max 64 processors */
|
||||
+ if (req_aff->Group) return STATUS_INVALID_PARAMETER;
|
||||
+ if (req_aff->Mask & ~affinity_mask) return STATUS_INVALID_PARAMETER;
|
||||
+ if (!req_aff->Mask) return STATUS_INVALID_PARAMETER;
|
||||
+ SERVER_START_REQ( set_thread_info )
|
||||
+ {
|
||||
+ req->handle = wine_server_obj_handle( handle );
|
||||
+ req->affinity = req_aff->Mask;
|
||||
+ req->mask = SET_THREAD_INFO_AFFINITY;
|
||||
+ status = wine_server_call( req );
|
||||
+ }
|
||||
+ SERVER_END_REQ;
|
||||
+ }
|
||||
+ return status;
|
||||
case ThreadBasicInformation:
|
||||
case ThreadTimes:
|
||||
case ThreadPriority:
|
||||
diff --git a/include/winternl.h b/include/winternl.h
|
||||
index 2b10f8d..3e64b4d 100644
|
||||
--- a/include/winternl.h
|
||||
+++ b/include/winternl.h
|
||||
@@ -859,6 +859,22 @@ typedef enum _THREADINFOCLASS {
|
||||
ThreadSetTlsArrayAddress,
|
||||
ThreadIsIoPending,
|
||||
ThreadHideFromDebugger,
|
||||
+ ThreadBreakOnTermination,
|
||||
+ ThreadSwitchLegacyState,
|
||||
+ ThreadIsTerminated,
|
||||
+ ThreadLastSystemCall,
|
||||
+ ThreadIoPriority,
|
||||
+ ThreadCycleTime,
|
||||
+ ThreadPagePriority,
|
||||
+ ThreadActualBasePriority,
|
||||
+ ThreadTebInformation,
|
||||
+ ThreadCSwitchMon,
|
||||
+ ThreadCSwitchPmu,
|
||||
+ ThreadWow64Context,
|
||||
+ ThreadGroupInformation,
|
||||
+ ThreadUmsInformation,
|
||||
+ ThreadCounterProfiling,
|
||||
+ ThreadIdealProcessorEx,
|
||||
MaxThreadInfoClass
|
||||
} THREADINFOCLASS;
|
||||
|
||||
--
|
||||
2.5.1
|
||||
|
@ -1,275 +0,0 @@
|
||||
From 0e15d46d97e226c2a566d7f30c9f67afaabbb6b1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 6 Sep 2015 06:19:40 +0200
|
||||
Subject: kernel32: Implement Set/GetThreadGroupAffinity.
|
||||
|
||||
---
|
||||
dlls/kernel32/kernel32.spec | 4 +-
|
||||
dlls/kernel32/tests/thread.c | 142 ++++++++++++++++++++++++++++++++-----------
|
||||
dlls/kernel32/thread.c | 46 ++++++++++++++
|
||||
3 files changed, 156 insertions(+), 36 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
|
||||
index 77e55e1..bda7c9d 100644
|
||||
--- a/dlls/kernel32/kernel32.spec
|
||||
+++ b/dlls/kernel32/kernel32.spec
|
||||
@@ -844,7 +844,7 @@
|
||||
@ stdcall GetTempPathW(long ptr)
|
||||
@ stdcall GetThreadContext(long ptr)
|
||||
@ stdcall GetThreadErrorMode()
|
||||
-# @ stub GetThreadGroupAffinity
|
||||
+@ stdcall GetThreadGroupAffinity(long ptr)
|
||||
@ stdcall GetThreadId(ptr)
|
||||
# @ stub GetThreadIdealProcessorEx
|
||||
@ stdcall GetThreadIOPendingFlag(long ptr)
|
||||
@@ -1443,7 +1443,7 @@
|
||||
@ stdcall SetThreadContext(long ptr)
|
||||
@ stdcall SetThreadErrorMode(long ptr)
|
||||
@ stdcall SetThreadExecutionState(long)
|
||||
-# @ stub SetThreadGroupAffinity
|
||||
+@ stdcall SetThreadGroupAffinity(long ptr ptr)
|
||||
@ stdcall SetThreadIdealProcessor(long long)
|
||||
# @ stub SetThreadIdealProcessorEx
|
||||
@ stdcall SetThreadLocale(long)
|
||||
diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c
|
||||
index d0fbfa4..fc5ff94 100644
|
||||
--- a/dlls/kernel32/tests/thread.c
|
||||
+++ b/dlls/kernel32/tests/thread.c
|
||||
@@ -99,6 +99,9 @@ static void (WINAPI *pSubmitThreadpoolWork)(PTP_WORK);
|
||||
static void (WINAPI *pWaitForThreadpoolWorkCallbacks)(PTP_WORK,BOOL);
|
||||
static void (WINAPI *pCloseThreadpoolWork)(PTP_WORK);
|
||||
static NTSTATUS (WINAPI *pNtQueryInformationThread)(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
|
||||
+static BOOL (WINAPI *pGetThreadGroupAffinity)(HANDLE,GROUP_AFFINITY*);
|
||||
+static BOOL (WINAPI *pSetThreadGroupAffinity)(HANDLE,const GROUP_AFFINITY*,GROUP_AFFINITY*);
|
||||
+static NTSTATUS (WINAPI *pNtSetInformationThread)(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
|
||||
|
||||
static HANDLE create_target_process(const char *arg)
|
||||
{
|
||||
@@ -877,6 +880,15 @@ static VOID test_thread_processor(void)
|
||||
retMask = SetThreadAffinityMask(curthread,~0);
|
||||
ok(broken(retMask==0) || retMask==processMask,
|
||||
"SetThreadAffinityMask(thread,-1) failed to request all processors.\n");
|
||||
+
|
||||
+ if (retMask == processMask)
|
||||
+ {
|
||||
+ /* Show that the "all processors" flag is handled in ntdll/kernel */
|
||||
+ DWORD_PTR mask = ~0;
|
||||
+ NTSTATUS status = pNtSetInformationThread(curthread, ThreadAffinityMask, &mask, sizeof(mask));
|
||||
+ ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS in NtSetInformationThread, got %x\n", status);
|
||||
+ }
|
||||
+
|
||||
if (retMask == processMask && sizeof(ULONG_PTR) > sizeof(ULONG))
|
||||
{
|
||||
/* only the low 32-bits matter */
|
||||
@@ -886,41 +898,99 @@ static VOID test_thread_processor(void)
|
||||
ok(retMask == processMask, "SetThreadAffinityMask failed\n");
|
||||
}
|
||||
/* NOTE: This only works on WinNT/2000/XP) */
|
||||
- if (pSetThreadIdealProcessor) {
|
||||
- SetLastError(0xdeadbeef);
|
||||
- error=pSetThreadIdealProcessor(curthread,0);
|
||||
- if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
|
||||
- {
|
||||
- win_skip("SetThreadIdealProcessor is not implemented\n");
|
||||
- return;
|
||||
- }
|
||||
- ok(error!=-1, "SetThreadIdealProcessor failed\n");
|
||||
-
|
||||
- if (is_wow64)
|
||||
- {
|
||||
- SetLastError(0xdeadbeef);
|
||||
- error=pSetThreadIdealProcessor(curthread,MAXIMUM_PROCESSORS+1);
|
||||
- todo_wine
|
||||
- ok(error!=-1, "SetThreadIdealProcessor failed for %u on Wow64\n", MAXIMUM_PROCESSORS+1);
|
||||
-
|
||||
- SetLastError(0xdeadbeef);
|
||||
- error=pSetThreadIdealProcessor(curthread,65);
|
||||
- ok(error==-1, "SetThreadIdealProcessor succeeded with an illegal processor #\n");
|
||||
- ok(GetLastError()==ERROR_INVALID_PARAMETER,
|
||||
- "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- SetLastError(0xdeadbeef);
|
||||
- error=pSetThreadIdealProcessor(curthread,MAXIMUM_PROCESSORS+1);
|
||||
- ok(error==-1, "SetThreadIdealProcessor succeeded with an illegal processor #\n");
|
||||
- ok(GetLastError()==ERROR_INVALID_PARAMETER,
|
||||
- "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
- }
|
||||
+ if (pSetThreadIdealProcessor)
|
||||
+ {
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ error=pSetThreadIdealProcessor(curthread,0);
|
||||
+ if (GetLastError()!=ERROR_CALL_NOT_IMPLEMENTED)
|
||||
+ {
|
||||
+ ok(error!=-1, "SetThreadIdealProcessor failed\n");
|
||||
+
|
||||
+ if (is_wow64)
|
||||
+ {
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ error=pSetThreadIdealProcessor(curthread,MAXIMUM_PROCESSORS+1);
|
||||
+ todo_wine
|
||||
+ ok(error!=-1, "SetThreadIdealProcessor failed for %u on Wow64\n", MAXIMUM_PROCESSORS+1);
|
||||
+
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ error=pSetThreadIdealProcessor(curthread,65);
|
||||
+ ok(error==-1, "SetThreadIdealProcessor succeeded with an illegal processor #\n");
|
||||
+ ok(GetLastError()==ERROR_INVALID_PARAMETER,
|
||||
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ error=pSetThreadIdealProcessor(curthread,MAXIMUM_PROCESSORS+1);
|
||||
+ ok(error==-1, "SetThreadIdealProcessor succeeded with an illegal processor #\n");
|
||||
+ ok(GetLastError()==ERROR_INVALID_PARAMETER,
|
||||
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
+ }
|
||||
+
|
||||
+ error=pSetThreadIdealProcessor(curthread,MAXIMUM_PROCESSORS);
|
||||
+ ok(error!=-1, "SetThreadIdealProcessor failed\n");
|
||||
+ }
|
||||
+ else
|
||||
+ win_skip("SetThreadIdealProcessor is not implemented\n");
|
||||
+ }
|
||||
|
||||
- error=pSetThreadIdealProcessor(curthread,MAXIMUM_PROCESSORS);
|
||||
- ok(error!=-1, "SetThreadIdealProcessor failed\n");
|
||||
- }
|
||||
+ if (pGetThreadGroupAffinity && pSetThreadGroupAffinity)
|
||||
+ {
|
||||
+ GROUP_AFFINITY affinity, affinity_new;
|
||||
+ NTSTATUS status;
|
||||
+
|
||||
+ memset(&affinity, 0, sizeof(affinity));
|
||||
+ ok(pGetThreadGroupAffinity(curthread, &affinity), "GetThreadGroupAffinity failed\n");
|
||||
+
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ok(!pGetThreadGroupAffinity(curthread, NULL), "GetThreadGroupAffinity succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_INVALID_PARAMETER || broken(GetLastError() == ERROR_NOACCESS), /* Win 7 and 8 */
|
||||
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
+ ok(affinity.Group == 0, "Expected group 0 got %u\n", affinity.Group);
|
||||
+
|
||||
+ memset(&affinity_new, 0, sizeof(affinity_new));
|
||||
+ affinity_new.Group = 0;
|
||||
+ affinity_new.Mask = affinity.Mask;
|
||||
+ ok(pSetThreadGroupAffinity(curthread, &affinity_new, &affinity), "SetThreadGroupAffinity failed\n");
|
||||
+ ok(affinity_new.Mask == affinity.Mask, "Expected old affinity mask %lx, got %lx\n",
|
||||
+ affinity_new.Mask, affinity.Mask);
|
||||
+
|
||||
+ /* show that the "all processors" flag is not supported for SetThreadGroupAffinity */
|
||||
+ affinity_new.Group = 0;
|
||||
+ affinity_new.Mask = ~0;
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ok(!pSetThreadGroupAffinity(curthread, &affinity_new, NULL), "SetThreadGroupAffinity succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
+
|
||||
+ affinity_new.Group = 1; /* assumes that you have less than 64 logical processors */
|
||||
+ affinity_new.Mask = 0x1;
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ok(!pSetThreadGroupAffinity(curthread, &affinity_new, NULL), "SetThreadGroupAffinity succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
+
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ok(!pSetThreadGroupAffinity(curthread, NULL, NULL), "SetThreadGroupAffinity succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_NOACCESS,
|
||||
+ "Expected ERROR_NOACCESS, got %d\n", GetLastError());
|
||||
+
|
||||
+ /* show that the ERROR_NOACCESS was set in ntdll */
|
||||
+ status = pNtSetInformationThread(curthread, ThreadGroupInformation, NULL, sizeof(affinity_new));
|
||||
+ ok(status == STATUS_ACCESS_VIOLATION,
|
||||
+ "Expected STATUS_ACCESS_VIOLATION, got %08x\n", status);
|
||||
+
|
||||
+ /* restore original mask */
|
||||
+ affinity_new.Group = 0;
|
||||
+ affinity_new.Mask = affinity.Mask;
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ok(pSetThreadGroupAffinity(curthread, &affinity_new, &affinity), "SetThreadGroupAffinity failed\n");
|
||||
+ ok(affinity_new.Mask == affinity.Mask, "Expected old affinity mask %lx, got %lx\n",
|
||||
+ affinity_new.Mask, affinity.Mask);
|
||||
+ }
|
||||
+ else
|
||||
+ win_skip("Get/SetThreadGroupAffinity not available\n");
|
||||
}
|
||||
|
||||
static VOID test_GetThreadExitCode(void)
|
||||
@@ -1833,6 +1903,9 @@ static void init_funcs(void)
|
||||
X(SubmitThreadpoolWork);
|
||||
X(WaitForThreadpoolWorkCallbacks);
|
||||
X(CloseThreadpoolWork);
|
||||
+
|
||||
+ X(GetThreadGroupAffinity);
|
||||
+ X(SetThreadGroupAffinity);
|
||||
#undef X
|
||||
|
||||
#define X(f) p##f = (void*)GetProcAddress(ntdll, #f)
|
||||
@@ -1840,6 +1913,7 @@ static void init_funcs(void)
|
||||
{
|
||||
X(NtQueryInformationThread);
|
||||
X(RtlGetThreadErrorMode);
|
||||
+ X(NtSetInformationThread);
|
||||
}
|
||||
#undef X
|
||||
}
|
||||
diff --git a/dlls/kernel32/thread.c b/dlls/kernel32/thread.c
|
||||
index c992e0d..0e9de82 100644
|
||||
--- a/dlls/kernel32/thread.c
|
||||
+++ b/dlls/kernel32/thread.c
|
||||
@@ -378,6 +378,52 @@ BOOL WINAPI SetThreadStackGuarantee(PULONG stacksize)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+/***********************************************************************
|
||||
+ * GetThreadGroupAffinity (KERNEL32.@)
|
||||
+ */
|
||||
+BOOL WINAPI GetThreadGroupAffinity( HANDLE thread, GROUP_AFFINITY *affinity )
|
||||
+{
|
||||
+ NTSTATUS status;
|
||||
+
|
||||
+ if (!affinity)
|
||||
+ {
|
||||
+ SetLastError( ERROR_INVALID_PARAMETER );
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ status = NtQueryInformationThread( thread, ThreadGroupInformation,
|
||||
+ affinity, sizeof(*affinity), NULL );
|
||||
+ if (status)
|
||||
+ {
|
||||
+ SetLastError( RtlNtStatusToDosError(status) );
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * SetThreadGroupAffinity (KERNEL32.@)
|
||||
+ */
|
||||
+BOOL WINAPI SetThreadGroupAffinity( HANDLE thread, const GROUP_AFFINITY *affinity_new,
|
||||
+ GROUP_AFFINITY *affinity_old )
|
||||
+{
|
||||
+ NTSTATUS status;
|
||||
+
|
||||
+ if (affinity_old && !GetThreadGroupAffinity( thread, affinity_old ))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ status = NtSetInformationThread( thread, ThreadGroupInformation,
|
||||
+ affinity_new, sizeof(*affinity_new) );
|
||||
+ if (status)
|
||||
+ {
|
||||
+ SetLastError( RtlNtStatusToDosError(status) );
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
/**********************************************************************
|
||||
* SetThreadAffinityMask (KERNEL32.@)
|
||||
*/
|
||||
--
|
||||
2.5.1
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [36549] Implement {Set,Get}ThreadGroupAffinity and related ntdll functions
|
@ -1,172 +0,0 @@
|
||||
From 526502c4455016f3e42f671d7a03b9c15ce79fa9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 22 Aug 2015 03:19:18 +0200
|
||||
Subject: ntdll: Return STATUS_OBJECT_NAME_INVALID in wine_nt_to_unix_file_name
|
||||
for paths that only contain a prefix.
|
||||
|
||||
---
|
||||
dlls/kernel32/tests/file.c | 22 ++++++++++++++++++++++
|
||||
dlls/ntdll/directory.c | 22 ++++++++++++++--------
|
||||
dlls/ntdll/tests/file.c | 39 +++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 75 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
|
||||
index dd64c91..fbe2ddd 100644
|
||||
--- a/dlls/kernel32/tests/file.c
|
||||
+++ b/dlls/kernel32/tests/file.c
|
||||
@@ -4650,6 +4650,27 @@ todo_wine
|
||||
CloseHandle(file);
|
||||
}
|
||||
|
||||
+static void test_GetFileAttributesExW(void)
|
||||
+{
|
||||
+ static const WCHAR path1[] = {'\\','\\','?','\\',0};
|
||||
+ static const WCHAR path2[] = {'\\','?','?','\\',0};
|
||||
+ static const WCHAR path3[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\',0};
|
||||
+ WIN32_FILE_ATTRIBUTE_DATA info;
|
||||
+ BOOL ret;
|
||||
+
|
||||
+ ret = GetFileAttributesExW(path1, GetFileExInfoStandard, &info);
|
||||
+ ok(!ret, "GetFileAttributesExW succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_INVALID_NAME, "Expected error ERROR_INVALID_NAME, got %d\n", GetLastError());
|
||||
+
|
||||
+ ret = GetFileAttributesExW(path2, GetFileExInfoStandard, &info);
|
||||
+ ok(!ret, "GetFileAttributesExW succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_INVALID_NAME, "Expected error ERROR_INVALID_NAME, got %d\n", GetLastError());
|
||||
+
|
||||
+ ret = GetFileAttributesExW(path3, GetFileExInfoStandard, &info);
|
||||
+ ok(!ret, "GetFileAttributesExW succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Expected error ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
|
||||
+}
|
||||
+
|
||||
START_TEST(file)
|
||||
{
|
||||
InitFunctionPointers();
|
||||
@@ -4706,4 +4727,5 @@ START_TEST(file)
|
||||
test_GetFinalPathNameByHandleA();
|
||||
test_GetFinalPathNameByHandleW();
|
||||
test_SetFileInformationByHandle();
|
||||
+ test_GetFileAttributesExW();
|
||||
}
|
||||
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
|
||||
index 0e02f2e..d1f66e0 100644
|
||||
--- a/dlls/ntdll/directory.c
|
||||
+++ b/dlls/ntdll/directory.c
|
||||
@@ -2757,20 +2757,26 @@ static NTSTATUS get_dos_device( const WCHAR *name, UINT name_len, ANSI_STRING *u
|
||||
|
||||
|
||||
/* return the length of the DOS namespace prefix if any */
|
||||
-static inline int get_dos_prefix_len( const UNICODE_STRING *name )
|
||||
+static inline NTSTATUS get_dos_prefix_len( const UNICODE_STRING *name, int *prefix_len )
|
||||
{
|
||||
static const WCHAR nt_prefixW[] = {'\\','?','?','\\'};
|
||||
static const WCHAR dosdev_prefixW[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\'};
|
||||
|
||||
- if (name->Length > sizeof(nt_prefixW) &&
|
||||
+ if (name->Length >= sizeof(nt_prefixW) &&
|
||||
!memcmp( name->Buffer, nt_prefixW, sizeof(nt_prefixW) ))
|
||||
- return sizeof(nt_prefixW) / sizeof(WCHAR);
|
||||
+ {
|
||||
+ *prefix_len = sizeof(nt_prefixW) / sizeof(WCHAR);
|
||||
+ return (name->Length == sizeof(nt_prefixW)) ? STATUS_OBJECT_NAME_INVALID : STATUS_SUCCESS;
|
||||
+ }
|
||||
|
||||
- if (name->Length > sizeof(dosdev_prefixW) &&
|
||||
+ if (name->Length >= sizeof(dosdev_prefixW) &&
|
||||
!memicmpW( name->Buffer, dosdev_prefixW, sizeof(dosdev_prefixW)/sizeof(WCHAR) ))
|
||||
- return sizeof(dosdev_prefixW) / sizeof(WCHAR);
|
||||
+ {
|
||||
+ *prefix_len = sizeof(dosdev_prefixW) / sizeof(WCHAR);
|
||||
+ return (name->Length == sizeof(dosdev_prefixW)) ? STATUS_OBJECT_NAME_INVALID : STATUS_SUCCESS;
|
||||
+ }
|
||||
|
||||
- return 0;
|
||||
+ return STATUS_BAD_DEVICE_TYPE;
|
||||
}
|
||||
|
||||
|
||||
@@ -3126,8 +3132,8 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRI
|
||||
|
||||
if (!name_len || !IS_SEPARATOR(name[0])) return STATUS_OBJECT_PATH_SYNTAX_BAD;
|
||||
|
||||
- if (!(pos = get_dos_prefix_len( nameW )))
|
||||
- return STATUS_BAD_DEVICE_TYPE; /* no DOS prefix, assume NT native name */
|
||||
+ if ((status = get_dos_prefix_len( nameW, &pos )))
|
||||
+ return status; /* no DOS prefix, assume NT native name */
|
||||
|
||||
name += pos;
|
||||
name_len -= pos;
|
||||
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
|
||||
index d68be15..70c7a55 100644
|
||||
--- a/dlls/ntdll/tests/file.c
|
||||
+++ b/dlls/ntdll/tests/file.c
|
||||
@@ -78,6 +78,7 @@ static NTSTATUS (WINAPI *pNtQueryInformationFile)(HANDLE, PIO_STATUS_BLOCK, PVOI
|
||||
static NTSTATUS (WINAPI *pNtQueryDirectoryFile)(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,
|
||||
PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
|
||||
static NTSTATUS (WINAPI *pNtQueryVolumeInformationFile)(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
|
||||
+static NTSTATUS (WINAPI *pNtQueryFullAttributesFile)(POBJECT_ATTRIBUTES, PFILE_NETWORK_OPEN_INFORMATION);
|
||||
|
||||
static inline BOOL is_signaled( HANDLE obj )
|
||||
{
|
||||
@@ -173,6 +174,10 @@ static void create_file_test(void)
|
||||
'\\','f','a','i','l','i','n','g',0};
|
||||
static const WCHAR questionmarkInvalidNameW[] = {'a','f','i','l','e','?',0};
|
||||
static const WCHAR pipeInvalidNameW[] = {'a','|','b',0};
|
||||
+ static const WCHAR pathInvalidDosW[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\',0};
|
||||
+ static const WCHAR pathInvalidNtW[] = {'\\','\\','?','\\',0};
|
||||
+ static const WCHAR pathInvalidNt2W[] = {'\\','?','?','\\',0};
|
||||
+ FILE_NETWORK_OPEN_INFORMATION info;
|
||||
NTSTATUS status;
|
||||
HANDLE dir, file;
|
||||
WCHAR path[MAX_PATH];
|
||||
@@ -293,6 +298,39 @@ static void create_file_test(void)
|
||||
ok(status == STATUS_OBJECT_NAME_INVALID,
|
||||
"open %s failed %x\n", wine_dbgstr_w(nameW.Buffer), status);
|
||||
pRtlFreeUnicodeString(&nameW);
|
||||
+
|
||||
+ pRtlInitUnicodeString( &nameW, pathInvalidNtW );
|
||||
+ status = pNtCreateFile(&dir, GENERIC_READ|SYNCHRONIZE, &attr, &io, NULL, 0,
|
||||
+ FILE_SHARE_READ, FILE_CREATE,
|
||||
+ FILE_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);
|
||||
+ ok(status == STATUS_OBJECT_NAME_INVALID,
|
||||
+ "open %s failed %x\n", wine_dbgstr_w(nameW.Buffer), status);
|
||||
+
|
||||
+ status = pNtQueryFullAttributesFile(&attr, &info);
|
||||
+ todo_wine ok(status == STATUS_OBJECT_NAME_INVALID,
|
||||
+ "query %s failed %x\n", wine_dbgstr_w(nameW.Buffer), status);
|
||||
+
|
||||
+ pRtlInitUnicodeString( &nameW, pathInvalidNt2W );
|
||||
+ status = pNtCreateFile(&dir, GENERIC_READ|SYNCHRONIZE, &attr, &io, NULL, 0,
|
||||
+ FILE_SHARE_READ, FILE_CREATE,
|
||||
+ FILE_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);
|
||||
+ ok(status == STATUS_OBJECT_NAME_INVALID,
|
||||
+ "open %s failed %x\n", wine_dbgstr_w(nameW.Buffer), status);
|
||||
+
|
||||
+ status = pNtQueryFullAttributesFile(&attr, &info);
|
||||
+ ok(status == STATUS_OBJECT_NAME_INVALID,
|
||||
+ "query %s failed %x\n", wine_dbgstr_w(nameW.Buffer), status);
|
||||
+
|
||||
+ pRtlInitUnicodeString( &nameW, pathInvalidDosW );
|
||||
+ status = pNtCreateFile(&dir, GENERIC_READ|SYNCHRONIZE, &attr, &io, NULL, 0,
|
||||
+ FILE_SHARE_READ, FILE_CREATE,
|
||||
+ FILE_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);
|
||||
+ ok(status == STATUS_OBJECT_NAME_INVALID,
|
||||
+ "open %s failed %x\n", wine_dbgstr_w(nameW.Buffer), status);
|
||||
+
|
||||
+ status = pNtQueryFullAttributesFile(&attr, &info);
|
||||
+ ok(status == STATUS_OBJECT_NAME_INVALID,
|
||||
+ "query %s failed %x\n", wine_dbgstr_w(nameW.Buffer), status);
|
||||
}
|
||||
|
||||
static void open_file_test(void)
|
||||
@@ -4158,6 +4196,7 @@ START_TEST(file)
|
||||
pNtQueryInformationFile = (void *)GetProcAddress(hntdll, "NtQueryInformationFile");
|
||||
pNtQueryDirectoryFile = (void *)GetProcAddress(hntdll, "NtQueryDirectoryFile");
|
||||
pNtQueryVolumeInformationFile = (void *)GetProcAddress(hntdll, "NtQueryVolumeInformationFile");
|
||||
+ pNtQueryFullAttributesFile = (void *)GetProcAddress(hntdll, "NtQueryFullAttributesFile");
|
||||
|
||||
test_read_write();
|
||||
test_NtCreateFile();
|
||||
--
|
||||
2.5.0
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [39133] Return STATUS_OBJECT_NAME_INVALID in wine_nt_to_unix_file_name for paths that only contain a prefix
|
@ -1,4 +1,4 @@
|
||||
From 4a7559e041d5f83e57368a21caf0237f6a24a380 Mon Sep 17 00:00:00 2001
|
||||
From 587d4844b3971d80d46e5641c29844b75756597c Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 6 Jun 2015 07:03:33 +0800
|
||||
Subject: ntdll: Improve stub of NtQueryEaFile.
|
||||
@ -44,13 +44,13 @@ index be6b591..8c8e976 100644
|
||||
|
||||
|
||||
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
|
||||
index 70c7a55..ad27906 100644
|
||||
index 1afb9c8..f13c9a9 100644
|
||||
--- a/dlls/ntdll/tests/file.c
|
||||
+++ b/dlls/ntdll/tests/file.c
|
||||
@@ -79,6 +79,7 @@ static NTSTATUS (WINAPI *pNtQueryDirectoryFile)(HANDLE,HANDLE,PIO_APC_ROUTINE,PV
|
||||
PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
|
||||
static NTSTATUS (WINAPI *pNtQueryVolumeInformationFile)(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
|
||||
static NTSTATUS (WINAPI *pNtQueryFullAttributesFile)(POBJECT_ATTRIBUTES, PFILE_NETWORK_OPEN_INFORMATION);
|
||||
static NTSTATUS (WINAPI *pNtQueryFullAttributesFile)(const OBJECT_ATTRIBUTES*, FILE_NETWORK_OPEN_INFORMATION*);
|
||||
+static NTSTATUS (WINAPI *pNtQueryEaFile)(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PULONG,BOOLEAN);
|
||||
|
||||
static inline BOOL is_signaled( HANDLE obj )
|
||||
@ -157,5 +157,5 @@ index 70c7a55..ad27906 100644
|
||||
+ test_query_ea();
|
||||
}
|
||||
--
|
||||
2.5.0
|
||||
2.5.1
|
||||
|
||||
|
@ -1,2 +1 @@
|
||||
Fixes: Improve stub for NtQueryEaFile
|
||||
Depends: ntdll-Empty_Path
|
||||
|
@ -52,7 +52,7 @@ usage()
|
||||
# Get the upstream commit sha
|
||||
upstream_commit()
|
||||
{
|
||||
echo "781b88b7c586fc295780f0c8ad76bda0ffe96cd1"
|
||||
echo "9bd963065b1fb7b445d010897d5f84967eadf75b"
|
||||
}
|
||||
|
||||
# Show version information
|
||||
@ -99,7 +99,6 @@ patch_enable_all ()
|
||||
enable_configure_Absolute_RPATH="$1"
|
||||
enable_crypt32_CMS_Certificates="$1"
|
||||
enable_crypt32_CryptUnprotectMemory="$1"
|
||||
enable_d3d8_D3DSWAPEFFECT_COPY_VSYNC="$1"
|
||||
enable_d3d9_DesktopWindow="$1"
|
||||
enable_d3d9_Skip_Tests="$1"
|
||||
enable_d3d9_Surface_Refcount="$1"
|
||||
@ -164,7 +163,6 @@ patch_enable_all ()
|
||||
enable_kernel32_Profile="$1"
|
||||
enable_kernel32_SetFileCompletionNotificationModes="$1"
|
||||
enable_kernel32_SetFileInformationByHandle="$1"
|
||||
enable_kernel32_ThreadGroupAffinity="$1"
|
||||
enable_kernel32_TimezoneInformation_Registry="$1"
|
||||
enable_kernel32_VerifyVersionInfo="$1"
|
||||
enable_libs_Debug_Channel="$1"
|
||||
@ -190,7 +188,6 @@ patch_enable_all ()
|
||||
enable_ntdll_Dealloc_Thread_Stack="$1"
|
||||
enable_ntdll_DeviceType_Systemroot="$1"
|
||||
enable_ntdll_DllRedirects="$1"
|
||||
enable_ntdll_Empty_Path="$1"
|
||||
enable_ntdll_Exception="$1"
|
||||
enable_ntdll_FileDispositionInformation="$1"
|
||||
enable_ntdll_FileFsFullSizeInformation="$1"
|
||||
@ -231,7 +228,6 @@ patch_enable_all ()
|
||||
enable_riched20_IText_Interface="$1"
|
||||
enable_rpcrt4_Pipe_Transport="$1"
|
||||
enable_secur32_ANSI_NTLM_Credentials="$1"
|
||||
enable_server_Address_List_Change="$1"
|
||||
enable_server_ClipCursor="$1"
|
||||
enable_server_CreateProcess_ACLs="$1"
|
||||
enable_server_Delete_On_Close="$1"
|
||||
@ -399,9 +395,6 @@ patch_enable ()
|
||||
crypt32-CryptUnprotectMemory)
|
||||
enable_crypt32_CryptUnprotectMemory="$2"
|
||||
;;
|
||||
d3d8-D3DSWAPEFFECT_COPY_VSYNC)
|
||||
enable_d3d8_D3DSWAPEFFECT_COPY_VSYNC="$2"
|
||||
;;
|
||||
d3d9-DesktopWindow)
|
||||
enable_d3d9_DesktopWindow="$2"
|
||||
;;
|
||||
@ -594,9 +587,6 @@ patch_enable ()
|
||||
kernel32-SetFileInformationByHandle)
|
||||
enable_kernel32_SetFileInformationByHandle="$2"
|
||||
;;
|
||||
kernel32-ThreadGroupAffinity)
|
||||
enable_kernel32_ThreadGroupAffinity="$2"
|
||||
;;
|
||||
kernel32-TimezoneInformation_Registry)
|
||||
enable_kernel32_TimezoneInformation_Registry="$2"
|
||||
;;
|
||||
@ -672,9 +662,6 @@ patch_enable ()
|
||||
ntdll-DllRedirects)
|
||||
enable_ntdll_DllRedirects="$2"
|
||||
;;
|
||||
ntdll-Empty_Path)
|
||||
enable_ntdll_Empty_Path="$2"
|
||||
;;
|
||||
ntdll-Exception)
|
||||
enable_ntdll_Exception="$2"
|
||||
;;
|
||||
@ -795,9 +782,6 @@ patch_enable ()
|
||||
secur32-ANSI_NTLM_Credentials)
|
||||
enable_secur32_ANSI_NTLM_Credentials="$2"
|
||||
;;
|
||||
server-Address_List_Change)
|
||||
enable_server_Address_List_Change="$2"
|
||||
;;
|
||||
server-ClipCursor)
|
||||
enable_server_ClipCursor="$2"
|
||||
;;
|
||||
@ -1595,9 +1579,6 @@ if test "$enable_category_stable" -eq 1; then
|
||||
if test "$enable_opengl32_Revert_Disable_Ext" -gt 1; then
|
||||
abort "Patchset opengl32-Revert_Disable_Ext disabled, but category-stable depends on that."
|
||||
fi
|
||||
if test "$enable_server_Address_List_Change" -gt 1; then
|
||||
abort "Patchset server-Address_List_Change disabled, but category-stable depends on that."
|
||||
fi
|
||||
if test "$enable_server_ClipCursor" -gt 1; then
|
||||
abort "Patchset server-ClipCursor disabled, but category-stable depends on that."
|
||||
fi
|
||||
@ -1728,7 +1709,6 @@ if test "$enable_category_stable" -eq 1; then
|
||||
enable_ntdll_User_Shared_Data=1
|
||||
enable_ntdll_WriteWatches=1
|
||||
enable_opengl32_Revert_Disable_Ext=1
|
||||
enable_server_Address_List_Change=1
|
||||
enable_server_ClipCursor=1
|
||||
enable_server_CreateProcess_ACLs=1
|
||||
enable_server_Delete_On_Close=1
|
||||
@ -1911,13 +1891,6 @@ if test "$enable_ntdll_Junction_Points" -eq 1; then
|
||||
enable_ntdll_NtQueryEaFile=1
|
||||
fi
|
||||
|
||||
if test "$enable_ntdll_NtQueryEaFile" -eq 1; then
|
||||
if test "$enable_ntdll_Empty_Path" -gt 1; then
|
||||
abort "Patchset ntdll-Empty_Path disabled, but ntdll-NtQueryEaFile depends on that."
|
||||
fi
|
||||
enable_ntdll_Empty_Path=1
|
||||
fi
|
||||
|
||||
if test "$enable_ntdll_Fix_Alignment" -eq 1; then
|
||||
if test "$enable_ntdll_Virtual_Memory_Stack" -gt 1; then
|
||||
abort "Patchset ntdll-Virtual_Memory_Stack disabled, but ntdll-Fix_Alignment depends on that."
|
||||
@ -2446,21 +2419,6 @@ if test "$enable_crypt32_CryptUnprotectMemory" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset d3d8-D3DSWAPEFFECT_COPY_VSYNC
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#39281] Implement semi-stub for d3d8 swapchain effect D3DSWAPEFFECT_COPY_VSYNC
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/d3d8/device.c
|
||||
# |
|
||||
if test "$enable_d3d8_D3DSWAPEFFECT_COPY_VSYNC" -eq 1; then
|
||||
patch_apply d3d8-D3DSWAPEFFECT_COPY_VSYNC/0001-d3d8-Handle-D3DSWAPEFFECT_COPY_VSYNC-swapchain-effec.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "d3d8: Handle D3DSWAPEFFECT_COPY_VSYNC swapchain effect like D3DSWAPEFFECT_COPY.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset d3d9-DesktopWindow
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -3651,24 +3609,6 @@ if test "$enable_kernel32_SetFileCompletionNotificationModes" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-ThreadGroupAffinity
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#36549] Implement {Set,Get}ThreadGroupAffinity and related ntdll functions
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/kernel32/kernel32.spec, dlls/kernel32/tests/thread.c, dlls/kernel32/thread.c, dlls/ntdll/thread.c,
|
||||
# | include/winternl.h
|
||||
# |
|
||||
if test "$enable_kernel32_ThreadGroupAffinity" -eq 1; then
|
||||
patch_apply kernel32-ThreadGroupAffinity/0001-ntdll-Implement-ThreadGroupInformation-class.patch
|
||||
patch_apply kernel32-ThreadGroupAffinity/0002-kernel32-Implement-Set-GetThreadGroupAffinity.patch
|
||||
(
|
||||
echo '+ { "Michael Müller", "ntdll: Implement ThreadGroupInformation class.", 1 },';
|
||||
echo '+ { "Michael Müller", "kernel32: Implement Set/GetThreadGroupAffinity.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-TimezoneInformation_Registry
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -4095,21 +4035,6 @@ if test "$enable_ntdll_DllRedirects" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-Empty_Path
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#39133] Return STATUS_OBJECT_NAME_INVALID in wine_nt_to_unix_file_name for paths that only contain a prefix
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/kernel32/tests/file.c, dlls/ntdll/directory.c, dlls/ntdll/tests/file.c
|
||||
# |
|
||||
if test "$enable_ntdll_Empty_Path" -eq 1; then
|
||||
patch_apply ntdll-Empty_Path/0001-ntdll-Return-STATUS_OBJECT_NAME_INVALID-in-wine_nt_t.patch
|
||||
(
|
||||
echo '+ { "Michael Müller", "ntdll: Return STATUS_OBJECT_NAME_INVALID in wine_nt_to_unix_file_name for paths that only contain a prefix.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-Exception
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -4225,9 +4150,6 @@ fi
|
||||
|
||||
# Patchset ntdll-NtQueryEaFile
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * ntdll-Empty_Path
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/file.c, dlls/ntdll/tests/file.c
|
||||
# |
|
||||
@ -4241,7 +4163,7 @@ fi
|
||||
# Patchset ntdll-Junction_Points
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * ntdll-Fix_Free, ntdll-Empty_Path, ntdll-NtQueryEaFile
|
||||
# | * ntdll-Fix_Free, ntdll-NtQueryEaFile
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#12401] Support for Junction Points
|
||||
@ -4749,21 +4671,6 @@ if test "$enable_secur32_ANSI_NTLM_Credentials" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-Address_List_Change
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#38062] Support for non-blocking SIO_ADDRESS_LIST_CHANGE requests
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * server/sock.c
|
||||
# |
|
||||
if test "$enable_server_Address_List_Change" -eq 1; then
|
||||
patch_apply server-Address_List_Change/0001-server-Return-STATUS_CANT_WAIT-WSAEWOULDBLOCK-for-no.patch
|
||||
(
|
||||
echo '+ { "Erich E. Hoover", "server: Return STATUS_CANT_WAIT/WSAEWOULDBLOCK for non-overlapped SIO_ADDRESS_LIST_CHANGE requests on non-blocking sockets.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-ClipCursor
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 9d55100d71863cfcbf71114d3578be1d58f74377 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@wine-staging.com>
|
||||
Date: Fri, 20 Feb 2015 14:03:34 -0700
|
||||
Subject: server: Return STATUS_CANT_WAIT/WSAEWOULDBLOCK for non-overlapped
|
||||
SIO_ADDRESS_LIST_CHANGE requests on non-blocking sockets.
|
||||
|
||||
---
|
||||
server/sock.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/server/sock.c b/server/sock.c
|
||||
index 67d6416..1767dea 100644
|
||||
--- a/server/sock.c
|
||||
+++ b/server/sock.c
|
||||
@@ -546,6 +546,11 @@ obj_handle_t sock_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *a
|
||||
switch(code)
|
||||
{
|
||||
case WS_SIO_ADDRESS_LIST_CHANGE:
|
||||
+ if ((sock->state & FD_WINE_NONBLOCKING) && !blocking)
|
||||
+ {
|
||||
+ set_error( STATUS_CANT_WAIT );
|
||||
+ return 0;
|
||||
+ }
|
||||
if (!(ifchange_q = sock_get_ifchange_q( sock ))) return 0;
|
||||
if (!(async = create_async( current, ifchange_q, async_data ))) return 0;
|
||||
if (blocking) wait_handle = alloc_handle( current->process, async, SYNCHRONIZE, 0 );
|
||||
--
|
||||
2.4.0
|
||||
|
@ -1,2 +0,0 @@
|
||||
Fixes: [38062] Support for non-blocking SIO_ADDRESS_LIST_CHANGE requests
|
||||
Category: stable
|
Loading…
Reference in New Issue
Block a user