Rebase againsts 9ae8b8c00f2cca205fdf4ce76e221778b7dfbea7

This commit is contained in:
Alistair Leslie-Hughes 2018-02-27 09:23:02 +11:00
parent ef8e90cbdc
commit a1ec166849
22 changed files with 539 additions and 686 deletions

View File

@ -1,7 +1,7 @@
From 1546d28f3e52363ad805a1c1df1a3163d65afbed Mon Sep 17 00:00:00 2001
From 796879e9a1840f7b893933d37821751cf1d35048 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 5 Aug 2017 04:02:16 +0200
Subject: kernel32: Implement CreateProcessInternalW.
Subject: [PATCH] kernel32: Implement CreateProcessInternalW.
---
dlls/kernel32/kernel32.spec | 2 +-
@ -11,7 +11,7 @@ Subject: kernel32: Implement CreateProcessInternalW.
4 files changed, 17 insertions(+), 12 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index c60c5d6e532..7b5397a126e 100644
index 60809f4..59915f9 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -315,7 +315,7 @@
@ -24,10 +24,10 @@ index c60c5d6e532..7b5397a126e 100644
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr)
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 46449c9bf34..6cae911fdfb 100644
index e7f9fd9..d37003c 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -2441,12 +2441,13 @@ static LPWSTR get_file_name( LPCWSTR appname, LPWSTR cmdline, LPWSTR buffer,
@@ -2432,12 +2432,13 @@ static LPWSTR get_file_name( LPCWSTR appname, LPWSTR cmdline, LPWSTR buffer,
return ret;
}
@ -47,7 +47,7 @@ index 46449c9bf34..6cae911fdfb 100644
{
BOOL retv = FALSE;
HANDLE hFile = 0;
@@ -2459,6 +2460,9 @@ static BOOL create_process_impl( LPCWSTR app_name, LPWSTR cmd_line, LPSECURITY_A
@@ -2450,6 +2451,9 @@ static BOOL create_process_impl( LPCWSTR app_name, LPWSTR cmd_line, LPSECURITY_A
TRACE("app %s cmdline %s\n", debugstr_w(app_name), debugstr_w(cmd_line) );
@ -57,7 +57,7 @@ index 46449c9bf34..6cae911fdfb 100644
if (!(tidy_cmdline = get_file_name( app_name, cmd_line, name, sizeof(name)/sizeof(WCHAR),
&hFile, &binary_info )))
return FALSE;
@@ -2610,8 +2614,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA( LPCSTR app_name, LPSTR cmd_line, L
@@ -2601,8 +2605,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA( LPCSTR app_name, LPSTR cmd_line, L
FIXME("StartupInfo.lpReserved is used, please report (%s)\n",
debugstr_a(startup_info->lpReserved));
@ -68,7 +68,7 @@ index 46449c9bf34..6cae911fdfb 100644
done:
HeapFree( GetProcessHeap(), 0, app_nameW );
HeapFree( GetProcessHeap(), 0, cmd_lineW );
@@ -2630,8 +2634,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW( LPCWSTR app_name, LPWSTR cmd_line,
@@ -2621,8 +2625,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW( LPCWSTR app_name, LPWSTR cmd_line,
LPVOID env, LPCWSTR cur_dir, LPSTARTUPINFOW startup_info,
LPPROCESS_INFORMATION info )
{
@ -80,7 +80,7 @@ index 46449c9bf34..6cae911fdfb 100644
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index bf254155aab..7b8c8c44161 100644
index 1a6f1ff..8d2b722 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -209,7 +209,7 @@
@ -91,12 +91,12 @@ index bf254155aab..7b8c8c44161 100644
+@ stdcall CreateProcessInternalW(long wstr wstr ptr ptr long long ptr wstr ptr ptr ptr) kernel32.CreateProcessInternalW
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread
@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) kernel32.CreateRemoteThreadEx
@ stdcall CreateRemoteThreadEx(long ptr long ptr ptr long ptr ptr) kernel32.CreateRemoteThreadEx
diff --git a/include/winbase.h b/include/winbase.h
index 24efbd865ab..7982fa4a070 100644
index 8d65d78..35a2213 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -1847,6 +1847,7 @@ WINBASEAPI BOOL WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTE
@@ -1856,6 +1856,7 @@ WINBASEAPI BOOL WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTE
WINADVAPI BOOL WINAPI CreateProcessAsUserA(HANDLE,LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION);
WINADVAPI BOOL WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
#define CreateProcessAsUser WINELIB_NAME_AW(CreateProcessAsUser)
@ -105,5 +105,5 @@ index 24efbd865ab..7982fa4a070 100644
WINBASEAPI HANDLE WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
WINBASEAPI HANDLE WINAPI CreateRemoteThreadEx(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPPROC_THREAD_ATTRIBUTE_LIST,LPDWORD);
--
2.13.1
1.9.1

View File

@ -1,61 +0,0 @@
From 9d5dcc2d2b1087294f16173efba8c381c3292316 Mon Sep 17 00:00:00 2001
From: Louis Lenders <xerox.xerox2000x@gmail.com>
Date: Sat, 23 Sep 2017 01:06:40 +0200
Subject: kernel32: add message resource for TRUST_E_NOSIGNATURE
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Based on a patch by Austin English.
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
Signed-off-by: Michael Müller <michael@fds-team.de>
---
dlls/kernel32/tests/format_msg.c | 4 ++++
dlls/kernel32/winerror.mc | 11 +++++++++++
2 files changed, 15 insertions(+)
diff --git a/dlls/kernel32/tests/format_msg.c b/dlls/kernel32/tests/format_msg.c
index 1f88e2465b8..08a35c53cd2 100644
--- a/dlls/kernel32/tests/format_msg.c
+++ b/dlls/kernel32/tests/format_msg.c
@@ -1559,6 +1559,10 @@ static void test_message_from_hmodule(void)
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), out, sizeof(out)/sizeof(CHAR), NULL);
ok(ret != 0, "FormatMessageA returned 0\n");
+ ret = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE, h, TRUST_E_NOSIGNATURE,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), out, sizeof(out)/sizeof(CHAR), NULL);
+ ok(ret != 0, "FormatMessageA returned 0\n");
+
/* Test a message string with an insertion without passing any variadic arguments. */
ret = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE, h, 193 /* ERROR_BAD_EXE_FORMAT */,
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), out, sizeof(out)/sizeof(CHAR), NULL);
diff --git a/dlls/kernel32/winerror.mc b/dlls/kernel32/winerror.mc
index dc17f499b55..141af216ec7 100644
--- a/dlls/kernel32/winerror.mc
+++ b/dlls/kernel32/winerror.mc
@@ -18,6 +18,10 @@
LanguageNames=(ENU=0x409:winerr)
+SeverityNames=(CoError=0x2:STATUS_SEVERITY_COERROR)
+
+FacilityNames=(Trust=0xb:FACILITY_CERT)
+
MessageId=0
SymbolicName=ERROR_SUCCESS
Language=ENU
@@ -3748,3 +3752,10 @@ SymbolicName=WSAECONNREFUSED
Language=ENU
Connection refused.
.
+MessageId=0x100
+Severity=CoError
+Facility=Trust
+SymbolicName=TRUST_E_NOSIGNATURE
+Language=ENU
+No Signature found in file.
+.
--
2.14.1

View File

@ -1 +0,0 @@
Fixes: [43041] Add missing message string for TRUST_E_NOSIGNATURE

View File

@ -1,74 +1,21 @@
From 46e49340da6151f517a23d77ab9eed45b9e6982c Mon Sep 17 00:00:00 2001
From 382ce2af9afc78d09793854af6105bde6d7a8151 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Thu, 16 Jun 2016 18:56:21 +0800
Subject: kernel32: Add a bunch of kernel32 stubs.
Subject: [PATCH] kernel32: Add a bunch of kernel32 stubs.
64-bit ACDSee Pro 9.0 on start up queries them with GetProcAddress() and
fails to start if any of these APIs is missing.
---
.../api-ms-win-core-processthreads-l1-1-0.spec | 2 +-
.../api-ms-win-core-processthreads-l1-1-1.spec | 2 +-
.../api-ms-win-core-processthreads-l1-1-2.spec | 2 +-
dlls/kernel32/kernel32.spec | 28 ++--
dlls/kernel32/sync.c | 145 +++++++++++++++++++++
dlls/kernel32/thread.c | 12 ++
dlls/kernelbase/kernelbase.spec | 2 +-
include/winbase.h | 18 +++
include/winnt.h | 22 +++-
9 files changed, 214 insertions(+), 19 deletions(-)
dlls/kernel32/kernel32.spec | 26 ++++----
dlls/kernel32/sync.c | 145 ++++++++++++++++++++++++++++++++++++++++++++
include/winbase.h | 17 ++++++
include/winnt.h | 22 ++++++-
4 files changed, 196 insertions(+), 14 deletions(-)
diff --git a/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec b/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec
index 77414bc367c..6a41d51fd39 100644
--- a/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec
+++ b/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec
@@ -2,7 +2,7 @@
@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) advapi32.CreateProcessAsUserW
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread
-@ stub CreateRemoteThreadEx
+@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) kernel32.CreateRemoteThreadEx
@ stdcall CreateThread(ptr long ptr long long ptr) kernel32.CreateThread
@ stdcall DeleteProcThreadAttributeList(ptr) kernel32.DeleteProcThreadAttributeList
@ stdcall ExitProcess(long) kernel32.ExitProcess
diff --git a/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec b/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec
index 149678995cc..04329650096 100644
--- a/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec
+++ b/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec
@@ -2,7 +2,7 @@
@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) advapi32.CreateProcessAsUserW
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread
-@ stub CreateRemoteThreadEx
+@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) kernel32.CreateRemoteThreadEx
@ stdcall CreateThread(ptr long ptr long long ptr) kernel32.CreateThread
@ stdcall DeleteProcThreadAttributeList(ptr) kernel32.DeleteProcThreadAttributeList
@ stdcall ExitProcess(long) kernel32.ExitProcess
diff --git a/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec b/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec
index 7bfbe72106e..4607da257ba 100644
--- a/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec
+++ b/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec
@@ -2,7 +2,7 @@
@ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) advapi32.CreateProcessAsUserW
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread
-@ stub CreateRemoteThreadEx
+@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) kernel32.CreateRemoteThreadEx
@ stdcall CreateThread(ptr long ptr long long ptr) kernel32.CreateThread
@ stdcall DeleteProcThreadAttributeList(ptr) kernel32.DeleteProcThreadAttributeList
@ stdcall ExitProcess(long) kernel32.ExitProcess
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 1a11af579f4..87583cd8f78 100644
index ee11c42..60809f4 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -319,7 +319,7 @@
# @ stub CreateProcessInternalWSecure
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr)
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr)
-# @ stub CreateRemoteThreadEx
+@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr)
@ stdcall CreateSemaphoreA(ptr long long str)
@ stdcall CreateSemaphoreExA(ptr long long str long long)
@ stdcall CreateSemaphoreExW(ptr long long wstr long long)
@@ -340,8 +340,8 @@
@ stdcall CreateTimerQueue ()
@ stdcall CreateTimerQueueTimer(ptr long ptr ptr long long long)
@ -163,7 +110,7 @@ index 1a11af579f4..87583cd8f78 100644
@ stdcall -i386 -private UTRegister(long str str str ptr ptr ptr) krnl386.exe16.UTRegister
@ stdcall -i386 -private UTUnRegister(long) krnl386.exe16.UTUnRegister
diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c
index d3d46b7dc89..b0ed3c5fca3 100644
index d3d46b7..b0ed3c5 100644
--- a/dlls/kernel32/sync.c
+++ b/dlls/kernel32/sync.c
@@ -2454,3 +2454,148 @@ BOOL WINAPI SleepConditionVariableSRW( RTL_CONDITION_VARIABLE *variable, RTL_SRW
@ -315,47 +262,11 @@ index d3d46b7dc89..b0ed3c5fca3 100644
+ SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
+ return FALSE;
+}
diff --git a/dlls/kernel32/thread.c b/dlls/kernel32/thread.c
index a30428fb277..2e26a9438c0 100644
--- a/dlls/kernel32/thread.c
+++ b/dlls/kernel32/thread.c
@@ -113,6 +113,18 @@ HANDLE WINAPI CreateRemoteThread( HANDLE hProcess, SECURITY_ATTRIBUTES *sa, SIZE
}
+/***************************************************************************
+ * CreateRemoteThreadEx (KERNEL32.@)
+ */
+HANDLE WINAPI CreateRemoteThreadEx( HANDLE hProcess, SECURITY_ATTRIBUTES *sa, SIZE_T stack,
+ LPTHREAD_START_ROUTINE start, LPVOID param, DWORD flags,
+ LPPROC_THREAD_ATTRIBUTE_LIST attrs, LPDWORD id )
+{
+ FIXME( "attribute list ignored\n" );
+ return CreateRemoteThread( hProcess, sa, stack, start, param, flags, id );
+}
+
+
/***********************************************************************
* OpenThread [KERNEL32.@] Retrieves a handle to a thread from its thread id
*/
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index bb80f212936..36eee6f9925 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -212,7 +212,7 @@
# @ stub CreateProcessInternalW
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread
-@ stub CreateRemoteThreadEx
+@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) kernel32.CreateRemoteThreadEx
@ stdcall CreateRestrictedToken(long long long ptr long ptr long ptr ptr) advapi32.CreateRestrictedToken
@ stdcall CreateSemaphoreExW(ptr long long wstr long long) kernel32.CreateSemaphoreExW
@ stdcall CreateSemaphoreW(ptr long long wstr) kernel32.CreateSemaphoreW
diff --git a/include/winbase.h b/include/winbase.h
index 1347f8cd1c3..8f9c5a1f649 100644
index e47c87a..8d65d78 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -1685,6 +1685,20 @@ typedef enum _PROC_THREAD_ATTRIBUTE_NUM
@@ -1694,6 +1694,20 @@ typedef enum _PROC_THREAD_ATTRIBUTE_NUM
#define SYMBOLIC_LINK_FLAG_DIRECTORY (0x1)
#define VALID_SYMBOLIC_LINK_FLAGS SYMBOLIC_LINK_FLAG_DIRECTORY
@ -376,15 +287,7 @@ index 1347f8cd1c3..8f9c5a1f649 100644
WINBASEAPI BOOL WINAPI ActivateActCtx(HANDLE,ULONG_PTR *);
WINADVAPI BOOL WINAPI AddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
WINADVAPI BOOL WINAPI AddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
@@ -1834,6 +1848,7 @@ WINADVAPI BOOL WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECUR
#define CreateProcessAsUser WINELIB_NAME_AW(CreateProcessAsUser)
WINADVAPI BOOL WINAPI CreateProcessWithLogonW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPWSTR,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
WINBASEAPI HANDLE WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
+WINBASEAPI HANDLE WINAPI CreateRemoteThreadEx(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPPROC_THREAD_ATTRIBUTE_LIST,LPDWORD);
WINADVAPI BOOL WINAPI CreateRestrictedToken(HANDLE,DWORD,DWORD,PSID_AND_ATTRIBUTES,DWORD,PLUID_AND_ATTRIBUTES,DWORD,PSID_AND_ATTRIBUTES,PHANDLE);
WINBASEAPI HANDLE WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR);
WINBASEAPI HANDLE WINAPI CreateSemaphoreW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR);
@@ -1851,6 +1866,8 @@ WINBASEAPI DWORD WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD);
@@ -1862,6 +1876,8 @@ WINBASEAPI DWORD WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD);
WINBASEAPI HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
WINBASEAPI HANDLE WINAPI CreateTimerQueue(void);
WINBASEAPI BOOL WINAPI CreateTimerQueueTimer(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,ULONG);
@ -393,7 +296,7 @@ index 1347f8cd1c3..8f9c5a1f649 100644
WINBASEAPI HANDLE WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
WINBASEAPI HANDLE WINAPI CreateWaitableTimerW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);
#define CreateWaitableTimer WINELIB_NAME_AW(CreateWaitableTimer)
@@ -1909,6 +1926,7 @@ WINBASEAPI BOOL WINAPI EndUpdateResourceA(HANDLE,BOOL);
@@ -1920,6 +1936,7 @@ WINBASEAPI BOOL WINAPI EndUpdateResourceA(HANDLE,BOOL);
WINBASEAPI BOOL WINAPI EndUpdateResourceW(HANDLE,BOOL);
#define EndUpdateResource WINELIB_NAME_AW(EndUpdateResource)
WINBASEAPI void WINAPI EnterCriticalSection(CRITICAL_SECTION *lpCrit);
@ -402,10 +305,10 @@ index 1347f8cd1c3..8f9c5a1f649 100644
WINBASEAPI BOOL WINAPI EnumResourceLanguagesW(HMODULE,LPCWSTR,LPCWSTR,ENUMRESLANGPROCW,LONG_PTR);
#define EnumResourceLanguages WINELIB_NAME_AW(EnumResourceLanguages)
diff --git a/include/winnt.h b/include/winnt.h
index 450499c1299..5bd1b1b4a83 100644
index 56b533c..6b598f3 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -6016,9 +6016,29 @@ typedef VOID (CALLBACK *PTP_TIMER_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_TIME
@@ -6120,9 +6120,29 @@ typedef VOID (CALLBACK *PTP_TIMER_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_TIME
typedef VOID (CALLBACK *PTP_WAIT_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_WAIT,TP_WAIT_RESULT);
typedef VOID (CALLBACK *PTP_WIN32_IO_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PVOID,ULONG,ULONG_PTR,PTP_IO);
@ -437,5 +340,5 @@ index 450499c1299..5bd1b1b4a83 100644
}
#endif
--
2.13.0
1.9.1

View File

@ -1,28 +1,147 @@
From 8ad1946fb6af9ee34ea4a85adde57c9b6f9cc523 Mon Sep 17 00:00:00 2001
From be07aec481bc78b79e1ab0f31385312cda34b4d8 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Mon, 1 Dec 2014 11:28:26 +0100
Subject: kernel32/tests: Add additional tests for condition mask of
Subject: [PATCH] kernel32/tests: Add additional tests for condition mask of
VerifyVersionInfoA.
---
dlls/kernel32/tests/version.c | 338 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 338 insertions(+)
dlls/kernel32/tests/version.c | 450 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 450 insertions(+)
diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c
index a47e52c..248f01c 100644
index 49a9357..1a6a0d4 100644
--- a/dlls/kernel32/tests/version.c
+++ b/dlls/kernel32/tests/version.c
@@ -353,6 +353,344 @@ static void test_VerifyVersionInfo(void)
pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
@@ -596,6 +596,7 @@ static void test_VerifyVersionInfo(void)
DWORD servicepack;
unsigned int i;
BOOL ret;
+ DWORD error;
/* Before we start doing some tests we should check what the version of
* the ServicePack is. Tests on a box with no ServicePack will fail otherwise.
@@ -702,6 +703,455 @@ static void test_VerifyVersionInfo(void)
VER_MAJORVERSION, VER_GREATER_EQUAL));
ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMinor++;
+ SetLastError(0xdeadbeef);
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some wink2 */,
+ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
+
+ if (servicepack == 0)
+ {
+ skip("There is no ServicePack on this system\n");
+ }
+ else
+ {
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor--;
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER));
+ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor--;
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
+ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+ }
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_LESS));
+ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_LESS_EQUAL));
+ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor--;
+ SetLastError(0xdeadbeef);
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
+ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
+
+ /* test the failure hierarchy for the four version fields */
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ SetLastError(0xdeadbeef);
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
+ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.dwMinorVersion++;
+ SetLastError(0xdeadbeef);
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
+ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.dwMajorVersion++;
+ SetLastError(0xdeadbeef);
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
+ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
+
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
+ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.dwBuildNumber++;
+ SetLastError(0xdeadbeef);
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
+ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
+
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
+ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ /* systematically test behaviour of condition mask (tests sorted by condition mask value) */
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.dwMinorVersion++;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_MINORVERSION, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_MINORVERSION, VER_LESS));
+ todo_wine
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
@ -30,8 +149,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.dwMinorVersion++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -39,29 +158,29 @@ index a47e52c..248f01c 100644
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_LESS));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_AND));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_AND));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.dwMinorVersion++;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_LESS_EQUAL), VER_MINORVERSION, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_LESS_EQUAL), VER_MINORVERSION, VER_LESS));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.dwMinorVersion++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_AND), VER_MINORVERSION, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_AND), VER_MINORVERSION, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -71,8 +190,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.dwMinorVersion++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_OR), VER_MINORVERSION, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_OR), VER_MINORVERSION, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -82,8 +201,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMinor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -93,8 +212,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMinor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -104,8 +223,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -117,16 +236,16 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.dwMajorVersion++;
+ info.wServicePackMajor--;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_LESS), VER_SERVICEPACKMAJOR, VER_EQUAL));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_LESS), VER_SERVICEPACKMAJOR, VER_EQUAL));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+ }
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMinor++;
+ ret = pVerifyVersionInfoA(&info, VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ todo_wine
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
@ -134,8 +253,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMinor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -144,8 +263,8 @@ index a47e52c..248f01c 100644
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMinor++;
+ ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL),
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL),
+ VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ todo_wine
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
@ -154,8 +273,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMinor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL),
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL),
+ VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
@ -165,8 +284,8 @@ index a47e52c..248f01c 100644
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMinor++;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL),
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL),
+ VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ todo_wine
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
@ -175,8 +294,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMinor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL),
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL),
+ VER_MINORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
@ -189,8 +308,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor--;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -199,24 +318,24 @@ index a47e52c..248f01c 100644
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor--;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
+ VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor--;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
+ VER_MINORVERSION, VER_LESS_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor--;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
+ VER_MINORVERSION, VER_AND), VER_SERVICEPACKMAJOR, VER_GREATER));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+ }
@ -224,8 +343,8 @@ index a47e52c..248f01c 100644
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_LESS_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_LESS_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ if (servicepack)
@ -234,8 +353,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor--;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_GREATER), VER_SERVICEPACKMINOR, VER_EQUAL));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_GREATER), VER_SERVICEPACKMINOR, VER_EQUAL));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -245,8 +364,8 @@ index a47e52c..248f01c 100644
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ todo_wine
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
@ -254,8 +373,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -264,8 +383,8 @@ index a47e52c..248f01c 100644
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ todo_wine
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
@ -273,8 +392,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -283,8 +402,8 @@ index a47e52c..248f01c 100644
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL),
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL),
+ VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ todo_wine
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
@ -293,8 +412,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -303,22 +422,22 @@ index a47e52c..248f01c 100644
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.dwMajorVersion--;
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
+ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
@ -328,8 +447,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
+ VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
@ -340,8 +459,8 @@ index a47e52c..248f01c 100644
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ info.wServicePackMajor++;
+ SetLastError(0xdeadbeef);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),
+ VER_MINORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS_EQUAL));
+ error = GetLastError();
+ ok(!ret, "VerifyVersionInfoA succeeded\n");
@ -350,13 +469,13 @@ index a47e52c..248f01c 100644
+
+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ GetVersionExA((OSVERSIONINFOA *)&info);
+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_AND));
+ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_AND));
+ ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+
/* test bad dwOSVersionInfoSize */
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
GetVersionExA((OSVERSIONINFOA *)&info);
--
2.1.3
1.9.1

View File

@ -1,78 +1,46 @@
From ca7be85de4f395713f3b388d6eb1ce7399b5e2d8 Mon Sep 17 00:00:00 2001
From ac09483f10409c0f5de9bee8f160c8be45ee351f Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Mon, 1 Dec 2014 11:30:58 +0100
Subject: ntdll: Fix condition mask handling in RtlVerifyVersionInfo.
Subject: [PATCH] ntdll: Fix condition mask handling in RtlVerifyVersionInfo.
---
dlls/kernel32/tests/version.c | 7 ------
dlls/kernel32/tests/version.c | 3 ---
dlls/ntdll/version.c | 50 ++++++++++++++++++++++++++++++++-----------
2 files changed, 37 insertions(+), 20 deletions(-)
2 files changed, 37 insertions(+), 16 deletions(-)
diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c
index 248f01c..4d07176 100644
index 1a6a0d4..db182a3 100644
--- a/dlls/kernel32/tests/version.c
+++ b/dlls/kernel32/tests/version.c
@@ -360,7 +360,6 @@ static void test_VerifyVersionInfo(void)
info.dwMinorVersion++;
ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_MINORVERSION, VER_LESS));
- todo_wine
ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
@@ -464,7 +463,6 @@ static void test_VerifyVersionInfo(void)
info.wServicePackMinor++;
ret = pVerifyVersionInfoA(&info, VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
pVerSetConditionMask(pVerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
- todo_wine
ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
@@ -484,7 +482,6 @@ static void test_VerifyVersionInfo(void)
ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL),
@@ -945,7 +945,6 @@ static void test_VerifyVersionInfo(void)
ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL),
VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
- todo_wine
ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
@@ -505,7 +502,6 @@ static void test_VerifyVersionInfo(void)
ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL),
@@ -966,7 +965,6 @@ static void test_VerifyVersionInfo(void)
ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL),
VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS));
- todo_wine
ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
@@ -584,7 +580,6 @@ static void test_VerifyVersionInfo(void)
info.wServicePackMajor++;
ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
- todo_wine
ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
@@ -603,7 +598,6 @@ static void test_VerifyVersionInfo(void)
info.wServicePackMajor++;
ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
- todo_wine
ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
@@ -623,7 +617,6 @@ static void test_VerifyVersionInfo(void)
ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL),
@@ -1084,7 +1082,6 @@ static void test_VerifyVersionInfo(void)
ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL),
VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS));
- todo_wine
ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
diff --git a/dlls/ntdll/version.c b/dlls/ntdll/version.c
index a6340eb..5d1b445 100644
index 58ccb95..8beef6d 100644
--- a/dlls/ntdll/version.c
+++ b/dlls/ntdll/version.c
@@ -657,6 +657,35 @@ BOOLEAN WINAPI RtlGetNtProductType( LPDWORD type )
@@ -658,6 +658,35 @@ BOOLEAN WINAPI RtlGetNtProductType( LPDWORD type )
}
@ -108,7 +76,7 @@ index a6340eb..5d1b445 100644
static inline NTSTATUS version_compare_values(ULONG left, ULONG right, UCHAR condition)
{
switch (condition) {
@@ -732,38 +761,33 @@ NTSTATUS WINAPI RtlVerifyVersionInfo( const RTL_OSVERSIONINFOEXW *info,
@@ -733,38 +762,33 @@ NTSTATUS WINAPI RtlVerifyVersionInfo( const RTL_OSVERSIONINFOEXW *info,
if(dwTypeMask & (VER_MAJORVERSION|VER_MINORVERSION|VER_SERVICEPACKMAJOR|VER_SERVICEPACKMINOR))
{
@ -156,5 +124,5 @@ index a6340eb..5d1b445 100644
}
--
2.1.3
1.9.1

View File

@ -1,17 +1,17 @@
From 5fb64d317c91b9fbbfc083b1b935df2300d791c4 Mon Sep 17 00:00:00 2001
From acbb7a912a0e0ee171f72683934dabf828f75a53 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 13 Dec 2014 05:34:48 +0100
Subject: [PATCH 5/5] ntdll: Implement loader redirection scheme.
Subject: [PATCH] ntdll: Implement loader redirection scheme.
---
dlls/ntdll/loader.c | 67 +++++++++++++++++++++++++++++++++++------------------
1 file changed, 45 insertions(+), 22 deletions(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index f2b4c3f..8ce4260 100644
index c637f0e..3f755fc 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -97,6 +97,7 @@ struct builtin_load_info
@@ -100,6 +100,7 @@ struct builtin_load_info
{
const WCHAR *load_path;
const WCHAR *filename;
@ -19,7 +19,7 @@ index f2b4c3f..8ce4260 100644
NTSTATUS status;
WINE_MODREF *wm;
};
@@ -122,7 +123,8 @@ static WINE_MODREF *cached_modref;
@@ -125,7 +126,8 @@ static WINE_MODREF *cached_modref;
static WINE_MODREF *current_modref;
static WINE_MODREF *last_failed_modref;
@ -29,7 +29,7 @@ index f2b4c3f..8ce4260 100644
static NTSTATUS process_attach( WINE_MODREF *wm, LPVOID lpReserved );
static FARPROC find_ordinal_export( HMODULE module, const IMAGE_EXPORT_DIRECTORY *exports,
DWORD exp_size, DWORD ordinal, LPCWSTR load_path );
@@ -446,7 +448,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS
@@ -449,7 +451,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS
if (!(wm = find_basename_module( mod_name )))
{
TRACE( "delay loading %s for '%s'\n", debugstr_w(mod_name), forward );
@ -38,7 +38,7 @@ index f2b4c3f..8ce4260 100644
!(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS))
{
if (!imports_fixup_done && current_modref)
@@ -616,7 +618,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP
@@ -619,7 +621,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP
{
ascii_to_unicode( buffer, name, len );
buffer[len] = 0;
@ -47,7 +47,7 @@ index f2b4c3f..8ce4260 100644
}
else /* need to allocate a larger buffer */
{
@@ -624,7 +626,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP
@@ -627,7 +629,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP
if (!ptr) return FALSE;
ascii_to_unicode( ptr, name, len );
ptr[len] = 0;
@ -56,16 +56,16 @@ index f2b4c3f..8ce4260 100644
RtlFreeHeap( GetProcessHeap(), 0, ptr );
}
@@ -909,7 +911,7 @@ static NTSTATUS fixup_imports_ilonly( WINE_MODREF *wm, LPCWSTR load_path, void *
@@ -912,7 +914,7 @@ static NTSTATUS fixup_imports_ilonly( WINE_MODREF *wm, LPCWSTR load_path, void *
prev = current_modref;
current_modref = wm;
- if (!(status = load_dll( load_path, mscoreeW, 0, &imp ))) wm->deps[0] = imp;
+ if (!(status = load_dll( load_path, mscoreeW, NULL, 0, &imp ))) wm->deps[0] = imp;
current_modref = prev;
if (status) return status;
@@ -987,7 +989,7 @@ static NTSTATUS fixup_imports( WINE_MODREF *wm, LPCWSTR load_path )
if (status)
{
@@ -995,7 +997,7 @@ static NTSTATUS fixup_imports( WINE_MODREF *wm, LPCWSTR load_path )
* Allocate a WINE_MODREF structure and add it to the process list
* The loader_section must be locked while calling this function.
*/
@ -74,7 +74,7 @@ index f2b4c3f..8ce4260 100644
{
WINE_MODREF *wm;
const WCHAR *p;
@@ -1009,7 +1011,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename )
@@ -1017,7 +1019,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename )
wm->ldr.TimeDateStamp = 0;
wm->ldr.ActivationContext = 0;
@ -83,7 +83,7 @@ index f2b4c3f..8ce4260 100644
if ((p = strrchrW( wm->ldr.FullDllName.Buffer, '\\' ))) p++;
else p = wm->ldr.FullDllName.Buffer;
RtlInitUnicodeString( &wm->ldr.BaseDllName, p );
@@ -1624,7 +1626,7 @@ static void load_builtin_callback( void *module, const char *filename )
@@ -1722,7 +1724,7 @@ static void load_builtin_callback( void *module, const char *filename )
return;
}
@ -92,7 +92,7 @@ index f2b4c3f..8ce4260 100644
RtlFreeHeap( GetProcessHeap(), 0, fullname );
if (!wm)
{
@@ -1825,8 +1827,8 @@ static BOOL is_valid_binary( const pe_image_info_t *info )
@@ -1923,8 +1925,8 @@ static BOOL is_valid_binary( const pe_image_info_t *info )
/******************************************************************************
* load_native_dll (internal)
*/
@ -103,7 +103,7 @@ index f2b4c3f..8ce4260 100644
{
void *module;
HANDLE mapping;
@@ -1869,7 +1871,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file,
@@ -1967,7 +1969,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file,
/* create the MODREF */
@ -112,7 +112,7 @@ index f2b4c3f..8ce4260 100644
{
if (module) NtUnmapViewOfSection( NtCurrentProcess(), module );
return STATUS_NO_MEMORY;
@@ -1931,8 +1933,8 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file,
@@ -2029,8 +2031,8 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file,
/***********************************************************************
* load_builtin_dll
*/
@ -123,7 +123,7 @@ index f2b4c3f..8ce4260 100644
{
char error[256], dllname[MAX_PATH];
const WCHAR *name, *p;
@@ -1952,6 +1954,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file,
@@ -2050,6 +2052,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file,
*/
info.load_path = load_path;
info.filename = NULL;
@ -131,7 +131,7 @@ index f2b4c3f..8ce4260 100644
info.status = STATUS_SUCCESS;
info.wm = NULL;
@@ -2399,7 +2402,8 @@ overflow:
@@ -2497,7 +2500,8 @@ overflow:
* Load a PE style module according to the load order.
* The loader_section must be locked while calling this function.
*/
@ -141,7 +141,7 @@ index f2b4c3f..8ce4260 100644
{
BOOL data = flags & (LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE);
enum loadorder loadorder;
@@ -2437,6 +2441,25 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
@@ -2535,6 +2539,25 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
}
main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress );
@ -167,7 +167,7 @@ index f2b4c3f..8ce4260 100644
loadorder = get_load_order( main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, filename );
if (handle && is_fake_dll( handle ))
@@ -2459,22 +2482,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
@@ -2557,22 +2580,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
if (!handle) nts = STATUS_DLL_NOT_FOUND;
else
{
@ -195,7 +195,7 @@ index f2b4c3f..8ce4260 100644
if (nts == STATUS_SUCCESS && loadorder == LO_DEFAULT &&
(MODULE_InitDLL( *pwm, DLL_WINE_PREATTACH, NULL ) != STATUS_SUCCESS))
{
@@ -2484,7 +2507,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
@@ -2582,7 +2605,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
nts = STATUS_DLL_NOT_FOUND;
}
if (nts == STATUS_DLL_NOT_FOUND && loadorder != LO_BUILTIN)
@ -204,7 +204,7 @@ index f2b4c3f..8ce4260 100644
break;
}
@@ -2517,7 +2540,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags,
@@ -2615,7 +2638,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags,
RtlEnterCriticalSection( &loader_section );
if (!path_name) path_name = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer;
@ -213,7 +213,7 @@ index f2b4c3f..8ce4260 100644
if (nts == STATUS_SUCCESS && !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS))
{
@@ -3478,7 +3501,7 @@ void __wine_process_init(void)
@@ -3645,7 +3668,7 @@ void __wine_process_init(void)
/* setup the load callback and create ntdll modref */
wine_dll_set_callback( load_builtin_callback );
@ -223,5 +223,5 @@ index f2b4c3f..8ce4260 100644
MESSAGE( "wine: could not load kernel32.dll, status %x\n", status );
exit(1);
--
2.7.4
1.9.1

View File

@ -52,7 +52,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "7be8beab68c5074e78c899acac7ccb6eb2f7e22e"
echo "9ae8b8c00f2cca205fdf4ce76e221778b7dfbea7"
}
# Show version information
@ -196,7 +196,6 @@ patch_enable_all ()
enable_kernel32_Profile="$1"
enable_kernel32_SCSI_Sysfs="$1"
enable_kernel32_SetFileCompletionNotificationModes="$1"
enable_kernel32_TRUST_E_NOSIGNATURE="$1"
enable_kernel32_TimezoneInformation_Registry="$1"
enable_kernel32_UmsStubs="$1"
enable_kernel32_VerifyVersionInfo="$1"
@ -481,7 +480,6 @@ patch_enable_all ()
enable_ws2_32_WSACleanup="$1"
enable_ws2_32_getaddrinfo="$1"
enable_ws2_32_getsockopt="$1"
enable_ws2_32_setsockopt="$1"
enable_wtsapi32_EnumerateProcesses="$1"
enable_wtsapi32_WTSQueryUserToken="$1"
enable_wuauserv_Dummy_Service="$1"
@ -832,9 +830,6 @@ patch_enable ()
kernel32-SetFileCompletionNotificationModes)
enable_kernel32_SetFileCompletionNotificationModes="$2"
;;
kernel32-TRUST_E_NOSIGNATURE)
enable_kernel32_TRUST_E_NOSIGNATURE="$2"
;;
kernel32-TimezoneInformation_Registry)
enable_kernel32_TimezoneInformation_Registry="$2"
;;
@ -1687,9 +1682,6 @@ patch_enable ()
ws2_32-getsockopt)
enable_ws2_32_getsockopt="$2"
;;
ws2_32-setsockopt)
enable_ws2_32_setsockopt="$2"
;;
wtsapi32-EnumerateProcesses)
enable_wtsapi32_EnumerateProcesses="$2"
;;
@ -5082,21 +5074,6 @@ if test "$enable_kernel32_SetFileCompletionNotificationModes" -eq 1; then
) >> "$patchlist"
fi
# Patchset kernel32-TRUST_E_NOSIGNATURE
# |
# | This patchset fixes the following Wine bugs:
# | * [#43041] Add missing message string for TRUST_E_NOSIGNATURE
# |
# | Modified files:
# | * dlls/kernel32/tests/format_msg.c, dlls/kernel32/winerror.mc
# |
if test "$enable_kernel32_TRUST_E_NOSIGNATURE" -eq 1; then
patch_apply kernel32-TRUST_E_NOSIGNATURE/0001-kernel32-add-message-resource-for-TRUST_E_NOSIGNATUR.patch
(
printf '%s\n' '+ { "Louis Lenders", "kernel32: Add message resource for TRUST_E_NOSIGNATURE.", 1 },';
) >> "$patchlist"
fi
# Patchset kernel32-TimezoneInformation_Registry
# |
# | Modified files:
@ -9862,18 +9839,6 @@ if test "$enable_ws2_32_getsockopt" -eq 1; then
) >> "$patchlist"
fi
# Patchset ws2_32-setsockopt
# |
# | Modified files:
# | * dlls/ws2_32/socket.c, include/winsock.h
# |
if test "$enable_ws2_32_setsockopt" -eq 1; then
patch_apply ws2_32-setsockopt/0001-w2_32-Ignore-setting-several-port-assignment-related.patch
(
printf '%s\n' '+ { "Michael Müller", "w2_32: Ignore setting several port assignment related socket options.", 1 },';
) >> "$patchlist"
fi
# Patchset wtsapi32-EnumerateProcesses
# |
# | This patchset fixes the following Wine bugs:

View File

@ -1,20 +1,20 @@
From 56e15c62829a85dead5cd681ada5a69e9374d5e6 Mon Sep 17 00:00:00 2001
From 8a2c1ff72e3802e8e67e21ccb915de17a3c155da Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 18 Nov 2016 22:31:29 +0800
Subject: uxtheme: Protect CloseThemeData() from invalid input.
Subject: [PATCH] uxtheme: Protect CloseThemeData() from invalid input.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Testcase by Michael Müller <michael@fds-team.de>.
---
dlls/uxtheme/msstyles.c | 22 ++++++++++++++++++++++
dlls/uxtheme/msstyles.c | 21 +++++++++++++++++++++
dlls/uxtheme/msstyles.h | 3 ++-
dlls/uxtheme/tests/system.c | 4 ++++
3 files changed, 28 insertions(+), 1 deletion(-)
3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/uxtheme/msstyles.c b/dlls/uxtheme/msstyles.c
index e62b95d..1cca4fc 100644
index fe91494..3a25f6d 100644
--- a/dlls/uxtheme/msstyles.c
+++ b/dlls/uxtheme/msstyles.c
@@ -35,6 +35,7 @@
@ -23,9 +23,9 @@ index e62b95d..1cca4fc 100644
#include "wine/unicode.h"
+#include "wine/exception.h"
#include "wine/debug.h"
#include "wine/heap.h"
WINE_DEFAULT_DEBUG_CHANNEL(uxtheme);
@@ -56,6 +57,8 @@ static const WCHAR szThemesIniResource[] = {
@@ -57,6 +58,8 @@ static const WCHAR szThemesIniResource[] = {
't','h','e','m','e','s','_','i','n','i','\0'
};
@ -34,23 +34,15 @@ index e62b95d..1cca4fc 100644
static PTHEME_FILE tfActiveTheme;
/***********************************************************************/
@@ -219,6 +222,7 @@ void MSSTYLES_CloseThemeFile(PTHEME_FILE tf)
pcls->partstate = ps->next;
HeapFree(GetProcessHeap(), 0, ps);
}
+ pcls->signature = 0;
HeapFree(GetProcessHeap(), 0, pcls);
}
}
@@ -450,6 +454,7 @@ static PTHEME_CLASS MSSTYLES_AddClass(PTHEME_FILE tf, LPCWSTR pszAppName, LPCWST
@@ -452,6 +455,7 @@ static PTHEME_CLASS MSSTYLES_AddClass(PTHEME_FILE tf, LPCWSTR pszAppName, LPCWST
if(cur) return cur;
cur = HeapAlloc(GetProcessHeap(), 0, sizeof(THEME_CLASS));
cur = heap_alloc(sizeof(*cur));
+ cur->signature = THEME_CLASS_SIGNATURE;
cur->hTheme = tf->hTheme;
lstrcpyW(cur->szAppName, pszAppName);
lstrcpyW(cur->szClassName, pszClassName);
@@ -1043,6 +1048,23 @@ PTHEME_CLASS MSSTYLES_OpenThemeClass(LPCWSTR pszAppName, LPCWSTR pszClassList)
@@ -1045,6 +1049,23 @@ PTHEME_CLASS MSSTYLES_OpenThemeClass(LPCWSTR pszAppName, LPCWSTR pszClassList)
*/
HRESULT MSSTYLES_CloseThemeClass(PTHEME_CLASS tc)
{
@ -96,10 +88,10 @@ index 0b7e1ab..ba10ac8 100644
} THEME_IMAGE, *PTHEME_IMAGE;
diff --git a/dlls/uxtheme/tests/system.c b/dlls/uxtheme/tests/system.c
index d40679d..dba6cc8 100644
index 6989f44..d529279 100644
--- a/dlls/uxtheme/tests/system.c
+++ b/dlls/uxtheme/tests/system.c
@@ -181,6 +181,10 @@ static void test_OpenThemeData(void)
@@ -198,6 +198,10 @@ static void test_OpenThemeData(void)
"Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
GetLastError());
@ -111,5 +103,5 @@ index d40679d..dba6cc8 100644
{
SetLastError(0xdeadbeef);
--
2.9.0
1.9.1

View File

@ -1,17 +1,17 @@
From 271b0a51b2f1d70fcd7091e4829c77aacfdc0ba1 Mon Sep 17 00:00:00 2001
From 77ec3e3c1f2346c5b70647ed2e99102a41bad353 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 18 Aug 2017 12:03:50 +0800
Subject: windowscodecs: Fix stride calculation in JPEG decoder.
Subject: [PATCH] windowscodecs: Fix stride calculation in JPEG decoder.
---
dlls/windowscodecs/jpegformat.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c
index abab36ab40a..f31239b8d79 100644
index 08f1ee7..27cd880 100644
--- a/dlls/windowscodecs/jpegformat.c
+++ b/dlls/windowscodecs/jpegformat.c
@@ -628,7 +628,7 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface,
@@ -624,7 +624,7 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface,
else if (This->cinfo.out_color_space == JCS_CMYK) bpp = 32;
else bpp = 24;
@ -21,5 +21,5 @@ index abab36ab40a..f31239b8d79 100644
max_row_needed = prc->Y + prc->Height;
--
2.14.1
1.9.1

View File

@ -1,19 +1,19 @@
From 799ae0c6a39c58423281ea5d8c46b1085a07bf48 Mon Sep 17 00:00:00 2001
From 549a63c40b7b9a73055ece62c2d6c4631de79471 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 18 Aug 2017 12:12:16 +0800
Subject: windowscodecs: Move additional processing out of the JPEG decoding
loop.
Subject: [PATCH] windowscodecs: Move additional processing out of the JPEG
decoding loop.
This avoids image corruption when libjpeg reuses existing pixel data.
---
dlls/windowscodecs/jpegformat.c | 27 ++++++++++++++-------------
1 file changed, 14 insertions(+), 13 deletions(-)
dlls/windowscodecs/jpegformat.c | 38 ++++++++++++++++++++------------------
1 file changed, 20 insertions(+), 18 deletions(-)
diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c
index f31239b8d79..0023fd2bf32 100644
index 27cd880..97899a7 100644
--- a/dlls/windowscodecs/jpegformat.c
+++ b/dlls/windowscodecs/jpegformat.c
@@ -603,7 +603,7 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface,
@@ -599,10 +599,12 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface,
JpegDecoder *This = impl_from_IWICBitmapFrameDecode(iface);
UINT bpp;
UINT stride;
@ -22,15 +22,27 @@ index f31239b8d79..0023fd2bf32 100644
UINT max_row_needed;
jmp_buf jmpbuf;
WICRect rect;
@@ -659,7 +659,6 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface,
UINT first_scanline = This->cinfo.output_scanline;
+ UINT first_scanline = 0;
+
TRACE("(%p,%p,%u,%u,%p)\n", iface, prc, cbStride, cbBufferSize, pbBuffer);
if (!prc)
@@ -652,12 +654,12 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface,
while (max_row_needed > This->cinfo.output_scanline)
{
- UINT first_scanline = This->cinfo.output_scanline;
UINT max_rows;
JSAMPROW out_rows[4];
- UINT i;
JDIMENSION ret;
+ first_scanline = This->cinfo.output_scanline;
+
max_rows = min(This->cinfo.output_height-first_scanline, 4);
@@ -674,19 +673,21 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface,
for (i=0; i<max_rows; i++)
out_rows[i] = This->image_data + stride * (first_scanline+i);
@@ -670,25 +672,25 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface,
LeaveCriticalSection(&This->lock);
return E_FAIL;
}
@ -52,17 +64,25 @@ index f31239b8d79..0023fd2bf32 100644
+ }
- if (This->cinfo.out_color_space == JCS_CMYK && This->cinfo.saw_Adobe_marker)
- {
- DWORD *pDwordData = (DWORD*) (This->image_data + stride * first_scanline);
- DWORD *pDwordDataEnd = (DWORD*) (This->image_data + This->cinfo.output_scanline * stride);
- /* Adobe JPEG's have inverted CMYK data. */
- for (i=0; i<data_size; i++)
- This->image_data[i] ^= 0xff;
- while(pDwordData < pDwordDataEnd)
- *pDwordData++ ^= 0xffffffff;
- }
+ if (This->cinfo.out_color_space == JCS_CMYK && This->cinfo.saw_Adobe_marker)
+ {
+ DWORD *pDwordData = (DWORD*) (This->image_data + stride * first_scanline);
+ DWORD *pDwordDataEnd = (DWORD*) (This->image_data + This->cinfo.output_scanline * stride);
+ /* Adobe JPEG's have inverted CMYK data. */
+ for (i=0; i<data_size; i++)
+ This->image_data[i] ^= 0xff;
+ while(pDwordData < pDwordDataEnd)
+ *pDwordData++ ^= 0xffffffff;
}
LeaveCriticalSection(&This->lock);
--
2.14.1
1.9.1

View File

@ -1,17 +1,17 @@
From 71de59213235b4e41531d0ecff43790cf172bf90 Mon Sep 17 00:00:00 2001
From 846b328efd83b161405ed8f663b6cb3465c29ee4 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 18 Aug 2017 12:17:52 +0800
Subject: windowscodecs: Move JPEG frame image data initialization from
Subject: [PATCH] windowscodecs: Move JPEG frame image data initialization from
Frame::CopyPixels to Decoder::Initialize. (v2)
This is how PNG decoder does things, and it avoids image data corruption
in some cases (presumably when libjpeg reuses existing scanline data).
---
dlls/windowscodecs/jpegformat.c | 146 +++++++++++++++-------------------------
1 file changed, 55 insertions(+), 91 deletions(-)
dlls/windowscodecs/jpegformat.c | 151 ++++++++++++++--------------------------
1 file changed, 54 insertions(+), 97 deletions(-)
diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c
index 0023fd2bf32..296529cee73 100644
index 97899a7..0f02b36 100644
--- a/dlls/windowscodecs/jpegformat.c
+++ b/dlls/windowscodecs/jpegformat.c
@@ -155,6 +155,7 @@ typedef struct {
@ -87,7 +87,7 @@ index 0023fd2bf32..296529cee73 100644
This->initialized = TRUE;
LeaveCriticalSection(&This->lock);
@@ -601,99 +653,11 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface,
@@ -597,106 +649,11 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface,
const WICRect *prc, UINT cbStride, UINT cbBufferSize, BYTE *pbBuffer)
{
JpegDecoder *This = impl_from_IWICBitmapFrameDecode(iface);
@ -97,8 +97,10 @@ index 0023fd2bf32..296529cee73 100644
- UINT max_row_needed;
- jmp_buf jmpbuf;
- WICRect rect;
- TRACE("(%p,%p,%u,%u,%p)\n", iface, prc, cbStride, cbBufferSize, pbBuffer);
-
- UINT first_scanline = 0;
TRACE("(%p,%p,%u,%u,%p)\n", iface, prc, cbStride, cbBufferSize, pbBuffer);
- if (!prc)
- {
- rect.X = 0;
@ -123,7 +125,7 @@ index 0023fd2bf32..296529cee73 100644
-
- max_row_needed = prc->Y + prc->Height;
- if (max_row_needed > This->cinfo.output_height) return E_INVALIDARG;
-
- EnterCriticalSection(&This->lock);
-
- if (!This->image_data)
@ -146,11 +148,12 @@ index 0023fd2bf32..296529cee73 100644
-
- while (max_row_needed > This->cinfo.output_scanline)
- {
- UINT first_scanline = This->cinfo.output_scanline;
- UINT max_rows;
- JSAMPROW out_rows[4];
- JDIMENSION ret;
-
- first_scanline = This->cinfo.output_scanline;
-
- max_rows = min(This->cinfo.output_height-first_scanline, 4);
- for (i=0; i<max_rows; i++)
- out_rows[i] = This->image_data + stride * (first_scanline+i);
@ -173,16 +176,19 @@ index 0023fd2bf32..296529cee73 100644
- stride);
- }
-
-
- if (This->cinfo.out_color_space == JCS_CMYK && This->cinfo.saw_Adobe_marker)
- {
- DWORD *pDwordData = (DWORD*) (This->image_data + stride * first_scanline);
- DWORD *pDwordDataEnd = (DWORD*) (This->image_data + This->cinfo.output_scanline * stride);
-
- /* Adobe JPEG's have inverted CMYK data. */
- for (i=0; i<data_size; i++)
- This->image_data[i] ^= 0xff;
- while(pDwordData < pDwordDataEnd)
- *pDwordData++ ^= 0xffffffff;
- }
-
- LeaveCriticalSection(&This->lock);
+ TRACE("(%p,%p,%u,%u,%p)\n", iface, prc, cbStride, cbBufferSize, pbBuffer);
-
- return copy_pixels(bpp, This->image_data,
- This->cinfo.output_width, This->cinfo.output_height, stride,
+ return copy_pixels(This->bpp, This->image_data,
@ -191,5 +197,5 @@ index 0023fd2bf32..296529cee73 100644
}
--
2.14.1
1.9.1

View File

@ -1,17 +1,17 @@
From 3a05eb9c499b348f3577cc7e7cb8ad23a261e5f0 Mon Sep 17 00:00:00 2001
From f26102e49cdff5e0afbb3132b02b9f4fe2d93dd5 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Thu, 17 Aug 2017 14:57:18 +0800
Subject: windowscodecs: Add support for CMYK to BGR conversion.
Subject: [PATCH] windowscodecs: Add support for CMYK to BGR conversion.
---
dlls/windowscodecs/converter.c | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/dlls/windowscodecs/converter.c b/dlls/windowscodecs/converter.c
index 5dccb70b1fb..525e1838b84 100644
index 42ba260..54731ab 100644
--- a/dlls/windowscodecs/converter.c
+++ b/dlls/windowscodecs/converter.c
@@ -1085,6 +1085,48 @@ static HRESULT copypixels_to_24bppBGR(struct FormatConverter *This, const WICRec
@@ -1012,6 +1012,48 @@ static HRESULT copypixels_to_24bppBGR(struct FormatConverter *This, const WICRec
}
return S_OK;
@ -61,5 +61,5 @@ index 5dccb70b1fb..525e1838b84 100644
FIXME("Unimplemented conversion path!\n");
return WINCODEC_ERR_UNSUPPORTEDOPERATION;
--
2.14.1
1.9.1

View File

@ -1,22 +1,21 @@
From 48d707f925a861df887aa11c13e062aa700bf3d8 Mon Sep 17 00:00:00 2001
From 359733a8080403adeca1f87472cdad1884c4affb Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 14 Dec 2014 20:49:28 +0100
Subject: [PATCH] wined3d: Add second dll with STAGING_CSMT
definition set.
Subject: [PATCH] wined3d: Add second dll with STAGING_CSMT definition set.
---
configure.ac | 3 ++-
dlls/wined3d-csmt/Makefile.in | 37 +++++++++++++++++++++++++++++++++++++
dlls/wined3d-csmt/Makefile.in | 36 ++++++++++++++++++++++++++++++++++++
dlls/wined3d-csmt/version.rc | 27 +++++++++++++++++++++++++++
3 files changed, 66 insertions(+), 1 deletion(-)
3 files changed, 65 insertions(+), 1 deletion(-)
create mode 100644 dlls/wined3d-csmt/Makefile.in
create mode 100644 dlls/wined3d-csmt/version.rc
diff --git a/configure.ac b/configure.ac
index 234d288..9161305 100644
index 7b796ef..fbaca8e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3805,7 +3805,8 @@ WINE_CONFIG_DLL(wineandroid.drv)
@@ -3679,7 +3679,8 @@ WINE_CONFIG_DLL(wineandroid.drv)
WINE_CONFIG_DLL(winebus.sys)
WINE_CONFIG_DLL(winecoreaudio.drv)
WINE_CONFIG_LIB(winecrt0)
@ -28,10 +27,10 @@ index 234d288..9161305 100644
WINE_CONFIG_DLL(winejoystick.drv)
diff --git a/dlls/wined3d-csmt/Makefile.in b/dlls/wined3d-csmt/Makefile.in
new file mode 100644
index 0000000..bf064ed
index 0000000..1d0458e
--- /dev/null
+++ b/dlls/wined3d-csmt/Makefile.in
@@ -0,0 +1,37 @@
@@ -0,0 +1,36 @@
+EXTRADEFS = -DSTAGING_CSMT
+MODULE = wined3d-csmt.dll
+IMPORTS = uuid opengl32 user32 gdi32 advapi32
@ -46,7 +45,6 @@ index 0000000..bf064ed
+ cs.c \
+ device.c \
+ directx.c \
+ drawprim.c \
+ dxtn.c \
+ gl_compat.c \
+ glsl_shader.c \

View File

@ -19,7 +19,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
};
struct wined3d_cs_add_dirty_texture_region
@@ -2265,6 +2268,53 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r
@@ -2259,6 +2262,53 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r
unsigned int slice_pitch)
{
struct wined3d_cs_update_sub_resource *op;
@ -73,7 +73,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
op = cs->ops->require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_MAP);
op->opcode = WINED3D_CS_OP_UPDATE_SUB_RESOURCE;
@@ -2278,8 +2328,10 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r
@@ -2272,8 +2322,10 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r
wined3d_resource_acquire(resource);
cs->ops->submit(cs, WINED3D_CS_QUEUE_MAP);
@ -84,7 +84,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
cs->ops->finish(cs, WINED3D_CS_QUEUE_MAP);
}
@@ -2462,6 +2514,13 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void
@@ -2456,6 +2508,13 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void
/* WINED3D_CS_OP_GENERATE_MIPMAPS */ wined3d_cs_exec_generate_mipmaps,
};
@ -98,7 +98,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
static void *wined3d_cs_st_require_space(struct wined3d_cs *cs, size_t size, enum wined3d_cs_queue_id queue_id)
{
if (size > (cs->data_size - cs->end))
@@ -2515,6 +2574,9 @@ static void wined3d_cs_st_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id
@@ -2509,6 +2568,9 @@ static void wined3d_cs_st_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id
static const struct wined3d_cs_ops wined3d_cs_st_ops =
{
@ -108,7 +108,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
wined3d_cs_st_require_space,
wined3d_cs_st_submit,
wined3d_cs_st_finish,
@@ -2548,6 +2610,21 @@ static void wined3d_cs_mt_submit(struct wined3d_cs *cs, enum wined3d_cs_queue_id
@@ -2542,6 +2604,21 @@ static void wined3d_cs_mt_submit(struct wined3d_cs *cs, enum wined3d_cs_queue_id
wined3d_cs_queue_submit(&cs->queue[queue_id], cs);
}
@ -130,7 +130,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
static void *wined3d_cs_queue_require_space(struct wined3d_cs_queue *queue, size_t size, struct wined3d_cs *cs)
{
size_t queue_size = ARRAY_SIZE(queue->data);
@@ -2609,6 +2686,16 @@ static void *wined3d_cs_queue_require_space(struct wined3d_cs_queue *queue, size
@@ -2603,6 +2680,16 @@ static void *wined3d_cs_queue_require_space(struct wined3d_cs_queue *queue, size
return packet->data;
}
@ -147,7 +147,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
static void *wined3d_cs_mt_require_space(struct wined3d_cs *cs, size_t size, enum wined3d_cs_queue_id queue_id)
{
if (cs->thread_id == GetCurrentThreadId())
@@ -2628,6 +2715,9 @@ static void wined3d_cs_mt_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id
@@ -2622,6 +2709,9 @@ static void wined3d_cs_mt_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id
static const struct wined3d_cs_ops wined3d_cs_mt_ops =
{
@ -160,7 +160,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -1214,6 +1214,9 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device)
@@ -1215,6 +1215,9 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device)
wine_rb_clear(&device->samplers, device_free_sampler, NULL);
@ -170,7 +170,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
wined3d_device_delete_opengl_contexts(device);
if (device->fb.depth_stencil)
@@ -4213,6 +4216,7 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev
@@ -4211,6 +4214,7 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev
return WINED3DERR_INVALIDCALL;
}
@ -178,7 +178,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (dst_texture->sub_resources[dst_sub_resource_idx].map_count)
{
WARN("Destination sub-resource %u is mapped.\n", dst_sub_resource_idx);
@@ -4223,6 +4227,19 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev
@@ -4221,6 +4225,19 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev
{
WARN("Source sub-resource %u is mapped.\n", src_sub_resource_idx);
return WINED3DERR_INVALIDCALL;
@ -198,7 +198,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
if (!src_box)
@@ -4324,8 +4341,10 @@ void CDECL wined3d_device_update_sub_resource(struct wined3d_device *device, str
@@ -4322,8 +4339,10 @@ void CDECL wined3d_device_update_sub_resource(struct wined3d_device *device, str
return;
}
@ -209,7 +209,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
wined3d_cs_emit_update_sub_resource(device->cs, resource, sub_resource_idx, box, data, row_pitch, depth_pitch);
}
@@ -5328,3 +5347,58 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL
@@ -5323,3 +5342,58 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL
else
return CallWindowProcA(proc, window, message, wparam, lparam);
}
@ -576,7 +576,7 @@ diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2900,6 +2900,16 @@ struct wined3d_dummy_textures
@@ -2897,6 +2897,16 @@ struct wined3d_dummy_textures
GLuint tex_2d_ms_array;
};
@ -593,7 +593,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
#define WINED3D_UNMAPPED_STAGE ~0u
/* Multithreaded flag. Removed from the public header to signal that
@@ -3000,6 +3010,12 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL
@@ -2997,6 +3007,12 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL
void device_resource_add(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
void device_resource_released(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
void device_invalidate_state(const struct wined3d_device *device, DWORD state) DECLSPEC_HIDDEN;
@ -606,7 +606,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
static inline BOOL isStateDirty(const struct wined3d_context *context, DWORD state)
{
@@ -3199,7 +3215,11 @@ struct wined3d_texture
@@ -3196,7 +3212,11 @@ struct wined3d_texture
unsigned int map_count;
DWORD locations;
@ -618,7 +618,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
} sub_resources[1];
};
@@ -3524,6 +3544,9 @@ struct wined3d_cs_queue
@@ -3521,6 +3541,9 @@ struct wined3d_cs_queue
struct wined3d_cs_ops
{

View File

@ -1,8 +1,8 @@
From 6fb6fb2e293e57e2645d988e82c12782db1c30b9 Mon Sep 17 00:00:00 2001
From 8f283b558ea348bd21cee56beb8219758d55a379 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 20 Sep 2014 02:48:07 +0200
Subject: wined3d: Add support for DXTn software decoding through libtxc_dxtn.
(rev 3)
Subject: [PATCH] wined3d: Add support for DXTn software decoding through
libtxc_dxtn. (rev 3)
Changes in rev 2:
* Do not use dxtn library when some imports are missing.
@ -13,19 +13,19 @@ Changes in rev 3:
* Do not require txc_dxtn at compile time by trying some fallback paths.
---
configure.ac | 3 +
dlls/wined3d/Makefile.in | 1 +
dlls/wined3d/Makefile.in | 2 +
dlls/wined3d/dxtn.c | 299 +++++++++++++++++++++++++++++++++++++++++
dlls/wined3d/surface.c | 80 +++++++++++
dlls/wined3d/wined3d_main.c | 5 +
dlls/wined3d/wined3d_private.h | 13 ++
6 files changed, 401 insertions(+)
6 files changed, 402 insertions(+)
create mode 100644 dlls/wined3d/dxtn.c
diff --git a/configure.ac b/configure.ac
index 1a5b0de0e3..adf7cd0f4d 100644
index 643c713..a867d25 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1633,6 +1633,9 @@ fi
@@ -1737,6 +1737,9 @@ fi
WINE_NOTICE_WITH(tiff,[test "x$ac_cv_lib_soname_tiff" = "x"],
[libtiff ${notice_platform}development files not found, TIFF won't be supported.])
@ -36,20 +36,21 @@ index 1a5b0de0e3..adf7cd0f4d 100644
if test "x$with_mpg123" != "xno"
then
diff --git a/dlls/wined3d/Makefile.in b/dlls/wined3d/Makefile.in
index edee58845a..70f47c6a5f 100644
index 58fc2d5..70f47c6 100644
--- a/dlls/wined3d/Makefile.in
+++ b/dlls/wined3d/Makefile.in
@@ -11,6 +11,7 @@ C_SRCS = \
@@ -10,6 +10,8 @@ C_SRCS = \
cs.c \
device.c \
directx.c \
drawprim.c \
+ drawprim.c \
+ dxtn.c \
gl_compat.c \
glsl_shader.c \
nvidia_texture_shader.c \
diff --git a/dlls/wined3d/dxtn.c b/dlls/wined3d/dxtn.c
new file mode 100644
index 0000000000..ce989490ef
index 0000000..ce98949
--- /dev/null
+++ b/dlls/wined3d/dxtn.c
@@ -0,0 +1,299 @@
@ -353,10 +354,10 @@ index 0000000000..ce989490ef
+ wine_dlclose(txc_dxtn_handle, NULL, 0);
+}
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 2ba80605a5..3a91e98e98 100644
index 9ef917f..7201a7c 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -1215,6 +1215,66 @@ static void convert_yuy2_r5g6b5(const BYTE *src, BYTE *dst,
@@ -1279,6 +1279,66 @@ static void convert_yuy2_r5g6b5(const BYTE *src, BYTE *dst,
}
}
@ -423,7 +424,7 @@ index 2ba80605a5..3a91e98e98 100644
struct d3dfmt_converter_desc
{
enum wined3d_format_id from, to;
@@ -1231,6 +1291,20 @@ static const struct d3dfmt_converter_desc converters[] =
@@ -1295,6 +1355,20 @@ static const struct d3dfmt_converter_desc converters[] =
{WINED3DFMT_YUY2, WINED3DFMT_B5G6R5_UNORM, convert_yuy2_r5g6b5},
};
@ -444,7 +445,7 @@ index 2ba80605a5..3a91e98e98 100644
static inline const struct d3dfmt_converter_desc *find_converter(enum wined3d_format_id from,
enum wined3d_format_id to)
{
@@ -1242,6 +1316,12 @@ static inline const struct d3dfmt_converter_desc *find_converter(enum wined3d_fo
@@ -1306,6 +1380,12 @@ static inline const struct d3dfmt_converter_desc *find_converter(enum wined3d_fo
return &converters[i];
}
@ -458,10 +459,10 @@ index 2ba80605a5..3a91e98e98 100644
}
diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c
index f662c3a48d..dca6a2a64d 100644
index 6cd6f18..28e6fe6 100644
--- a/dlls/wined3d/wined3d_main.c
+++ b/dlls/wined3d/wined3d_main.c
@@ -336,6 +336,8 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL)
@@ -326,6 +326,8 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL)
if (appkey) RegCloseKey( appkey );
if (hkey) RegCloseKey( hkey );
@ -470,7 +471,7 @@ index f662c3a48d..dca6a2a64d 100644
return TRUE;
}
@@ -367,6 +369,9 @@ static BOOL wined3d_dll_destroy(HINSTANCE hInstDLL)
@@ -357,6 +359,9 @@ static BOOL wined3d_dll_destroy(HINSTANCE hInstDLL)
DeleteCriticalSection(&wined3d_wndproc_cs);
DeleteCriticalSection(&wined3d_cs);
@ -481,10 +482,10 @@ index f662c3a48d..dca6a2a64d 100644
}
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 1ed0846939..e6f9ebc79a 100644
index 816eebb..3f6500d 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4062,6 +4062,19 @@ static inline void wined3d_not_from_cs(struct wined3d_cs *cs)
@@ -4451,6 +4451,19 @@ static inline void wined3d_not_from_cs(struct wined3d_cs *cs)
assert(cs->thread_id != GetCurrentThreadId());
}
@ -505,5 +506,5 @@ index 1ed0846939..e6f9ebc79a 100644
#define WINED3D_OPENGL_WINDOW_CLASS_NAME "WineD3D_OpenGL"
--
2.11.0
1.9.1

View File

@ -1,7 +1,7 @@
From 7f5c55d18e90dad797a1628c12a7a40b39408767 Mon Sep 17 00:00:00 2001
From ba10f87693d73b3ae374e94f4b9e4e6b29220fe8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 18 Aug 2017 23:51:59 +0200
Subject: wined3d: Implement dual source blending.
Subject: [PATCH] wined3d: Implement dual source blending.
---
dlls/d3d11/tests/d3d11.c | 2 +-
@ -14,10 +14,10 @@ Subject: wined3d: Implement dual source blending.
7 files changed, 91 insertions(+), 16 deletions(-)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index ca7e0f9f020..99f6fb9f072 100644
index 954324f..c148bf2 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -21885,7 +21885,7 @@ static void test_dual_blending(void)
@@ -26116,7 +26116,7 @@ static void test_dual_blending(void)
ID3D11DeviceContext_ClearRenderTargetView(context, rtv[1], white);
ID3D11DeviceContext_Draw(context, 3, 0);
@ -27,10 +27,10 @@ index ca7e0f9f020..99f6fb9f072 100644
ID3D11BlendState_Release(blend_state);
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index a2c0ba4080c..2ef75cf458b 100644
index 6e85336..e5dd5bb 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -3077,8 +3077,16 @@ static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const
@@ -3176,8 +3176,16 @@ static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const
else if (!context->render_offscreen)
return context_generate_rt_mask_from_resource(rts[0]->resource);
@ -49,11 +49,11 @@ index a2c0ba4080c..2ef75cf458b 100644
i = 0;
while (rt_mask_bits)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 9cf0ddd95e0..9f9421720ae 100644
index cc86118..e4110de 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -3505,6 +3505,12 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info)
gl_info->limits.buffers = gl_max;
@@ -3538,6 +3538,12 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info)
gl_info->limits.buffers = min(MAX_RENDER_TARGET_VIEWS, gl_max);
TRACE("Max draw buffers: %u.\n", gl_max);
}
+ if (gl_info->supported[ARB_BLEND_FUNC_EXTENDED])
@ -65,7 +65,7 @@ index 9cf0ddd95e0..9f9421720ae 100644
if (gl_info->supported[ARB_MULTITEXTURE])
{
if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
@@ -4268,6 +4274,10 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
@@ -4319,6 +4325,10 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
for (i = 0; i < gl_info->limits.buffers; ++i)
adapter->d3d_info.valid_rt_mask |= (1u << i);
@ -77,10 +77,10 @@ index 9cf0ddd95e0..9f9421720ae 100644
{
/* We do not want to deal with re-creating immutable texture storage for color keying emulation. */
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index c8b35fb8af5..94423ffbdcb 100644
index a571405..670a50e 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -2960,6 +2960,7 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
@@ -3008,6 +3008,7 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
break;
case WINED3DSPR_COLOROUT:
@ -88,7 +88,7 @@ index c8b35fb8af5..94423ffbdcb 100644
if (reg->idx[0].offset >= gl_info->limits.buffers)
WARN("Write to render target %u, only %d supported.\n",
reg->idx[0].offset, gl_info->limits.buffers);
@@ -7473,11 +7474,23 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
@@ -7694,11 +7695,23 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
if (!needs_legacy_glsl_syntax(gl_info))
{
@ -116,7 +116,7 @@ index c8b35fb8af5..94423ffbdcb 100644
}
}
@@ -10008,13 +10021,25 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
@@ -10250,13 +10263,25 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
if (!needs_legacy_glsl_syntax(gl_info))
{
@ -149,10 +149,10 @@ index c8b35fb8af5..94423ffbdcb 100644
}
}
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index f80467b46d0..1583bcfde24 100644
index 66e1bbf..0513c9e 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -3987,6 +3987,8 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3
@@ -4011,6 +4011,8 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3
args->render_offscreen = shader->reg_maps.vpos && gl_info->supported[ARB_FRAGMENT_COORD_CONVENTIONS]
? context->render_offscreen : 0;
@ -162,10 +162,10 @@ index f80467b46d0..1583bcfde24 100644
static HRESULT pixel_shader_init(struct wined3d_shader *shader, struct wined3d_device *device,
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index cb652c24579..3f5673bfccf 100644
index ace6f3e..2ce8c6f 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -472,12 +472,14 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st
@@ -534,12 +534,14 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st
const struct wined3d_format *rt_format;
GLenum src_blend, dst_blend;
unsigned int rt_fmt_flags;
@ -182,7 +182,7 @@ index cb652c24579..3f5673bfccf 100644
rt_fmt_flags = state->fb->render_targets[0]->format_flags;
/* Disable blending in all cases even without pixelshaders.
@@ -487,6 +489,13 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st
@@ -549,6 +551,13 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st
enable_blend = FALSE;
}
@ -196,7 +196,7 @@ index cb652c24579..3f5673bfccf 100644
if (!enable_blend)
{
gl_info->gl_ops.gl.p_glDisable(GL_BLEND);
@@ -497,6 +506,7 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st
@@ -559,6 +568,7 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st
gl_info->gl_ops.gl.p_glEnable(GL_BLEND);
checkGLcall("glEnable(GL_BLEND)");
@ -205,7 +205,7 @@ index cb652c24579..3f5673bfccf 100644
state->render_states[WINED3D_RS_SRCBLEND],
state->render_states[WINED3D_RS_DESTBLEND], rt_format);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index fad3fadeeaa..aca97788f0e 100644
index 96ce567..17955d6 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -194,6 +194,7 @@ struct wined3d_d3d_info
@ -216,7 +216,7 @@ index fad3fadeeaa..aca97788f0e 100644
DWORD wined3d_creation_flags;
BOOL shader_double_precision;
};
@@ -1353,7 +1354,8 @@ struct ps_compile_args
@@ -1354,7 +1355,8 @@ struct ps_compile_args
DWORD flatshading : 1;
DWORD alpha_test_func : 3;
DWORD render_offscreen : 1;
@ -226,7 +226,7 @@ index fad3fadeeaa..aca97788f0e 100644
};
enum fog_src_type
@@ -1910,7 +1912,8 @@ struct wined3d_context
@@ -1911,7 +1913,8 @@ struct wined3d_context
DWORD transform_feedback_paused : 1;
DWORD shader_update_mask : 6; /* WINED3D_SHADER_TYPE_COUNT, 6 */
DWORD clip_distance_mask : 8; /* MAX_CLIP_DISTANCES, 8 */
@ -236,7 +236,7 @@ index fad3fadeeaa..aca97788f0e 100644
DWORD constant_update_mask;
DWORD numbered_array_mask;
GLenum tracking_parm; /* Which source is tracking current colour */
@@ -2517,6 +2520,7 @@ struct wined3d_fbo_ops
@@ -2514,6 +2517,7 @@ struct wined3d_fbo_ops
struct wined3d_gl_limits
{
UINT buffers;
@ -244,7 +244,7 @@ index fad3fadeeaa..aca97788f0e 100644
UINT lights;
UINT textures;
UINT texture_coords;
@@ -2860,6 +2864,22 @@ struct wined3d_state
@@ -2857,6 +2861,22 @@ struct wined3d_state
struct wined3d_rasterizer_state *rasterizer_state;
};
@ -268,4 +268,5 @@ index fad3fadeeaa..aca97788f0e 100644
{
GLuint tex_2d;
--
2.14.2
1.9.1

View File

@ -1,57 +1,22 @@
From 407c269c649604efd9a1f28d7dcb2494e1f3a090 Mon Sep 17 00:00:00 2001
From 95d106f273fb8db213048c8aa54550248943f547 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 31 Aug 2017 01:26:38 +0200
Subject: wined3d: Implement software processing for indexed vertex blending.
Subject: [PATCH] wined3d: Implement software processing for indexed vertex
blending.
---
dlls/wined3d/context.c | 107 +++++++++++++++++++++++++++++++++++++++--
dlls/wined3d/device.c | 16 ------
dlls/wined3d/drawprim.c | 107 +++++++++++++++++++++++++++++++++++++++--
dlls/wined3d/glsl_shader.c | 32 ++++++++----
dlls/wined3d/utils.c | 7 ++-
dlls/wined3d/wined3d_private.h | 16 +++++-
5 files changed, 148 insertions(+), 30 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 572d99c20c1..b2e367dde4f 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3909,31 +3909,15 @@ HRESULT CDECL wined3d_device_validate_device(const struct wined3d_device *device
void CDECL wined3d_device_set_software_vertex_processing(struct wined3d_device *device, BOOL software)
{
- static BOOL warned;
-
TRACE("device %p, software %#x.\n", device, software);
- if (!warned)
- {
- FIXME("device %p, software %#x stub!\n", device, software);
- warned = TRUE;
- }
-
device->softwareVertexProcessing = software;
}
BOOL CDECL wined3d_device_get_software_vertex_processing(const struct wined3d_device *device)
{
- static BOOL warned;
-
TRACE("device %p.\n", device);
- if (!warned)
- {
- TRACE("device %p stub!\n", device);
- warned = TRUE;
- }
-
return device->softwareVertexProcessing;
}
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 1164878985d..acc9afec2be 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -165,6 +165,101 @@ static void draw_primitive_arrays(struct wined3d_context *context, const struct
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 67a49db..b513705 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -4496,6 +4496,100 @@ static void draw_primitive_arrays(struct wined3d_context *context, const struct
}
}
@ -106,7 +71,6 @@ index 1164878985d..acc9afec2be 100644
+ case WINED3D_FFP_EMIT_FLOAT4: vector[3] = data[3];
+ case WINED3D_FFP_EMIT_FLOAT3: vector[2] = data[2];
+ case WINED3D_FFP_EMIT_FLOAT2: vector[1] = data[1];
+ case WINED3D_FFP_EMIT_FLOAT1: vector[0] = data[0]; break;
+ default:
+ FIXME("unsupported value format: %u\n", SI_FORMAT(element_idx));
+ return (BYTE *)data;
@ -153,7 +117,7 @@ index 1164878985d..acc9afec2be 100644
static unsigned int get_stride_idx(const void *idx_data, unsigned int idx_size,
unsigned int base_vertex_idx, unsigned int start_idx, unsigned int vertex_idx)
{
@@ -193,6 +288,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const
@@ -4524,6 +4618,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const
BOOL specular_fog = FALSE;
BOOL ps = use_ps(state);
const void *ptr;
@ -161,7 +125,7 @@ index 1164878985d..acc9afec2be 100644
static unsigned int once;
@@ -229,7 +325,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const
@@ -4560,7 +4655,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const
if (!(use_map & 1u << element_idx))
continue;
@ -170,7 +134,7 @@ index 1164878985d..acc9afec2be 100644
ops->generic[si->elements[element_idx].format->emit_idx](element_idx, ptr);
}
}
@@ -341,7 +437,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const
@@ -4672,7 +4767,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const
if (normal)
{
@ -179,7 +143,7 @@ index 1164878985d..acc9afec2be 100644
ops->normal[si->elements[WINED3D_FFP_NORMAL].format->emit_idx](ptr);
}
@@ -386,7 +482,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const
@@ -4717,7 +4812,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const
if (position)
{
@ -188,23 +152,60 @@ index 1164878985d..acc9afec2be 100644
ops->position[si->elements[WINED3D_FFP_POSITION].format->emit_idx](ptr);
}
}
@@ -601,6 +697,11 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s
@@ -4939,6 +5034,12 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s
WARN_(d3d_perf)("Using software emulation because manual fog coordinates are provided.\n");
emulation = TRUE;
}
+ else if (use_indexed_vertex_blending(state, stream_info) && use_software_vertex_processing(context->device))
+ else if (use_indexed_vertex_blending(state, stream_info) && use_software_vertex_processing(context->device))
+ {
+ WARN_(d3d_perf)("Using software emulation because application requested SVP.\n");
+ emulation = TRUE;
+ }
+
if (emulation)
{
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index dfd0047..d47cd52 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3959,31 +3959,15 @@ HRESULT CDECL wined3d_device_validate_device(const struct wined3d_device *device
void CDECL wined3d_device_set_software_vertex_processing(struct wined3d_device *device, BOOL software)
{
- static BOOL warned;
-
TRACE("device %p, software %#x.\n", device, software);
- if (!warned)
- {
- FIXME("device %p, software %#x stub!\n", device, software);
- warned = TRUE;
- }
-
device->softwareVertexProcessing = software;
}
BOOL CDECL wined3d_device_get_software_vertex_processing(const struct wined3d_device *device)
{
- static BOOL warned;
-
TRACE("device %p.\n", device);
- if (!warned)
- {
- TRACE("device %p stub!\n", device);
- warned = TRUE;
- }
-
return device->softwareVertexProcessing;
}
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index f34ff090414..dfc332adb1a 100644
index c857509..66a2921 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -8371,14 +8371,21 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
@@ -8605,14 +8605,21 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
}
else
{
@ -232,7 +233,7 @@ index f34ff090414..dfc332adb1a 100644
}
shader_addline(buffer, "gl_Position = ffp_projection_matrix * ec_pos;\n");
@@ -8396,10 +8403,17 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
@@ -8630,10 +8637,17 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr
shader_addline(buffer, "vec3 normal = vec3(0.0);\n");
if (settings->normal)
{
@ -254,10 +255,10 @@ index f34ff090414..dfc332adb1a 100644
if (settings->normalize)
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index a9df5f2be49..c83cd6205b2 100644
index 4a071cc..26b0fd2 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -6079,7 +6079,12 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
@@ -6274,7 +6274,12 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
}
if (use_indexed_vertex_blending(state, si))
@ -272,10 +273,10 @@ index a9df5f2be49..c83cd6205b2 100644
settings->clipping = state->render_states[WINED3D_RS_CLIPPING]
&& state->render_states[WINED3D_RS_CLIPPLANEENABLE];
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index e26f991c222..de189571363 100644
index 7a79199..2f709d9 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2731,7 +2731,7 @@ struct wined3d_ffp_vs_settings
@@ -2746,7 +2746,7 @@ struct wined3d_ffp_vs_settings
DWORD flatshading : 1;
DWORD swizzle_map : 16; /* MAX_ATTRIBS, 16 */
DWORD vb_indices : 1;
@ -284,7 +285,7 @@ index e26f991c222..de189571363 100644
DWORD texgen[MAX_TEXTURES];
};
@@ -4280,6 +4280,20 @@ static inline BOOL use_indexed_vertex_blending(const struct wined3d_state *state
@@ -4359,6 +4359,20 @@ static inline BOOL use_indexed_vertex_blending(const struct wined3d_state *state
return TRUE;
}
@ -306,5 +307,5 @@ index e26f991c222..de189571363 100644
{
/* Check state->vertex_declaration to allow this to be used before the
--
2.14.2
1.9.1

View File

@ -1,4 +1,4 @@
From 109b6e5af50662ad34c61943cccace4686ae8ecf Mon Sep 17 00:00:00 2001
From 268acba8eb58661b41f1732b0fb2b084ac5d792c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 20 Jul 2017 13:50:07 +0200
Subject: [PATCH] wined3d: Implement all 8 d3d11 color write masks.
@ -6,22 +6,22 @@ Subject: [PATCH] wined3d: Implement all 8 d3d11 color write masks.
---
dlls/d3d11/device.c | 29 ++++++++++-----------
dlls/d3d11/state.c | 4 ---
dlls/wined3d/context.c | 6 ++---
dlls/wined3d/Makefile.in | 1 -
dlls/wined3d/context.c | 8 +++---
dlls/wined3d/device.c | 6 ++---
dlls/wined3d/drawprim.c | 2 +-
dlls/wined3d/state.c | 57 +++++++++++++++++++-----------------------
dlls/wined3d/stateblock.c | 10 +++++---
dlls/wined3d/surface.c | 7 +++---
dlls/wined3d/utils.c | 6 ++++-
dlls/wined3d/wined3d_private.h | 1 +
include/wine/wined3d.h | 14 ++++++++++-
11 files changed, 72 insertions(+), 70 deletions(-)
11 files changed, 72 insertions(+), 71 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 835ea8b..2ef9b46 100644
index 9c9b730..bfcd139 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -688,6 +688,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi
@@ -2067,6 +2067,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi
static const float default_blend_factor[] = {1.0f, 1.0f, 1.0f, 1.0f};
struct d3d_blend_state *blend_state_impl;
const D3D11_BLEND_DESC *desc;
@ -29,7 +29,7 @@ index 835ea8b..2ef9b46 100644
TRACE("iface %p, blend_state %p, blend_factor %s, sample_mask 0x%08x.\n",
iface, blend_state, debug_float4(blend_factor), sample_mask);
@@ -702,14 +703,11 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi
@@ -2081,14 +2082,11 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi
{
wined3d_device_set_blend_state(device->wined3d_device, NULL);
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_ALPHABLENDENABLE, FALSE);
@ -49,7 +49,7 @@ index 835ea8b..2ef9b46 100644
wined3d_mutex_unlock();
return;
}
@@ -737,14 +735,13 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi
@@ -2116,14 +2114,13 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi
|| d->DestBlendAlpha == D3D11_BLEND_BLEND_FACTOR || d->DestBlendAlpha == D3D11_BLEND_INV_BLEND_FACTOR))
FIXME("Ignoring blend factor %s.\n", debug_float4(blend_factor));
}
@ -86,11 +86,23 @@ index a14c9d3..2bec92e 100644
}
/* glEnableIndexedEXT(GL_BLEND, ...) */
diff --git a/dlls/wined3d/Makefile.in b/dlls/wined3d/Makefile.in
index 70f47c6..b850ba6 100644
--- a/dlls/wined3d/Makefile.in
+++ b/dlls/wined3d/Makefile.in
@@ -10,7 +10,6 @@ C_SRCS = \
cs.c \
device.c \
directx.c \
- drawprim.c \
dxtn.c \
gl_compat.c \
glsl_shader.c \
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 4929b84..1daf7c0 100644
index e5dd5bb..67a49db 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -2578,10 +2578,8 @@ static void SetupForBlit(const struct wined3d_device *device, struct wined3d_con
@@ -2613,10 +2613,8 @@ static void SetupForBlit(const struct wined3d_device *device, struct wined3d_con
}
gl_info->gl_ops.gl.p_glColorMask(GL_TRUE, GL_TRUE,GL_TRUE,GL_TRUE);
checkGLcall("glColorMask");
@ -103,11 +115,20 @@ index 4929b84..1daf7c0 100644
if (gl_info->supported[EXT_SECONDARY_COLOR])
{
gl_info->gl_ops.gl.p_glDisable(GL_COLOR_SUM_EXT);
@@ -4849,7 +4847,7 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s
if (!(rtv = fb->render_targets[i]) || rtv->format->id == WINED3DFMT_NULL)
continue;
- if (state->render_states[WINED3D_RS_COLORWRITEENABLE])
+ if (state->render_states[WINED3D_RS_COLORWRITE(i)])
{
wined3d_rendertarget_view_load_location(rtv, context, rtv->resource->draw_binding);
wined3d_rendertarget_view_invalidate_location(rtv, ~rtv->resource->draw_binding);
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 6e275e1..cef05cc 100644
index ee42002..dfd0047 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -378,10 +378,8 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
@@ -383,10 +383,8 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
}
gl_info->gl_ops.gl.p_glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
@ -120,24 +141,11 @@ index 6e275e1..cef05cc 100644
gl_info->gl_ops.gl.p_glClearColor(color->r, color->g, color->b, color->a);
checkGLcall("glClearColor");
clear_mask = clear_mask | GL_COLOR_BUFFER_BIT;
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 7eccc8f..8f9e929 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -545,7 +545,7 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s
if (!(rtv = fb->render_targets[i]) || rtv->format->id == WINED3DFMT_NULL)
continue;
- if (state->render_states[WINED3D_RS_COLORWRITEENABLE])
+ if (state->render_states[WINED3D_RS_COLORWRITE(i)])
{
wined3d_rendertarget_view_load_location(rtv, context, rtv->resource->draw_binding);
wined3d_rendertarget_view_invalidate_location(rtv, ~rtv->resource->draw_binding);
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 3460d69..26c5815 100644
index 2ce8c6f..7b93582 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -1556,9 +1556,6 @@ static void state_debug_monitor(struct wined3d_context *context, const struct wi
@@ -1566,9 +1566,6 @@ static void state_debug_monitor(struct wined3d_context *context, const struct wi
static void state_colorwrite(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
{
DWORD mask0 = state->render_states[WINED3D_RS_COLORWRITEENABLE];
@ -147,7 +155,7 @@ index 3460d69..26c5815 100644
const struct wined3d_gl_info *gl_info = context->gl_info;
TRACE("Color mask: r(%d) g(%d) b(%d) a(%d)\n",
@@ -1572,13 +1569,7 @@ static void state_colorwrite(struct wined3d_context *context, const struct wined
@@ -1582,13 +1579,7 @@ static void state_colorwrite(struct wined3d_context *context, const struct wined
mask0 & WINED3DCOLORWRITEENABLE_ALPHA ? GL_TRUE : GL_FALSE);
checkGLcall("glColorMask(...)");
@ -162,7 +170,7 @@ index 3460d69..26c5815 100644
}
static void set_color_mask(const struct wined3d_gl_info *gl_info, UINT index, DWORD mask)
@@ -1591,24 +1582,20 @@ static void set_color_mask(const struct wined3d_gl_info *gl_info, UINT index, DW
@@ -1601,24 +1592,20 @@ static void set_color_mask(const struct wined3d_gl_info *gl_info, UINT index, DW
checkGLcall("glColorMaski");
}
@ -197,7 +205,7 @@ index 3460d69..26c5815 100644
}
static void state_localviewer(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
@@ -5281,18 +5268,26 @@ const struct StateEntryTemplate misc_state_template[] =
@@ -5296,18 +5283,26 @@ const struct StateEntryTemplate misc_state_template[] =
{ STATE_RENDER(WINED3D_RS_MULTISAMPLEANTIALIAS), { STATE_RENDER(WINED3D_RS_MULTISAMPLEANTIALIAS), state_msaa_w }, WINED3D_GL_EXT_NONE },
{ STATE_RENDER(WINED3D_RS_MULTISAMPLEMASK), { STATE_RENDER(WINED3D_RS_MULTISAMPLEMASK), state_multisampmask }, WINED3D_GL_EXT_NONE },
{ STATE_RENDER(WINED3D_RS_DEBUGMONITORTOKEN), { STATE_RENDER(WINED3D_RS_DEBUGMONITORTOKEN), state_debug_monitor }, WINED3D_GL_EXT_NONE },
@ -274,10 +282,10 @@ index b9efcec..c9b3527 100644
/* Texture Stage States - Put directly into state block, we will call function below */
for (i = 0; i < MAX_TEXTURES; ++i)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 6e80f85..c8cceb9 100644
index 5ce06bb..5bd7d50 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -376,6 +376,7 @@ static void surface_blt_fbo(const struct wined3d_device *device,
@@ -383,6 +383,7 @@ static void surface_blt_fbo(const struct wined3d_device *device,
RECT src_rect, dst_rect;
GLenum gl_filter;
GLenum buffer;
@ -285,7 +293,7 @@ index 6e80f85..c8cceb9 100644
TRACE("device %p, filter %s,\n", device, debug_d3dtexturefiltertype(filter));
TRACE("src_surface %p, src_location %s, src_rect %s,\n",
@@ -473,10 +474,8 @@ static void surface_blt_fbo(const struct wined3d_device *device,
@@ -480,10 +481,8 @@ static void surface_blt_fbo(const struct wined3d_device *device,
context_invalidate_state(context, STATE_FRAMEBUFFER);
gl_info->gl_ops.gl.p_glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
@ -299,10 +307,10 @@ index 6e80f85..c8cceb9 100644
gl_info->gl_ops.gl.p_glDisable(GL_SCISSOR_TEST);
context_invalidate_state(context, STATE_RENDER(WINED3D_RS_SCISSORTESTENABLE));
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 5de53d0..d6f3e91 100644
index 9adf2da..5bf6889 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -4408,7 +4408,6 @@ const char *debug_d3drenderstate(enum wined3d_render_state state)
@@ -4443,7 +4443,6 @@ const char *debug_d3drenderstate(enum wined3d_render_state state)
D3DSTATE_TO_STR(WINED3D_RS_DEBUGMONITORTOKEN);
D3DSTATE_TO_STR(WINED3D_RS_POINTSIZE_MAX);
D3DSTATE_TO_STR(WINED3D_RS_INDEXEDVERTEXBLENDENABLE);
@ -310,7 +318,7 @@ index 5de53d0..d6f3e91 100644
D3DSTATE_TO_STR(WINED3D_RS_TWEENFACTOR);
D3DSTATE_TO_STR(WINED3D_RS_BLENDOP);
D3DSTATE_TO_STR(WINED3D_RS_POSITIONDEGREE);
@@ -4428,9 +4427,14 @@ const char *debug_d3drenderstate(enum wined3d_render_state state)
@@ -4463,9 +4462,14 @@ const char *debug_d3drenderstate(enum wined3d_render_state state)
D3DSTATE_TO_STR(WINED3D_RS_BACK_STENCILZFAIL);
D3DSTATE_TO_STR(WINED3D_RS_BACK_STENCILPASS);
D3DSTATE_TO_STR(WINED3D_RS_BACK_STENCILFUNC);
@ -326,10 +334,10 @@ index 5de53d0..d6f3e91 100644
D3DSTATE_TO_STR(WINED3D_RS_SRGBWRITEENABLE);
D3DSTATE_TO_STR(WINED3D_RS_DEPTHBIAS);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 021c274..3183a0f 100644
index 176faea..09e227c 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -275,6 +275,7 @@ static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup
@@ -277,6 +277,7 @@ static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup
#define MAX_TGSM_REGISTERS 8192
#define MAX_VERTEX_BLENDS 4
#define MAX_MULTISAMPLE_TYPES 8
@ -338,10 +346,10 @@ index 021c274..3183a0f 100644
struct min_lookup
{
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 8864965..58da08c 100644
index bd4969a..ac39a50 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -388,8 +388,20 @@ enum wined3d_render_state
@@ -390,8 +390,20 @@ enum wined3d_render_state
WINED3D_RS_BLENDOPALPHA = 209,
WINED3D_RS_DEPTHCLIP = 210,
WINED3D_RS_DEPTHBIASCLAMP = 211,
@ -364,5 +372,5 @@ index 8864965..58da08c 100644
enum wined3d_blend
{
--
2.7.4
1.9.1

View File

@ -1,67 +0,0 @@
From 9d196cf502e963e7ce807a1a338f963078a2b6d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 22 Jul 2017 04:37:50 +0200
Subject: w2_32: Ignore setting several port assignment related socket options.
---
dlls/ws2_32/socket.c | 16 ++++++++++++++++
include/winsock.h | 9 +++++++++
2 files changed, 25 insertions(+)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index fac47d78527..a34e3b97574 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -5957,6 +5957,22 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname,
break;
#endif
+ case WS_SO_RANDOMIZE_PORT:
+ FIXME("Ignoring WS_SO_RANDOMIZE_PORT\n");
+ return 0;
+
+ case WS_SO_PORT_SCALABILITY:
+ FIXME("Ignoring WS_SO_PORT_SCALABILITY\n");
+ return 0;
+
+ case WS_SO_REUSE_UNICASTPORT:
+ FIXME("Ignoring WS_SO_REUSE_UNICASTPORT\n");
+ return 0;
+
+ case WS_SO_REUSE_MULTICASTPORT:
+ FIXME("Ignoring WS_SO_REUSE_MULTICASTPORT\n");
+ return 0;
+
default:
TRACE("Unknown SOL_SOCKET optname: 0x%08x\n", optname);
SetLastError(WSAENOPROTOOPT);
diff --git a/include/winsock.h b/include/winsock.h
index 2feb22466e4..fc1bc0c8d5b 100644
--- a/include/winsock.h
+++ b/include/winsock.h
@@ -664,6 +664,10 @@ typedef struct WS(WSAData)
#define SO_TYPE 0x1008
#define SO_BSP_STATE 0x1009
+#define SO_RANDOMIZE_PORT 0x3005
+#define SO_PORT_SCALABILITY 0x3006
+#define SO_REUSE_UNICASTPORT 0x3007
+#define SO_REUSE_MULTICASTPORT 0x3008
#define IOCPARM_MASK 0x7f
#define IOC_VOID 0x20000000
@@ -699,6 +703,11 @@ typedef struct WS(WSAData)
#define WS_SO_TYPE 0x1008
#define WS_SO_BSP_STATE 0x1009
+#define WS_SO_RANDOMIZE_PORT 0x3005
+#define WS_SO_PORT_SCALABILITY 0x3006
+#define WS_SO_REUSE_UNICASTPORT 0x3007
+#define WS_SO_REUSE_MULTICASTPORT 0x3008
+
#define WS_IOCPARM_MASK 0x7f
#define WS_IOC_VOID 0x20000000
#define WS_IOC_OUT 0x40000000
--
2.13.1

View File

@ -1,15 +1,15 @@
From af47a9365411f0b25cd54ad38d152fe4878da10f Mon Sep 17 00:00:00 2001
From 091225489a181bcc68d0dd70cb94c4711fc7792e Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 15 Jul 2017 22:20:28 +0200
Subject: xaudio2_7: Use assembly wrapper to call OnVoiceProcessingPassStart
callback.
Subject: [PATCH] xaudio2_7: Use assembly wrapper to call
OnVoiceProcessingPassStart callback.
---
dlls/xaudio2_7/xaudio_dll.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index 13f591630fd..5770a99b44c 100644
index 0682a5f..19dd9b0 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -17,6 +17,7 @@
@ -59,5 +59,5 @@ index 13f591630fd..5770a99b44c 100644
{
TRACE("wFormatTag: 0x%x (", fmt->wFormatTag);
--
2.13.1
1.9.1

View File

@ -1 +1 @@
Wine Staging 3.2 (Unreleased)
Wine Staging 3.3 (Unreleased)