You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
36 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a65b6fa780 | ||
|
92bc06bd9e | ||
|
2b4120187b | ||
|
5dcd52a67f | ||
|
10837badd4 | ||
|
c9b2336f64 | ||
|
a06d982751 | ||
|
e963b417b3 | ||
|
079da46f96 | ||
|
3003efacdb | ||
|
14acf51a2d | ||
|
830a8b9975 | ||
|
4a75337774 | ||
|
b113596b6c | ||
|
e5d2247213 | ||
|
fbc61357d3 | ||
|
d06996cabd | ||
|
e4ac3ea735 | ||
|
25bd49ecb6 | ||
|
7a2c0d03d7 | ||
|
c081ded2be | ||
|
c372796653 | ||
|
8568fe0a24 | ||
|
6897c8b67b | ||
|
0844f36738 | ||
|
b9a9f51c59 | ||
|
2dd39323aa | ||
|
4f7c521e11 | ||
|
a16c4ffd33 | ||
|
35d020002f | ||
|
a781d341a5 | ||
|
3a8de0f3f4 | ||
|
e2750d967a | ||
|
a127f84245 | ||
|
e3753add9b | ||
|
55ab42ece0 |
@@ -13,7 +13,7 @@ Installation
|
||||
|
||||
Ready-to-use packages for Wine Staging are available for a variety of Linux
|
||||
distributions and for Mac OS X. Just follow the
|
||||
[installation instructions](https://github.com/wine-compholio/wine-staging/wiki/Installation)
|
||||
[installation instructions](https://wine-staging.com/installation.html)
|
||||
for your operating system.
|
||||
|
||||
On most distributions the `wine-staging` package is installed to
|
||||
|
@@ -0,0 +1,26 @@
|
||||
From 43628d9b1905396ff6442e4f1e07c9dd48739b19 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Fri, 14 Apr 2017 15:57:18 +0200
|
||||
Subject: ole32: Fix compilation with recent versions of gcc.
|
||||
|
||||
---
|
||||
dlls/ole32/storage32.h | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/dlls/ole32/storage32.h b/dlls/ole32/storage32.h
|
||||
index 4fcfd9c362..2b23ab8eb8 100644
|
||||
--- a/dlls/ole32/storage32.h
|
||||
+++ b/dlls/ole32/storage32.h
|
||||
@@ -526,6 +526,9 @@ StgStreamImpl* StgStreamImpl_Construct(
|
||||
/******************************************************************************
|
||||
* Endian conversion macros
|
||||
*/
|
||||
+#undef htole32
|
||||
+#undef htole16
|
||||
+
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
|
||||
#define htole32(x) RtlUlongByteSwap(x)
|
||||
--
|
||||
2.12.2
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From fdc085e009942fa89ef5f0cd4104ab78c9d80b1b Mon Sep 17 00:00:00 2001
|
||||
From bee5e0baac722c66ad8c1034a65a2cecfe74716e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 5 Mar 2017 23:50:06 +0100
|
||||
Subject: advapi32: Implement LsaLookupPrivilegeName.
|
||||
@@ -12,20 +12,20 @@ Subject: advapi32: Implement LsaLookupPrivilegeName.
|
||||
5 files changed, 60 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec
|
||||
index 3000973265c..2c599c8bd92 100644
|
||||
index 078bb8fc25..124f527282 100644
|
||||
--- a/dlls/advapi32/advapi32.spec
|
||||
+++ b/dlls/advapi32/advapi32.spec
|
||||
@@ -446,7 +446,7 @@
|
||||
@ stdcall LsaLookupNames2(ptr long long ptr ptr ptr)
|
||||
@@ -469,7 +469,7 @@
|
||||
@ stdcall LsaLookupNames(long long ptr ptr ptr)
|
||||
@ stdcall LsaLookupNames2(ptr long long ptr ptr ptr)
|
||||
@ stub LsaLookupPrivilegeDisplayName
|
||||
-# @ stub LsaLookupPrivilegeName
|
||||
+@ stdcall LsaLookupPrivilegeName(long ptr ptr)
|
||||
# @ stub LsaLookupPrivilegeValue
|
||||
@ stdcall LsaLookupSids(ptr long ptr ptr ptr)
|
||||
# @ stub LsaManageSidNameMapping
|
||||
# @ stub LsaLookupSids2
|
||||
diff --git a/dlls/advapi32/advapi32_misc.h b/dlls/advapi32/advapi32_misc.h
|
||||
index d116ecb836e..ecb07f635a6 100644
|
||||
index d116ecb836..ecb07f635a 100644
|
||||
--- a/dlls/advapi32/advapi32_misc.h
|
||||
+++ b/dlls/advapi32/advapi32_misc.h
|
||||
@@ -68,4 +68,6 @@ static inline WCHAR *strdupAW( const char *src )
|
||||
@@ -36,10 +36,10 @@ index d116ecb836e..ecb07f635a6 100644
|
||||
+
|
||||
#endif /* __WINE_ADVAPI32MISC_H */
|
||||
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
|
||||
index 0f2167d19ab..6a7a69a9eb7 100644
|
||||
index 479201bfc1..ceb3b05c05 100644
|
||||
--- a/dlls/advapi32/lsa.c
|
||||
+++ b/dlls/advapi32/lsa.c
|
||||
@@ -1012,3 +1012,41 @@ NTSTATUS WINAPI LsaUnregisterPolicyChangeNotification(
|
||||
@@ -973,3 +973,41 @@ NTSTATUS WINAPI LsaUnregisterPolicyChangeNotification(
|
||||
FIXME("(%d,%p) stub\n", class, event);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
@@ -82,7 +82,7 @@ index 0f2167d19ab..6a7a69a9eb7 100644
|
||||
+ return STATUS_SUCCESS;
|
||||
+}
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index b0b368d6abf..24ec3099713 100644
|
||||
index e36792cff4..3bc8f48b19 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -1840,7 +1840,7 @@ static const WCHAR SE_IMPERSONATE_NAME_W[] =
|
||||
@@ -146,7 +146,7 @@ index b0b368d6abf..24ec3099713 100644
|
||||
}
|
||||
}
|
||||
diff --git a/include/ntsecapi.h b/include/ntsecapi.h
|
||||
index 2bb3d312e43..0bf0eca43ed 100644
|
||||
index 2bb3d312e4..0bf0eca43e 100644
|
||||
--- a/include/ntsecapi.h
|
||||
+++ b/include/ntsecapi.h
|
||||
@@ -370,6 +370,7 @@ NTSTATUS WINAPI LsaLookupNames(LSA_HANDLE,ULONG,PLSA_UNICODE_STRING,PLSA_REFEREN
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 01efac6b4fa338715ad775c147a6bfc42e0bc38e Mon Sep 17 00:00:00 2001
|
||||
From 63d642a1af3ccc579123cb8fd13959ab5e9136dd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 6 Mar 2017 00:01:53 +0100
|
||||
Subject: advapi32: Add stub for LsaLookupPrivilegeDisplayName.
|
||||
@@ -9,23 +9,23 @@ Subject: advapi32: Add stub for LsaLookupPrivilegeDisplayName.
|
||||
2 files changed, 22 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec
|
||||
index 2c599c8bd92..ce1838d8c5a 100644
|
||||
index 124f527282..0b03cec3f5 100644
|
||||
--- a/dlls/advapi32/advapi32.spec
|
||||
+++ b/dlls/advapi32/advapi32.spec
|
||||
@@ -445,7 +445,7 @@
|
||||
@@ -468,7 +468,7 @@
|
||||
# @ stub LsaICLookupSidsWithCreds
|
||||
@ stdcall LsaLookupNames2(ptr long long ptr ptr ptr)
|
||||
@ stdcall LsaLookupNames(long long ptr ptr ptr)
|
||||
@ stdcall LsaLookupNames2(ptr long long ptr ptr ptr)
|
||||
-@ stub LsaLookupPrivilegeDisplayName
|
||||
+@ stdcall LsaLookupPrivilegeDisplayName(long ptr ptr ptr)
|
||||
@ stdcall LsaLookupPrivilegeName(long ptr ptr)
|
||||
# @ stub LsaLookupPrivilegeValue
|
||||
@ stdcall LsaLookupSids(ptr long ptr ptr ptr)
|
||||
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
|
||||
index 6a7a69a9eb7..fdb238f74b2 100644
|
||||
index ceb3b05c05..c2e02fb462 100644
|
||||
--- a/dlls/advapi32/lsa.c
|
||||
+++ b/dlls/advapi32/lsa.c
|
||||
@@ -45,6 +45,12 @@ WINE_DEFAULT_DEBUG_CHANNEL(advapi);
|
||||
@@ -44,6 +44,12 @@ WINE_DEFAULT_DEBUG_CHANNEL(advapi);
|
||||
return FailureCode; \
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ index 6a7a69a9eb7..fdb238f74b2 100644
|
||||
static void dumpLsaAttributes(const LSA_OBJECT_ATTRIBUTES *oa)
|
||||
{
|
||||
if (oa)
|
||||
@@ -1050,3 +1056,18 @@ NTSTATUS WINAPI LsaLookupPrivilegeName(
|
||||
@@ -1011,3 +1017,18 @@ NTSTATUS WINAPI LsaLookupPrivilegeName(
|
||||
*name = priv_unicode;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,65 +0,0 @@
|
||||
From 97744349e9a23aa024910d87a89bd94652db4914 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 15 Jan 2016 13:07:09 +0100
|
||||
Subject: api-ms-win-core-quirks-l1-1-0: Add dll.
|
||||
|
||||
---
|
||||
configure.ac | 1 +
|
||||
dlls/api-ms-win-core-quirks-l1-1-0/Makefile.in | 1 +
|
||||
.../api-ms-win-core-quirks-l1-1-0.spec | 8 ++++++++
|
||||
tools/make_specfiles | 4 ++++
|
||||
4 files changed, 14 insertions(+)
|
||||
create mode 100644 dlls/api-ms-win-core-quirks-l1-1-0/Makefile.in
|
||||
create mode 100644 dlls/api-ms-win-core-quirks-l1-1-0/api-ms-win-core-quirks-l1-1-0.spec
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 84316f9..e826dd0 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -2720,6 +2720,7 @@ WINE_CONFIG_DLL(api-ms-win-core-processthreads-l1-1-2)
|
||||
WINE_CONFIG_DLL(api-ms-win-core-profile-l1-1-0)
|
||||
WINE_CONFIG_DLL(api-ms-win-core-psapi-l1-1-0)
|
||||
WINE_CONFIG_DLL(api-ms-win-core-psapi-obsolete-l1-1-0)
|
||||
+WINE_CONFIG_DLL(api-ms-win-core-quirks-l1-1-0)
|
||||
WINE_CONFIG_DLL(api-ms-win-core-realtime-l1-1-0)
|
||||
WINE_CONFIG_DLL(api-ms-win-core-registry-l1-1-0)
|
||||
WINE_CONFIG_DLL(api-ms-win-core-registryuserspecific-l1-1-0)
|
||||
diff --git a/dlls/api-ms-win-core-quirks-l1-1-0/Makefile.in b/dlls/api-ms-win-core-quirks-l1-1-0/Makefile.in
|
||||
new file mode 100644
|
||||
index 0000000..9486e8b
|
||||
--- /dev/null
|
||||
+++ b/dlls/api-ms-win-core-quirks-l1-1-0/Makefile.in
|
||||
@@ -0,0 +1 @@
|
||||
+MODULE = api-ms-win-core-quirks-l1-1-0.dll
|
||||
diff --git a/dlls/api-ms-win-core-quirks-l1-1-0/api-ms-win-core-quirks-l1-1-0.spec b/dlls/api-ms-win-core-quirks-l1-1-0/api-ms-win-core-quirks-l1-1-0.spec
|
||||
new file mode 100644
|
||||
index 0000000..54ce373
|
||||
--- /dev/null
|
||||
+++ b/dlls/api-ms-win-core-quirks-l1-1-0/api-ms-win-core-quirks-l1-1-0.spec
|
||||
@@ -0,0 +1,8 @@
|
||||
+@ stub QuirkGetData
|
||||
+@ stub QuirkGetData2
|
||||
+@ stdcall QuirkIsEnabled(ptr) kernelbase.QuirkIsEnabled
|
||||
+@ stub QuirkIsEnabled2
|
||||
+@ stub QuirkIsEnabled3
|
||||
+@ stub QuirkIsEnabledForPackage
|
||||
+@ stub QuirkIsEnabledForPackage2
|
||||
+@ stub QuirkIsEnabledForProcess
|
||||
diff --git a/tools/make_specfiles b/tools/make_specfiles
|
||||
index eba8548..609f7a0 100755
|
||||
--- a/tools/make_specfiles
|
||||
+++ b/tools/make_specfiles
|
||||
@@ -239,6 +239,10 @@ my @dll_groups =
|
||||
"api-ms-win-core-bem-l1-1-0",
|
||||
],
|
||||
[
|
||||
+ "kernelbase",
|
||||
+ "api-ms-win-core-quirks-l1-1-0",
|
||||
+ ],
|
||||
+ [
|
||||
"ole32",
|
||||
"api-ms-win-downlevel-ole32-l1-1-0",
|
||||
"api-ms-win-core-com-l1-1-0",
|
||||
--
|
||||
2.9.0
|
||||
|
@@ -1,58 +0,0 @@
|
||||
From d0688788458f243ccef2c337d7ab8f59ead75a3b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Thu, 4 Feb 2016 06:19:57 +0100
|
||||
Subject: kernelbase: Add stub for QuirkIsEnabled3.
|
||||
|
||||
---
|
||||
.../api-ms-win-core-quirks-l1-1-0.spec | 2 +-
|
||||
dlls/kernelbase/kernelbase.spec | 2 +-
|
||||
dlls/kernelbase/misc.c | 10 ++++++++++
|
||||
3 files changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/api-ms-win-core-quirks-l1-1-0/api-ms-win-core-quirks-l1-1-0.spec b/dlls/api-ms-win-core-quirks-l1-1-0/api-ms-win-core-quirks-l1-1-0.spec
|
||||
index 54ce373..1485512 100644
|
||||
--- a/dlls/api-ms-win-core-quirks-l1-1-0/api-ms-win-core-quirks-l1-1-0.spec
|
||||
+++ b/dlls/api-ms-win-core-quirks-l1-1-0/api-ms-win-core-quirks-l1-1-0.spec
|
||||
@@ -2,7 +2,7 @@
|
||||
@ stub QuirkGetData2
|
||||
@ stdcall QuirkIsEnabled(ptr) kernelbase.QuirkIsEnabled
|
||||
@ stub QuirkIsEnabled2
|
||||
-@ stub QuirkIsEnabled3
|
||||
+@ stdcall QuirkIsEnabled3(ptr ptr) kernelbase.QuirkIsEnabled3
|
||||
@ stub QuirkIsEnabledForPackage
|
||||
@ stub QuirkIsEnabledForPackage2
|
||||
@ stub QuirkIsEnabledForProcess
|
||||
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
|
||||
index 8fdb80d..c0b2594 100644
|
||||
--- a/dlls/kernelbase/kernelbase.spec
|
||||
+++ b/dlls/kernelbase/kernelbase.spec
|
||||
@@ -1189,7 +1189,7 @@
|
||||
@ stub QuirkGetData2
|
||||
@ stdcall QuirkIsEnabled(ptr)
|
||||
@ stub QuirkIsEnabled2
|
||||
-@ stub QuirkIsEnabled3
|
||||
+@ stdcall QuirkIsEnabled3(ptr ptr)
|
||||
@ stub QuirkIsEnabledForPackage
|
||||
@ stub QuirkIsEnabledForPackage2
|
||||
@ stub QuirkIsEnabledForPackage3
|
||||
diff --git a/dlls/kernelbase/misc.c b/dlls/kernelbase/misc.c
|
||||
index be1591a..e703e6d 100644
|
||||
--- a/dlls/kernelbase/misc.c
|
||||
+++ b/dlls/kernelbase/misc.c
|
||||
@@ -35,3 +35,13 @@ BOOL WINAPI QuirkIsEnabled(void *arg)
|
||||
FIXME("(%p): stub\n", arg);
|
||||
return FALSE;
|
||||
}
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * QuirkIsEnabled3 (KERNELBASE.@)
|
||||
+ */
|
||||
+BOOL WINAPI QuirkIsEnabled3(void *arg1, void *arg2)
|
||||
+{
|
||||
+ static int once;
|
||||
+ if (!once++) FIXME("(%p, %p): stub\n", arg1, arg2);
|
||||
+ return FALSE;
|
||||
+}
|
||||
--
|
||||
2.7.1
|
||||
|
@@ -1,17 +1,17 @@
|
||||
From aefdbc0fabb66052164ecd45fecfb0b947a130ac Mon Sep 17 00:00:00 2001
|
||||
From 988abb92ab5dc363b9ea734e256959eb542391e2 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 12 Apr 2016 01:02:34 +0200
|
||||
Subject: uiautomationcore: Add dll and stub some functions.
|
||||
|
||||
---
|
||||
dlls/uiautomationcore/Makefile.in | 1 +
|
||||
dlls/uiautomationcore/uia_main.c | 89 ++++++++++++++++++++++++++++-
|
||||
dlls/uiautomationcore/uiautomationcore.spec | 14 +++--
|
||||
include/uiautomationcoreapi.h | 16 ++++++
|
||||
4 files changed, 114 insertions(+), 6 deletions(-)
|
||||
dlls/uiautomationcore/uia_main.c | 57 +++++++++++++++++++++++++----
|
||||
dlls/uiautomationcore/uiautomationcore.spec | 6 +++
|
||||
include/uiautomationcoreapi.h | 9 +++--
|
||||
4 files changed, 61 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/dlls/uiautomationcore/Makefile.in b/dlls/uiautomationcore/Makefile.in
|
||||
index 78d6254a015..029fc2e4995 100644
|
||||
index 78d6254a01..029fc2e499 100644
|
||||
--- a/dlls/uiautomationcore/Makefile.in
|
||||
+++ b/dlls/uiautomationcore/Makefile.in
|
||||
@@ -1,4 +1,5 @@
|
||||
@@ -21,7 +21,7 @@ index 78d6254a015..029fc2e4995 100644
|
||||
C_SRCS = \
|
||||
uia_main.c
|
||||
diff --git a/dlls/uiautomationcore/uia_main.c b/dlls/uiautomationcore/uia_main.c
|
||||
index 994d8e6080b..f1429faeff9 100644
|
||||
index 6e795ab88f..37c56dacd5 100644
|
||||
--- a/dlls/uiautomationcore/uia_main.c
|
||||
+++ b/dlls/uiautomationcore/uia_main.c
|
||||
@@ -1,4 +1,5 @@
|
||||
@@ -30,20 +30,15 @@ index 994d8e6080b..f1429faeff9 100644
|
||||
* Copyright 2017 Jacek Caban for CodeWeavers
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@@ -16,7 +17,11 @@
|
||||
@@ -16,6 +17,7 @@
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
-#include "uiautomationcore.h"
|
||||
+#include <stdarg.h>
|
||||
+#include "windef.h"
|
||||
+#include "winbase.h"
|
||||
+#define COBJMACROS
|
||||
+#include "uiautomationcoreapi.h"
|
||||
#include "uiautomation.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
@@ -37,11 +42,91 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, void *lpv)
|
||||
@@ -37,12 +39,51 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, void *lpv)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -85,47 +80,6 @@ index 994d8e6080b..f1429faeff9 100644
|
||||
+};
|
||||
+
|
||||
+static IUnknown dummy = { &dummy_Vtbl };
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * UiaLookupId (uiautomationcore.@)
|
||||
+ */
|
||||
+int WINAPI UiaLookupId(AutomationIdentifierType type, const GUID *guid)
|
||||
+{
|
||||
+ FIXME("(%d, %s)\n", type, debugstr_guid(guid));
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * UiaGetReservedMixedAttributeValue (uiautomationcore.@)
|
||||
+ */
|
||||
+HRESULT WINAPI UiaGetReservedMixedAttributeValue(IUnknown **value)
|
||||
+{
|
||||
+ FIXME("(%p): stub\n", value);
|
||||
+
|
||||
+ *value = &dummy;
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * UiaGetReservedNotSupportedValue (uiautomationcore.@)
|
||||
+ */
|
||||
+HRESULT WINAPI UiaGetReservedNotSupportedValue(IUnknown **value)
|
||||
+{
|
||||
+ FIXME("(%p): stub\n", value);
|
||||
+
|
||||
+ *value = &dummy;
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * UiaReturnRawElementProvider (uiautomationcore.@)
|
||||
+ */
|
||||
+LRESULT WINAPI UiaReturnRawElementProvider(HWND hwnd, WPARAM wparam, LPARAM lparam,
|
||||
+ IRawElementProviderSimple *provider)
|
||||
+{
|
||||
+ FIXME("(%p, %lx, %lx, %p): stub\n", hwnd, wparam, lparam, provider);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/***********************************************************************
|
||||
* UiaClientsAreListening (uiautomationcore.@)
|
||||
@@ -136,11 +90,53 @@ index 994d8e6080b..f1429faeff9 100644
|
||||
+ FIXME("(): stub\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -51,8 +92,8 @@ BOOL WINAPI UiaClientsAreListening(void)
|
||||
*/
|
||||
HRESULT WINAPI UiaGetReservedMixedAttributeValue(IUnknown **value)
|
||||
{
|
||||
- FIXME("(%p) stub!\n", value);
|
||||
- *value = NULL;
|
||||
+ FIXME("(%p): stub!\n", value);
|
||||
+ *value = &dummy;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
@@ -61,17 +102,17 @@ HRESULT WINAPI UiaGetReservedMixedAttributeValue(IUnknown **value)
|
||||
*/
|
||||
HRESULT WINAPI UiaGetReservedNotSupportedValue(IUnknown **value)
|
||||
{
|
||||
- FIXME("(%p) stub!\n", value);
|
||||
- *value = NULL;
|
||||
+ FIXME("(%p): stub!\n", value);
|
||||
+ *value = &dummy;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* UiaLookupId (uiautomationcore.@)
|
||||
*/
|
||||
-int WINAPI UiaLookupId(enum AutomationIdentifierType type, const GUID *guid)
|
||||
+int WINAPI UiaLookupId(AutomationIdentifierType type, const GUID *guid)
|
||||
{
|
||||
- FIXME("(%d, %s) stub!\n", type, debugstr_guid(guid));
|
||||
+ FIXME("(%d, %s): stub!\n", type, debugstr_guid(guid));
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -81,6 +122,6 @@ int WINAPI UiaLookupId(enum AutomationIdentifierType type, const GUID *guid)
|
||||
LRESULT WINAPI UiaReturnRawElementProvider(HWND hwnd, WPARAM wParam,
|
||||
LPARAM lParam, IRawElementProviderSimple *elprov)
|
||||
{
|
||||
- FIXME("(%p, %lx, %lx, %p) stub!\n", hwnd, wParam, lParam, elprov);
|
||||
+ FIXME("(%p, %lx, %lx, %p): stub!\n", hwnd, wParam, lParam, elprov);
|
||||
return 0;
|
||||
}
|
||||
diff --git a/dlls/uiautomationcore/uiautomationcore.spec b/dlls/uiautomationcore/uiautomationcore.spec
|
||||
index 3026001b6b7..221711c41d2 100644
|
||||
index bff1303eda..221711c41d 100644
|
||||
--- a/dlls/uiautomationcore/uiautomationcore.spec
|
||||
+++ b/dlls/uiautomationcore/uiautomationcore.spec
|
||||
@@ -53,14 +53,16 @@
|
||||
@@ -53,6 +53,8 @@
|
||||
@ stub TransformPattern_Rotate
|
||||
@ stub UiaAddEvent
|
||||
@ stdcall UiaClientsAreListening()
|
||||
@@ -149,27 +145,15 @@ index 3026001b6b7..221711c41d2 100644
|
||||
@ stub UiaEventAddWindow
|
||||
@ stub UiaEventRemoveWindow
|
||||
@ stub UiaFind
|
||||
@ stub UiaGetErrorDescription
|
||||
@ stub UiaGetPatternProvider
|
||||
@ stub UiaGetPropertyValue
|
||||
-@ stub UiaGetReservedMixedAttributeValue
|
||||
-@ stub UiaGetReservedNotSupportedValue
|
||||
+@ stdcall UiaGetReservedMixedAttributeValue(ptr)
|
||||
+@ stdcall UiaGetReservedNotSupportedValue(ptr)
|
||||
@ stub UiaGetRootNode
|
||||
@ stub UiaGetRuntimeId
|
||||
@ stub UiaGetUpdatedCache
|
||||
@@ -69,7 +71,8 @@
|
||||
@@ -69,6 +71,7 @@
|
||||
@ stub UiaHUiaNodeFromVariant
|
||||
@ stub UiaHasServerSideProvider
|
||||
@ stub UiaHostProviderFromHwnd
|
||||
-@ stub UiaLookupId
|
||||
+@ stub UiaIAccessibleFromProvider
|
||||
+@ stdcall UiaLookupId(long ptr)
|
||||
@ stdcall UiaLookupId(long ptr)
|
||||
@ stub UiaNavigate
|
||||
@ stub UiaNodeFromFocus
|
||||
@ stub UiaNodeFromHandle
|
||||
@@ -77,13 +80,16 @@
|
||||
@@ -77,10 +80,13 @@
|
||||
@ stub UiaNodeFromProvider
|
||||
@ stub UiaNodeRelease
|
||||
@ stub UiaPatternRelease
|
||||
@@ -182,52 +166,35 @@ index 3026001b6b7..221711c41d2 100644
|
||||
+@ stub UiaRaiseTextEditTextChangedEvent
|
||||
@ stub UiaRegisterProviderCallback
|
||||
@ stub UiaRemoveEvent
|
||||
-@ stub UiaReturnRawElementProvider
|
||||
+@ stdcall UiaReturnRawElementProvider(long long long ptr)
|
||||
@ stub UiaSetFocus
|
||||
@ stub UiaTextRangeRelease
|
||||
@ stub ValuePattern_SetValue
|
||||
@ stdcall UiaReturnRawElementProvider(long long long ptr)
|
||||
diff --git a/include/uiautomationcoreapi.h b/include/uiautomationcoreapi.h
|
||||
index 340f5005db4..b9107ceb792 100644
|
||||
index 6c1752ec64..1a844d0cb7 100644
|
||||
--- a/include/uiautomationcoreapi.h
|
||||
+++ b/include/uiautomationcoreapi.h
|
||||
@@ -19,6 +19,8 @@
|
||||
#ifndef _INC_UIAUTOMATIONCOREAPI
|
||||
#define _INC_UIAUTOMATIONCOREAPI
|
||||
|
||||
+#include "uiautomationcore.h"
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -34,6 +36,16 @@ extern "C" {
|
||||
#define UiaAppendRuntimeId 3
|
||||
#define UiaRootObjectId -25
|
||||
@@ -39,18 +39,19 @@ DECLARE_HANDLE(HUIAPATTERNOBJECT);
|
||||
DECLARE_HANDLE(HUIATEXTRANGE);
|
||||
DECLARE_HANDLE(HUIAEVENT);
|
||||
|
||||
-enum AutomationIdentifierType
|
||||
+typedef enum AutomationIdentifierType
|
||||
+{
|
||||
+ AutomationIdentifierType_Property,
|
||||
+ AutomationIdentifierType_Pattern,
|
||||
+ AutomationIdentifierType_Event,
|
||||
+ AutomationIdentifierType_ControlType,
|
||||
{
|
||||
AutomationIdentifierType_Property,
|
||||
AutomationIdentifierType_Pattern,
|
||||
AutomationIdentifierType_Event,
|
||||
AutomationIdentifierType_ControlType,
|
||||
- AutomationIdentifierType_TextAttribute
|
||||
-};
|
||||
+ AutomationIdentifierType_TextAttribute,
|
||||
+ AutomationIdentifierType_LandmarkType,
|
||||
+} AutomationIdentifierType;
|
||||
+
|
||||
DECLARE_HANDLE(HUIANODE);
|
||||
DECLARE_HANDLE(HUIAPATTERNOBJECT);
|
||||
DECLARE_HANDLE(HUIATEXTRANGE);
|
||||
@@ -41,6 +53,10 @@ DECLARE_HANDLE(HUIAEVENT);
|
||||
|
||||
BOOL WINAPI UiaPatternRelease(HUIAPATTERNOBJECT hobj);
|
||||
BOOL WINAPI UiaTextRangeRelease(HUIATEXTRANGE hobj);
|
||||
HRESULT WINAPI UiaGetReservedMixedAttributeValue(IUnknown **value);
|
||||
HRESULT WINAPI UiaGetReservedNotSupportedValue(IUnknown **value);
|
||||
-int WINAPI UiaLookupId(enum AutomationIdentifierType type, const GUID *guid);
|
||||
+int WINAPI UiaLookupId(AutomationIdentifierType type, const GUID *guid);
|
||||
+HRESULT WINAPI UiaGetReservedMixedAttributeValue(IUnknown **value);
|
||||
+HRESULT WINAPI UiaGetReservedNotSupportedValue(IUnknown **value);
|
||||
+LRESULT WINAPI UiaReturnRawElementProvider(HWND hwnd, WPARAM wparam, LPARAM lparam, IRawElementProviderSimple *provider);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
BOOL WINAPI UiaPatternRelease(HUIAPATTERNOBJECT hobj);
|
||||
LRESULT WINAPI UiaReturnRawElementProvider(HWND hwnd, WPARAM wParam, LPARAM lParam, IRawElementProviderSimple *elprov);
|
||||
BOOL WINAPI UiaTextRangeRelease(HUIATEXTRANGE hobj);
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
@@ -0,0 +1,61 @@
|
||||
From 11e0603c3ec889f0b8b2f28f9a44d96a8183de31 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sun, 16 Apr 2017 19:18:21 +0200
|
||||
Subject: configure: Support for recent OSMesa versions.
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
dlls/gdi32/dibdrv/opengl.c | 17 +++++++++--------
|
||||
2 files changed, 10 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 1a5b0de0e3..f5b587c80a 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1149,7 +1149,7 @@ This probably prevents linking to OpenGL. Try deleting the file and restarting c
|
||||
|
||||
if test "x$with_osmesa" != "xno"
|
||||
then
|
||||
- WINE_CHECK_SONAME(OSMesa,glAccum,,,[$X_LIBS -lm $X_EXTRA_LIBS])
|
||||
+ WINE_CHECK_SONAME(OSMesa,OSMesaGetProcAddress,,,[$X_LIBS -lm $X_EXTRA_LIBS])
|
||||
WINE_NOTICE_WITH(osmesa,[test "x$ac_cv_lib_soname_OSMesa" = "x"],
|
||||
[libOSMesa ${notice_platform}development files not found (or too old), OpenGL rendering in bitmaps won't be supported.])
|
||||
fi
|
||||
diff --git a/dlls/gdi32/dibdrv/opengl.c b/dlls/gdi32/dibdrv/opengl.c
|
||||
index 41331169c4..77d63201cf 100644
|
||||
--- a/dlls/gdi32/dibdrv/opengl.c
|
||||
+++ b/dlls/gdi32/dibdrv/opengl.c
|
||||
@@ -113,14 +113,6 @@ static BOOL init_opengl(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
- for (i = 0; i < sizeof(opengl_func_names)/sizeof(opengl_func_names[0]); i++)
|
||||
- {
|
||||
- if (!(((void **)&opengl_funcs.gl)[i] = wine_dlsym( osmesa_handle, opengl_func_names[i], buffer, sizeof(buffer) )))
|
||||
- {
|
||||
- ERR( "%s not found in %s (%s), disabling.\n", opengl_func_names[i], SONAME_LIBOSMESA, buffer );
|
||||
- goto failed;
|
||||
- }
|
||||
- }
|
||||
#define LOAD_FUNCPTR(f) do if (!(p##f = wine_dlsym( osmesa_handle, #f, buffer, sizeof(buffer) ))) \
|
||||
{ \
|
||||
ERR( "%s not found in %s (%s), disabling.\n", #f, SONAME_LIBOSMESA, buffer ); \
|
||||
@@ -134,6 +126,15 @@ static BOOL init_opengl(void)
|
||||
LOAD_FUNCPTR(OSMesaPixelStore);
|
||||
#undef LOAD_FUNCPTR
|
||||
|
||||
+ for (i = 0; i < sizeof(opengl_func_names)/sizeof(opengl_func_names[0]); i++)
|
||||
+ {
|
||||
+ if (!(((void **)&opengl_funcs.gl)[i] = pOSMesaGetProcAddress( opengl_func_names[i] )))
|
||||
+ {
|
||||
+ ERR( "%s not found in %s, disabling.\n", opengl_func_names[i], SONAME_LIBOSMESA );
|
||||
+ goto failed;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return TRUE;
|
||||
|
||||
failed:
|
||||
--
|
||||
2.12.2
|
||||
|
1
patches/configure-OSMesa/definition
Normal file
1
patches/configure-OSMesa/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: Support compilation with recent OSMesa versions
|
@@ -1,4 +1,4 @@
|
||||
From b02ee3d1c5dc1fd3040f81d87d3b17f5148fe2c5 Mon Sep 17 00:00:00 2001
|
||||
From 4ce7612fe0c6fd65f89403c8703e5395fbb4a85d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 28 Jul 2015 17:26:09 +0200
|
||||
Subject: d3dx9_36: Return dummy skininfo interface in D3DXLoadSkinMeshFromXof
|
||||
@@ -11,18 +11,18 @@ Subject: d3dx9_36: Return dummy skininfo interface in D3DXLoadSkinMeshFromXof
|
||||
3 files changed, 30 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h
|
||||
index a0e62f1..e9f7187 100644
|
||||
index abb3114e89..4c6d642b7e 100644
|
||||
--- a/dlls/d3dx9_36/d3dx9_private.h
|
||||
+++ b/dlls/d3dx9_36/d3dx9_private.h
|
||||
@@ -198,4 +198,6 @@ HRESULT d3dx_evaluate_parameter(struct d3dx_param_eval *peval,
|
||||
HRESULT d3dx_param_eval_set_shader_constants(struct IDirect3DDevice9 *device,
|
||||
struct d3dx_param_eval *peval) DECLSPEC_HIDDEN;
|
||||
@@ -241,4 +241,6 @@ HRESULT d3dx_param_eval_set_shader_constants(struct IDirect3DDevice9 *device,
|
||||
struct d3dx_param_eval *peval, BOOL update_all) DECLSPEC_HIDDEN;
|
||||
BOOL is_param_eval_input_dirty(struct d3dx_param_eval *peval) DECLSPEC_HIDDEN;
|
||||
|
||||
+HRESULT create_dummy_skin(ID3DXSkinInfo **iface) DECLSPEC_HIDDEN;
|
||||
+
|
||||
#endif /* __WINE_D3DX9_PRIVATE_H */
|
||||
diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c
|
||||
index 3204ea7..61dd203 100644
|
||||
index c26aa7271f..b70f4dcaa4 100644
|
||||
--- a/dlls/d3dx9_36/mesh.c
|
||||
+++ b/dlls/d3dx9_36/mesh.c
|
||||
@@ -3332,6 +3332,13 @@ static HRESULT parse_mesh(ID3DXFileData *filedata, struct mesh_data *mesh_data,
|
||||
@@ -40,7 +40,7 @@ index 3204ea7..61dd203 100644
|
||||
|
||||
end:
|
||||
diff --git a/dlls/d3dx9_36/skin.c b/dlls/d3dx9_36/skin.c
|
||||
index f197d33..bed4b9f 100644
|
||||
index f197d33582..bed4b9f49d 100644
|
||||
--- a/dlls/d3dx9_36/skin.c
|
||||
+++ b/dlls/d3dx9_36/skin.c
|
||||
@@ -94,7 +94,7 @@ static ULONG WINAPI d3dx9_skin_info_Release(ID3DXSkinInfo *iface)
|
||||
@@ -77,5 +77,5 @@ index f197d33..bed4b9f 100644
|
||||
+ return D3D_OK;
|
||||
+}
|
||||
--
|
||||
2.7.1
|
||||
2.11.0
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From caafb5926a24065e96350fc255ea92c0863c2730 Mon Sep 17 00:00:00 2001
|
||||
From 07bb6e9c60e3525ccf70f979d60f045e4300dbc4 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Costa <titan.costa@gmail.com>
|
||||
Date: Fri, 19 Dec 2014 22:31:46 +0100
|
||||
Subject: d3dx9_36: Implement ID3DXEffect_FindNextValidTechnique + add tests.
|
||||
@@ -9,10 +9,10 @@ Subject: d3dx9_36: Implement ID3DXEffect_FindNextValidTechnique + add tests.
|
||||
2 files changed, 91 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
|
||||
index 42f5aea966b..7c1d1787bf1 100644
|
||||
index 813b57e1ea..3c5f7ba8b8 100644
|
||||
--- a/dlls/d3dx9_36/effect.c
|
||||
+++ b/dlls/d3dx9_36/effect.c
|
||||
@@ -3538,13 +3538,41 @@ static HRESULT WINAPI ID3DXEffectImpl_ValidateTechnique(ID3DXEffect* iface, D3DX
|
||||
@@ -3652,13 +3652,41 @@ static HRESULT WINAPI ID3DXEffectImpl_ValidateTechnique(ID3DXEffect* iface, D3DX
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
@@ -58,11 +58,11 @@ index 42f5aea966b..7c1d1787bf1 100644
|
||||
|
||||
static BOOL walk_parameter_dep(struct d3dx_parameter *param, walk_parameter_dep_func param_func,
|
||||
diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c
|
||||
index 56d9fe627be..1b9bea6a55c 100644
|
||||
index de5ae69ec9..aba65d11fd 100644
|
||||
--- a/dlls/d3dx9_36/tests/effect.c
|
||||
+++ b/dlls/d3dx9_36/tests/effect.c
|
||||
@@ -4413,6 +4413,65 @@ static void test_effect_out_of_bounds_selector(IDirect3DDevice9 *device)
|
||||
effect->lpVtbl->Release(effect);
|
||||
@@ -5681,6 +5681,65 @@ static void test_effect_state_manager(IDirect3DDevice9 *device)
|
||||
ok(!refcount, "State manager was not properly freed, refcount %u.\n", refcount);
|
||||
}
|
||||
|
||||
+/*
|
||||
@@ -127,10 +127,10 @@ index 56d9fe627be..1b9bea6a55c 100644
|
||||
START_TEST(effect)
|
||||
{
|
||||
HWND wnd;
|
||||
@@ -4457,6 +4516,7 @@ START_TEST(effect)
|
||||
test_effect_preshader_ops(device);
|
||||
test_effect_isparameterused(device);
|
||||
test_effect_out_of_bounds_selector(device);
|
||||
@@ -5728,6 +5787,7 @@ START_TEST(effect)
|
||||
test_effect_commitchanges(device);
|
||||
test_effect_preshader_relative_addressing(device);
|
||||
test_effect_state_manager(device);
|
||||
+ test_effect_technique_validation(device);
|
||||
|
||||
count = IDirect3DDevice9_Release(device);
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 594e57c855592fe07e73003926c09520bc357416 Mon Sep 17 00:00:00 2001
|
||||
From d8b434940cd2206dd8c6c731c1ce2d331e0b0d50 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Thu, 2 Feb 2017 20:49:15 +0100
|
||||
Subject: kernel32: Add stub for GetPackageFullName.
|
||||
@@ -11,7 +11,7 @@ Subject: kernel32: Add stub for GetPackageFullName.
|
||||
4 files changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/api-ms-win-appmodel-runtime-l1-1-1/api-ms-win-appmodel-runtime-l1-1-1.spec b/dlls/api-ms-win-appmodel-runtime-l1-1-1/api-ms-win-appmodel-runtime-l1-1-1.spec
|
||||
index 50f8594785f..4d2edd60f5a 100644
|
||||
index 50f8594785..4d2edd60f5 100644
|
||||
--- a/dlls/api-ms-win-appmodel-runtime-l1-1-1/api-ms-win-appmodel-runtime-l1-1-1.spec
|
||||
+++ b/dlls/api-ms-win-appmodel-runtime-l1-1-1/api-ms-win-appmodel-runtime-l1-1-1.spec
|
||||
@@ -10,7 +10,7 @@
|
||||
@@ -24,7 +24,7 @@ index 50f8594785f..4d2edd60f5a 100644
|
||||
@ stub GetPackageInfo
|
||||
@ stub GetPackagePath
|
||||
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
|
||||
index 2668386bf84..f2fcf109715 100644
|
||||
index 819b52dbb9..4dcc40ea5d 100644
|
||||
--- a/dlls/kernel32/kernel32.spec
|
||||
+++ b/dlls/kernel32/kernel32.spec
|
||||
@@ -761,6 +761,7 @@
|
||||
@@ -36,7 +36,7 @@ index 2668386bf84..f2fcf109715 100644
|
||||
@ stdcall GetPriorityClass(long)
|
||||
@ stdcall GetPrivateProfileIntA(str str long str)
|
||||
diff --git a/dlls/kernel32/version.c b/dlls/kernel32/version.c
|
||||
index 5a233efe56f..3cca2ae68ee 100644
|
||||
index 5a233efe56..3cca2ae68e 100644
|
||||
--- a/dlls/kernel32/version.c
|
||||
+++ b/dlls/kernel32/version.c
|
||||
@@ -228,3 +228,12 @@ LONG WINAPI GetCurrentPackageFullName(UINT32 *length, PWSTR name)
|
||||
@@ -53,18 +53,18 @@ index 5a233efe56f..3cca2ae68ee 100644
|
||||
+ return APPMODEL_ERROR_NO_PACKAGE;
|
||||
+}
|
||||
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
|
||||
index 12f36c5ede3..daba198bec5 100644
|
||||
index 9fba5803b2..d040ba00a8 100644
|
||||
--- a/dlls/kernelbase/kernelbase.spec
|
||||
+++ b/dlls/kernelbase/kernelbase.spec
|
||||
@@ -569,7 +569,7 @@
|
||||
@ stub GetPackageContext
|
||||
@ stub GetPackageFamilyName
|
||||
@ stub GetPackageFamilyNameFromToken
|
||||
-@ stub GetPackageFullName
|
||||
@@ -593,7 +593,7 @@
|
||||
# @ stub GetPackageContext
|
||||
# @ stub GetPackageFamilyName
|
||||
# @ stub GetPackageFamilyNameFromToken
|
||||
-# @ stub GetPackageFullName
|
||||
+@ stdcall GetPackageFullName(long ptr ptr) kernel32.GetPackageFullName
|
||||
@ stub GetPackageFullNameFromToken
|
||||
@ stub GetPackageId
|
||||
@ stub GetPackageInfo
|
||||
# @ stub GetPackageFullNameFromToken
|
||||
# @ stub GetPackageId
|
||||
# @ stub GetPackageInfo
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 32d3c69ae680a7b6f71e203ca33f882eb0b69c47 Mon Sep 17 00:00:00 2001
|
||||
From a469c846c5e2abc7a0a4c478b33aeaa83e53f6bb Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Fri, 15 Aug 2014 23:06:06 +0200
|
||||
Subject: ntdll: Move logic to check for broken pipe into a separate function.
|
||||
@@ -8,10 +8,10 @@ Subject: ntdll: Move logic to check for broken pipe into a separate function.
|
||||
1 file changed, 39 insertions(+), 36 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index a20c3e8..8de4b98 100644
|
||||
index 41dd1ae877..03864b7239 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -411,6 +411,31 @@ NTSTATUS FILE_GetNtStatus(void)
|
||||
@@ -490,6 +490,31 @@ NTSTATUS FILE_GetNtStatus(void)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,9 +43,9 @@ index a20c3e8..8de4b98 100644
|
||||
/* helper function for NtReadFile and FILE_AsyncReadService */
|
||||
static NTSTATUS read_unix_fd(int fd, char *buf, ULONG *total, ULONG length,
|
||||
enum server_fd_type type, BOOL avail_mode)
|
||||
@@ -1557,44 +1582,22 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
if ((status = server_get_unix_fd( handle, FILE_READ_DATA, &fd, &needs_close, NULL, NULL )))
|
||||
@@ -1719,44 +1744,22 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
break;
|
||||
}
|
||||
|
||||
-#ifdef FIONREAD
|
||||
- if (ioctl( fd, FIONREAD, &avail ) != 0)
|
||||
@@ -103,5 +103,5 @@ index a20c3e8..8de4b98 100644
|
||||
}
|
||||
if (needs_close) close( fd );
|
||||
--
|
||||
2.1.3
|
||||
2.11.0
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From a6015c0c962802b44e1bf918e454745f1cc377b8 Mon Sep 17 00:00:00 2001
|
||||
From 104443cbb9a1087ec753af2462ccf41ba26eb444 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Mon, 4 Aug 2014 05:01:11 +0200
|
||||
Subject: server: Use SOCK_SEQPACKET socket in combination with SO_PEEK_OFF to
|
||||
@@ -27,16 +27,16 @@ Changes in v6:
|
||||
* When running on an older kernel make sure that ntdll doesn't try to use message mode features.
|
||||
---
|
||||
dlls/kernel32/sync.c | 2 +-
|
||||
dlls/kernel32/tests/pipe.c | 17 ++-----
|
||||
dlls/ntdll/file.c | 106 ++++++++++++++++++++++++++++++++++------
|
||||
server/named_pipe.c | 117 ++++++++++++++++++++++++++++++++++++---------
|
||||
dlls/kernel32/tests/pipe.c | 17 ++------
|
||||
dlls/ntdll/file.c | 106 ++++++++++++++++++++++++++++++++++++++-------
|
||||
server/named_pipe.c | 103 ++++++++++++++++++++++++++++++++++++-------
|
||||
server/sock.c | 4 +-
|
||||
server/sock.h | 26 ++++++++++
|
||||
6 files changed, 219 insertions(+), 53 deletions(-)
|
||||
server/sock.h | 26 +++++++++++
|
||||
6 files changed, 212 insertions(+), 46 deletions(-)
|
||||
create mode 100644 server/sock.h
|
||||
|
||||
diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c
|
||||
index 494db9c1a31..38aaccfa55c 100644
|
||||
index 494db9c1a3..38aaccfa55 100644
|
||||
--- a/dlls/kernel32/sync.c
|
||||
+++ b/dlls/kernel32/sync.c
|
||||
@@ -1475,7 +1475,7 @@ BOOL WINAPI PeekNamedPipe( HANDLE hPipe, LPVOID lpvBuffer, DWORD cbBuffer,
|
||||
@@ -49,7 +49,7 @@ index 494db9c1a31..38aaccfa55c 100644
|
||||
}
|
||||
else SetLastError( RtlNtStatusToDosError(status) );
|
||||
diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
|
||||
index e7cfce4c00e..71d75be90e8 100644
|
||||
index e7cfce4c00..71d75be90e 100644
|
||||
--- a/dlls/kernel32/tests/pipe.c
|
||||
+++ b/dlls/kernel32/tests/pipe.c
|
||||
@@ -294,7 +294,6 @@ static void test_CreateNamedPipe(int pipemode)
|
||||
@@ -149,7 +149,7 @@ index e7cfce4c00e..71d75be90e8 100644
|
||||
ret = RpcReadFile(hnp, ibuf + 8, sizeof(ibuf), &readden, NULL);
|
||||
ok(ret, "RpcReadFile 10\n");
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index af582ecfdb0..42b81fb3fbb 100644
|
||||
index 41d44c9af4..1b0eff02f2 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -96,6 +96,10 @@
|
||||
@@ -329,7 +329,7 @@ index af582ecfdb0..42b81fb3fbb 100644
|
||||
if (needs_close) close( fd );
|
||||
}
|
||||
diff --git a/server/named_pipe.c b/server/named_pipe.c
|
||||
index c75a7379283..6c6a8b40bd1 100644
|
||||
index b215816650..74a9a44dcf 100644
|
||||
--- a/server/named_pipe.c
|
||||
+++ b/server/named_pipe.c
|
||||
@@ -42,6 +42,10 @@
|
||||
@@ -351,7 +351,7 @@ index c75a7379283..6c6a8b40bd1 100644
|
||||
#include "handle.h"
|
||||
#include "thread.h"
|
||||
#include "request.h"
|
||||
@@ -761,14 +766,43 @@ static int named_pipe_link_name( struct object *obj, struct object_name *name, s
|
||||
@@ -804,14 +809,43 @@ static int named_pipe_link_name( struct object *obj, struct object_name *name, s
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -396,19 +396,26 @@ index c75a7379283..6c6a8b40bd1 100644
|
||||
|
||||
if (!(server = find_available_server( pipe )))
|
||||
{
|
||||
@@ -787,7 +821,10 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
|
||||
@@ -830,6 +864,9 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
|
||||
|
||||
if ((client = create_pipe_client( options, pipe->flags )))
|
||||
if ((client = create_pipe_client( options, pipe->flags, pipe->outsize )))
|
||||
{
|
||||
- if (!socketpair( PF_UNIX, SOCK_STREAM, 0, fds ))
|
||||
+ type = ((pipe->flags & NAMED_PIPE_MESSAGE_STREAM_WRITE) && is_messagemode_supported()) ?
|
||||
+ SOCK_SEQPACKET : SOCK_STREAM;
|
||||
+
|
||||
+ if (!socketpair( PF_UNIX, type, 0, fds ))
|
||||
if (use_server_io( &server->pipe_end ))
|
||||
{
|
||||
client->pipe_end.fd = alloc_pseudo_fd( &pipe_client_fd_ops, &client->pipe_end.obj, options );
|
||||
@@ -845,7 +882,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
|
||||
client = NULL;
|
||||
}
|
||||
}
|
||||
- else if (!socketpair( PF_UNIX, SOCK_STREAM, 0, fds ))
|
||||
+ else if (!socketpair( PF_UNIX, type, 0, fds ))
|
||||
{
|
||||
assert( !server->pipe_end.fd );
|
||||
|
||||
@@ -797,32 +834,55 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
|
||||
@@ -855,25 +892,48 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
|
||||
if (is_overlapped( options )) fcntl( fds[1], F_SETFL, O_NONBLOCK );
|
||||
if (is_overlapped( server->options )) fcntl( fds[0], F_SETFL, O_NONBLOCK );
|
||||
|
||||
@@ -445,14 +452,7 @@ index c75a7379283..6c6a8b40bd1 100644
|
||||
+ if (type != SOCK_SEQPACKET || (setsockopt( fds[0], SOL_SOCKET, SO_PEEK_OFF, &zero, sizeof(zero) ) != -1 &&
|
||||
+ setsockopt( fds[1], SOL_SOCKET, SO_PEEK_OFF, &zero, sizeof(zero) ) != -1))
|
||||
{
|
||||
- allow_fd_caching( client->pipe_end.fd );
|
||||
- allow_fd_caching( server->pipe_end.fd );
|
||||
- fd_copy_completion( server->ioctl_fd, server->pipe_end.fd );
|
||||
- if (server->state == ps_wait_open)
|
||||
- fd_async_wake_up( server->ioctl_fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS );
|
||||
- set_server_state( server, ps_connected_server );
|
||||
- server->client = client;
|
||||
- client->server = server;
|
||||
+ #ifdef __linux__
|
||||
+ fcntl( fds[0], F_SETSIG, messagemode_flags( server->pipe_end.flags ) );
|
||||
+ fcntl( fds[1], F_SETSIG, messagemode_flags( client->pipe_end.flags ) );
|
||||
@@ -462,14 +462,7 @@ index c75a7379283..6c6a8b40bd1 100644
|
||||
+ server->pipe_end.fd = create_anonymous_fd( &pipe_server_fd_ops, fds[0], &server->pipe_end.obj, server->options );
|
||||
+ if (client->pipe_end.fd && server->pipe_end.fd)
|
||||
+ {
|
||||
+ allow_fd_caching( client->pipe_end.fd );
|
||||
+ allow_fd_caching( server->pipe_end.fd );
|
||||
+ fd_copy_completion( server->ioctl_fd, server->pipe_end.fd );
|
||||
+ if (server->state == ps_wait_open)
|
||||
+ fd_async_wake_up( server->ioctl_fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS );
|
||||
+ set_server_state( server, ps_connected_server );
|
||||
+ server->client = client;
|
||||
+ client->server = server;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
@@ -483,7 +476,7 @@ index c75a7379283..6c6a8b40bd1 100644
|
||||
release_object( client );
|
||||
client = NULL;
|
||||
}
|
||||
@@ -907,7 +967,7 @@ DECL_HANDLER(create_named_pipe)
|
||||
@@ -970,7 +1030,7 @@ DECL_HANDLER(create_named_pipe)
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -492,7 +485,7 @@ index c75a7379283..6c6a8b40bd1 100644
|
||||
|
||||
if (!name.len) /* pipes need a root directory even without a name */
|
||||
{
|
||||
@@ -1010,6 +1070,9 @@ DECL_HANDLER(set_named_pipe_info)
|
||||
@@ -1073,6 +1133,9 @@ DECL_HANDLER(set_named_pipe_info)
|
||||
{
|
||||
struct pipe_server *server;
|
||||
struct pipe_client *client = NULL;
|
||||
@@ -502,7 +495,7 @@ index c75a7379283..6c6a8b40bd1 100644
|
||||
|
||||
server = get_pipe_server_obj( current->process, req->handle, FILE_WRITE_ATTRIBUTES );
|
||||
if (!server)
|
||||
@@ -1036,10 +1099,20 @@ DECL_HANDLER(set_named_pipe_info)
|
||||
@@ -1099,10 +1162,20 @@ DECL_HANDLER(set_named_pipe_info)
|
||||
else if (client)
|
||||
{
|
||||
client->pipe_end.flags = server->pipe->flags | req->flags;
|
||||
@@ -524,7 +517,7 @@ index c75a7379283..6c6a8b40bd1 100644
|
||||
|
||||
if (client)
|
||||
diff --git a/server/sock.c b/server/sock.c
|
||||
index d6b4fb2fa5c..49b6d3d5758 100644
|
||||
index d6b4fb2fa5..49b6d3d575 100644
|
||||
--- a/server/sock.c
|
||||
+++ b/server/sock.c
|
||||
@@ -61,6 +61,7 @@
|
||||
@@ -554,7 +547,7 @@ index d6b4fb2fa5c..49b6d3d5758 100644
|
||||
}
|
||||
diff --git a/server/sock.h b/server/sock.h
|
||||
new file mode 100644
|
||||
index 00000000000..21551b42b1c
|
||||
index 0000000000..21551b42b1
|
||||
--- /dev/null
|
||||
+++ b/server/sock.h
|
||||
@@ -0,0 +1,26 @@
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 260d35bbb99549c5ebf8447f6f1bf0680f6e3943 Mon Sep 17 00:00:00 2001
|
||||
From bb9a6f2fb4431cb18e2a835808c02156bbd9d709 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 6 Jun 2015 01:21:05 +0200
|
||||
Subject: server: Return correct error codes for NtWriteFile when pipes are
|
||||
@@ -12,7 +12,7 @@ Subject: server: Return correct error codes for NtWriteFile when pipes are
|
||||
4 files changed, 46 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
|
||||
index ba365ed666e..23f1a5f5f55 100644
|
||||
index ba365ed666..23f1a5f5f5 100644
|
||||
--- a/dlls/kernel32/tests/pipe.c
|
||||
+++ b/dlls/kernel32/tests/pipe.c
|
||||
@@ -1917,7 +1917,7 @@ static void test_CloseHandle(void)
|
||||
@@ -25,7 +25,7 @@ index ba365ed666e..23f1a5f5f55 100644
|
||||
CloseHandle(hfile);
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index ab34d99d5b6..d0662d9ae59 100644
|
||||
index 98a699e48f..25f59761cf 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -1235,6 +1235,9 @@ static NTSTATUS write_unix_fd(int fd, const char *buf, ULONG *total, ULONG lengt
|
||||
@@ -39,10 +39,19 @@ index ab34d99d5b6..d0662d9ae59 100644
|
||||
}
|
||||
}
|
||||
diff --git a/server/named_pipe.c b/server/named_pipe.c
|
||||
index 6c6a8b40bd1..47a88790fa3 100644
|
||||
index d310740165..2775fcab51 100644
|
||||
--- a/server/named_pipe.c
|
||||
+++ b/server/named_pipe.c
|
||||
@@ -150,6 +150,7 @@ static const struct object_ops named_pipe_ops =
|
||||
@@ -129,6 +129,8 @@ struct named_pipe_device
|
||||
struct namespace *pipes; /* named pipe namespace */
|
||||
};
|
||||
|
||||
+static inline int messagemode_flags( int flags );
|
||||
+
|
||||
static void named_pipe_dump( struct object *obj, int verbose );
|
||||
static unsigned int named_pipe_map_access( struct object *obj, unsigned int access );
|
||||
static int named_pipe_link_name( struct object *obj, struct object_name *name, struct object *parent );
|
||||
@@ -167,6 +169,7 @@ static void pipe_end_reselect_async( struct fd *fd, struct async_queue *queue );
|
||||
/* server end functions */
|
||||
static void pipe_server_dump( struct object *obj, int verbose );
|
||||
static struct fd *pipe_server_get_fd( struct object *obj );
|
||||
@@ -50,7 +59,7 @@ index 6c6a8b40bd1..47a88790fa3 100644
|
||||
static void pipe_server_destroy( struct object *obj);
|
||||
static obj_handle_t pipe_server_flush( struct fd *fd, struct async *async, int blocking );
|
||||
static enum server_fd_type pipe_server_get_fd_type( struct fd *fd );
|
||||
@@ -175,7 +176,7 @@ static const struct object_ops pipe_server_ops =
|
||||
@@ -192,7 +195,7 @@ static const struct object_ops pipe_server_ops =
|
||||
NULL, /* unlink_name */
|
||||
no_open_file, /* open_file */
|
||||
no_alloc_handle, /* alloc_handle */
|
||||
@@ -59,15 +68,15 @@ index 6c6a8b40bd1..47a88790fa3 100644
|
||||
pipe_server_destroy /* destroy */
|
||||
};
|
||||
|
||||
@@ -196,6 +197,7 @@ static const struct fd_ops pipe_server_fd_ops =
|
||||
@@ -213,6 +216,7 @@ static const struct fd_ops pipe_server_fd_ops =
|
||||
static void pipe_client_dump( struct object *obj, int verbose );
|
||||
static int pipe_client_signaled( struct object *obj, struct wait_queue_entry *entry );
|
||||
static struct fd *pipe_client_get_fd( struct object *obj );
|
||||
+static int pipe_client_close_handle( struct object *obj, struct process *process, obj_handle_t handle );
|
||||
static void pipe_client_destroy( struct object *obj );
|
||||
static obj_handle_t pipe_client_flush( struct fd *fd, struct async *async, int blocking );
|
||||
static enum server_fd_type pipe_client_get_fd_type( struct fd *fd );
|
||||
@@ -219,7 +221,7 @@ static const struct object_ops pipe_client_ops =
|
||||
static obj_handle_t pipe_client_ioctl( struct fd *fd, ioctl_code_t code, struct async *async,
|
||||
@@ -238,7 +242,7 @@ static const struct object_ops pipe_client_ops =
|
||||
NULL, /* unlink_name */
|
||||
no_open_file, /* open_file */
|
||||
no_alloc_handle, /* alloc_handle */
|
||||
@@ -76,17 +85,8 @@ index 6c6a8b40bd1..47a88790fa3 100644
|
||||
pipe_client_destroy /* destroy */
|
||||
};
|
||||
|
||||
@@ -284,6 +286,8 @@ static const struct fd_ops named_pipe_device_fd_ops =
|
||||
default_fd_reselect_async /* reselect_async */
|
||||
};
|
||||
|
||||
+static inline int messagemode_flags( int flags );
|
||||
+
|
||||
static void named_pipe_dump( struct object *obj, int verbose )
|
||||
{
|
||||
fputs( "Named pipe\n", stderr );
|
||||
@@ -393,6 +397,23 @@ static void do_disconnect( struct pipe_server *server )
|
||||
server->pipe_end.fd = NULL;
|
||||
@@ -482,6 +486,23 @@ static void pipe_end_destroy( struct pipe_end *pipe_end )
|
||||
free_async_queue( pipe_end->write_q );
|
||||
}
|
||||
|
||||
+static int pipe_server_close_handle( struct object *obj, struct process *process, obj_handle_t handle )
|
||||
@@ -109,7 +109,7 @@ index 6c6a8b40bd1..47a88790fa3 100644
|
||||
static void pipe_server_destroy( struct object *obj)
|
||||
{
|
||||
struct pipe_server *server = (struct pipe_server *)obj;
|
||||
@@ -419,6 +440,24 @@ static void pipe_server_destroy( struct object *obj)
|
||||
@@ -511,6 +532,24 @@ static void pipe_server_destroy( struct object *obj)
|
||||
release_object( server->pipe );
|
||||
}
|
||||
|
||||
@@ -135,10 +135,10 @@ index 6c6a8b40bd1..47a88790fa3 100644
|
||||
{
|
||||
struct pipe_client *client = (struct pipe_client *)obj;
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index e7a55d7a2d8..f1e7af1d568 100644
|
||||
index 341a6f6085..9769bb9e7b 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -2427,6 +2427,7 @@ enum message_type
|
||||
@@ -2431,6 +2431,7 @@ enum message_type
|
||||
#define NAMED_PIPE_MESSAGE_STREAM_WRITE 0x0001
|
||||
#define NAMED_PIPE_MESSAGE_STREAM_READ 0x0002
|
||||
#define NAMED_PIPE_NONBLOCKING_MODE 0x0004
|
||||
|
@@ -1,92 +1,39 @@
|
||||
From 7fce25b8259f816e1cc8c2c40b6a73379f2fb4ef Mon Sep 17 00:00:00 2001
|
||||
From 657d43d3027ea116d3348542eac23d1d915258f0 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Wed, 24 Feb 2016 15:45:09 +0100
|
||||
Subject: server: Do not allow to queue async operation for broken pipes.
|
||||
|
||||
---
|
||||
server/named_pipe.c | 34 ++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 32 insertions(+), 2 deletions(-)
|
||||
server/named_pipe.c | 16 ++++++++++++++--
|
||||
1 file changed, 14 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/server/named_pipe.c b/server/named_pipe.c
|
||||
index 47a88790fa3..e5c5c4968c4 100644
|
||||
index 2775fcab51..3542c91b4a 100644
|
||||
--- a/server/named_pipe.c
|
||||
+++ b/server/named_pipe.c
|
||||
@@ -156,6 +156,7 @@ static obj_handle_t pipe_server_flush( struct fd *fd, struct async *async, int b
|
||||
static enum server_fd_type pipe_server_get_fd_type( struct fd *fd );
|
||||
static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, struct async *async,
|
||||
int blocking );
|
||||
+static void pipe_server_queue_async( struct fd *fd, struct async *async, int type, int count );
|
||||
|
||||
static const struct object_ops pipe_server_ops =
|
||||
@@ -811,8 +811,20 @@ static obj_handle_t pipe_end_write( struct fd *fd, struct async *async, int bloc
|
||||
static void pipe_end_queue_async( struct fd *fd, struct async *async, int type, int count )
|
||||
{
|
||||
@@ -189,7 +190,7 @@ static const struct fd_ops pipe_server_fd_ops =
|
||||
no_fd_write, /* write */
|
||||
pipe_server_flush, /* flush */
|
||||
pipe_server_ioctl, /* ioctl */
|
||||
- default_fd_queue_async, /* queue_async */
|
||||
+ pipe_server_queue_async, /* queue_async */
|
||||
default_fd_reselect_async /* reselect_async */
|
||||
};
|
||||
|
||||
@@ -201,6 +202,7 @@ static int pipe_client_close_handle( struct object *obj, struct process *process
|
||||
static void pipe_client_destroy( struct object *obj );
|
||||
static obj_handle_t pipe_client_flush( struct fd *fd, struct async *async, int blocking );
|
||||
static enum server_fd_type pipe_client_get_fd_type( struct fd *fd );
|
||||
+static void pipe_client_queue_async( struct fd *fd, struct async *async, int type, int count );
|
||||
|
||||
static const struct object_ops pipe_client_ops =
|
||||
{
|
||||
@@ -234,7 +236,7 @@ static const struct fd_ops pipe_client_fd_ops =
|
||||
no_fd_write, /* write */
|
||||
pipe_client_flush, /* flush */
|
||||
default_fd_ioctl, /* ioctl */
|
||||
- default_fd_queue_async, /* queue_async */
|
||||
+ pipe_client_queue_async, /* queue_async */
|
||||
default_fd_reselect_async /* reselect_async */
|
||||
};
|
||||
|
||||
@@ -630,6 +632,20 @@ static obj_handle_t pipe_client_flush( struct fd *fd, struct async *async, int b
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void pipe_client_queue_async( struct fd *fd, struct async *async, int type, int count )
|
||||
+{
|
||||
+ struct pipe_client *client = get_fd_user( fd );
|
||||
+ struct pipe_server *server = client->server;
|
||||
struct pipe_end *pipe_end = get_fd_user( fd );
|
||||
- if (use_server_io( pipe_end )) no_fd_queue_async( fd, async, type, count );
|
||||
- else default_fd_queue_async( fd, async, type, count );
|
||||
+
|
||||
+ if (!server || !server->pipe_end.fd)
|
||||
+ if (use_server_io( pipe_end ))
|
||||
+ {
|
||||
+ no_fd_queue_async( fd, async, type, count );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!pipe_end->connection)
|
||||
+ {
|
||||
+ set_error( STATUS_PIPE_BROKEN );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ default_fd_queue_async( fd, async, type, count );
|
||||
+}
|
||||
+
|
||||
static inline int is_overlapped( unsigned int options )
|
||||
{
|
||||
return !(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT));
|
||||
@@ -714,6 +730,20 @@ static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, struct
|
||||
}
|
||||
}
|
||||
|
||||
+static void pipe_server_queue_async( struct fd *fd, struct async *async, int type, int count )
|
||||
+{
|
||||
+ struct pipe_server *server = get_fd_user( fd );
|
||||
+ struct pipe_client *client = server->client;
|
||||
+
|
||||
+ if (!client || !client->pipe_end.fd)
|
||||
+ {
|
||||
+ set_error( STATUS_PIPE_BROKEN );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ default_fd_queue_async( fd, async, type, count );
|
||||
+}
|
||||
+
|
||||
static struct pipe_server *get_pipe_server_obj( struct process *process,
|
||||
obj_handle_t handle, unsigned int access )
|
||||
{
|
||||
static void pipe_end_reselect_async( struct fd *fd, struct async_queue *queue )
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
@@ -3,3 +3,4 @@ Fixes: Improve ReadDataAvailable handling in FilePipeLocalInformation class
|
||||
Fixes: Set NamedPipeState to FILE_PIPE_CLOSING_STATE on broken pipe in NtQueryInformationFile
|
||||
FIxes: Return proper status codes when NtReadFile/NtWriteFile is called on closed (but not disconnected) pipe
|
||||
Depends: server-Desktop_Refcount
|
||||
Disabled: true
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From c4b5a58889e427b710e64566c2c90c4da8806cee Mon Sep 17 00:00:00 2001
|
||||
From bb531528ac5096ece43d100dc11fcc39f744d498 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 4 Feb 2017 16:31:59 +0100
|
||||
Subject: kernel32: Add stub for SetThreadIdealProcessorEx.
|
||||
@@ -12,7 +12,7 @@ Subject: kernel32: Add stub for SetThreadIdealProcessorEx.
|
||||
5 files changed, 37 insertions(+), 11 deletions(-)
|
||||
|
||||
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 9d321af7240..04329650096 100644
|
||||
index 9d321af724..0432965009 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
|
||||
@@ -47,7 +47,7 @@
|
||||
@@ -25,7 +25,7 @@ index 9d321af7240..04329650096 100644
|
||||
@ stdcall SetThreadPriorityBoost(long long) kernel32.SetThreadPriorityBoost
|
||||
@ stdcall SetThreadStackGuarantee(ptr) kernel32.SetThreadStackGuarantee
|
||||
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 0e30f18e52d..7a729a50040 100644
|
||||
index 0e30f18e52..7a729a5004 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
|
||||
@@ -53,7 +53,7 @@
|
||||
@@ -38,10 +38,10 @@ index 0e30f18e52d..7a729a50040 100644
|
||||
@ stdcall SetThreadPriority(long long) kernel32.SetThreadPriority
|
||||
@ stdcall SetThreadPriorityBoost(long long) kernel32.SetThreadPriorityBoost
|
||||
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
|
||||
index 8348621136f..75d9e229cc2 100644
|
||||
index 62a91a03f1..f512cb4fd3 100644
|
||||
--- a/dlls/kernel32/kernel32.spec
|
||||
+++ b/dlls/kernel32/kernel32.spec
|
||||
@@ -1476,7 +1476,7 @@
|
||||
@@ -1448,7 +1448,7 @@
|
||||
@ stdcall SetThreadExecutionState(long)
|
||||
@ stdcall SetThreadGroupAffinity(long ptr ptr)
|
||||
@ stdcall SetThreadIdealProcessor(long long)
|
||||
@@ -51,7 +51,7 @@ index 8348621136f..75d9e229cc2 100644
|
||||
@ stdcall SetThreadPreferredUILanguages(long ptr ptr)
|
||||
@ stdcall SetThreadPriority(long long)
|
||||
diff --git a/dlls/kernel32/thread.c b/dlls/kernel32/thread.c
|
||||
index fd4f299acb7..bd699831bdb 100644
|
||||
index c8dd94bbea..0a0b0e4bd6 100644
|
||||
--- a/dlls/kernel32/thread.c
|
||||
+++ b/dlls/kernel32/thread.c
|
||||
@@ -462,6 +462,28 @@ DWORD_PTR WINAPI SetThreadAffinityMask( HANDLE hThread, DWORD_PTR dwThreadAffini
|
||||
@@ -111,16 +111,16 @@ index fd4f299acb7..bd699831bdb 100644
|
||||
/***********************************************************************
|
||||
* GetThreadSelectorEntry (KERNEL32.@)
|
||||
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
|
||||
index bdfc067cf6d..db1dbeeb0e1 100644
|
||||
index 9fba5803b2..17ef35cb59 100644
|
||||
--- a/dlls/kernelbase/kernelbase.spec
|
||||
+++ b/dlls/kernelbase/kernelbase.spec
|
||||
@@ -1445,7 +1445,7 @@
|
||||
@@ -1482,7 +1482,7 @@
|
||||
@ stdcall SetThreadErrorMode(long ptr) kernel32.SetThreadErrorMode
|
||||
@ stdcall SetThreadGroupAffinity(long ptr ptr) kernel32.SetThreadGroupAffinity
|
||||
@ stdcall SetThreadIdealProcessor(long long) kernel32.SetThreadIdealProcessor
|
||||
-@ stub SetThreadIdealProcessorEx
|
||||
-# @ stub SetThreadIdealProcessorEx
|
||||
+@ stdcall SetThreadIdealProcessorEx(long ptr ptr) kernel32.SetThreadIdealProcessorEx
|
||||
@ stub SetThreadInformation
|
||||
# @ stub SetThreadInformation
|
||||
@ stdcall SetThreadLocale(long) kernel32.SetThreadLocale
|
||||
@ stdcall SetThreadPreferredUILanguages(long ptr ptr) kernel32.SetThreadPreferredUILanguages
|
||||
--
|
||||
|
@@ -0,0 +1,105 @@
|
||||
From 6a640e583277b35e4dd1ba2edffb45c379e4fd7e Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sun, 9 Apr 2017 01:58:49 +0200
|
||||
Subject: ntdll/tests: Add more tests for
|
||||
FileIoCompletionNotificationInformation.
|
||||
|
||||
---
|
||||
dlls/ntdll/tests/pipe.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 74 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/pipe.c b/dlls/ntdll/tests/pipe.c
|
||||
index e242cb4c0f..fa0ca2da00 100644
|
||||
--- a/dlls/ntdll/tests/pipe.c
|
||||
+++ b/dlls/ntdll/tests/pipe.c
|
||||
@@ -331,6 +331,77 @@ static void test_overlapped(void)
|
||||
CloseHandle(hEvent);
|
||||
}
|
||||
|
||||
+static void test_completion(void)
|
||||
+{
|
||||
+ static const char buf[] = "testdata";
|
||||
+ FILE_IO_COMPLETION_NOTIFICATION_INFORMATION info;
|
||||
+ HANDLE port, pipe, client;
|
||||
+ IO_STATUS_BLOCK iosb;
|
||||
+ OVERLAPPED ov, *pov;
|
||||
+ IO_STATUS_BLOCK io;
|
||||
+ NTSTATUS status;
|
||||
+ DWORD num_bytes;
|
||||
+ ULONG_PTR key;
|
||||
+ DWORD dwret;
|
||||
+ BOOL ret;
|
||||
+
|
||||
+ memset(&ov, 0, sizeof(ov));
|
||||
+ ov.hEvent = CreateEventA(NULL, TRUE, FALSE, NULL);
|
||||
+ ok(ov.hEvent != INVALID_HANDLE_VALUE, "CreateEvent failed, error %u\n", GetLastError());
|
||||
+
|
||||
+ status = create_pipe(&pipe, FILE_SHARE_READ | FILE_SHARE_WRITE, 0 /* OVERLAPPED */);
|
||||
+ ok(!status, "NtCreateNamedPipeFile returned %x\n", status);
|
||||
+ status = listen_pipe(pipe, ov.hEvent, &iosb, FALSE);
|
||||
+ ok(status == STATUS_PENDING, "NtFsControlFile returned %x\n", status);
|
||||
+
|
||||
+ client = CreateFileW(testpipe, GENERIC_READ | GENERIC_WRITE, 0, 0,
|
||||
+ OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
|
||||
+ ok(client != INVALID_HANDLE_VALUE, "CreateFile failed, error %u\n", GetLastError());
|
||||
+ dwret = WaitForSingleObject(ov.hEvent, 0);
|
||||
+ ok(dwret == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", dwret);
|
||||
+
|
||||
+ port = CreateIoCompletionPort(client, NULL, 0xdeadbeef, 0);
|
||||
+ ok(port != NULL, "CreateIoCompletionPort failed, error %u\n", GetLastError());
|
||||
+
|
||||
+ ret = WriteFile(client, buf, sizeof(buf), &num_bytes, &ov);
|
||||
+ ok(ret, "WriteFile failed, error %u\n", GetLastError());
|
||||
+ ok(num_bytes == sizeof(buf), "expected sizeof(buf), got %u\n", num_bytes);
|
||||
+
|
||||
+ key = 0;
|
||||
+ pov = NULL;
|
||||
+ ret = GetQueuedCompletionStatus(port, &num_bytes, &key, &pov, 1000);
|
||||
+ ok(ret, "GetQueuedCompletionStatus failed, error %u\n", GetLastError());
|
||||
+ ok(key == 0xdeadbeef, "expected 0xdeadbeef, got %lx\n", key);
|
||||
+ ok(pov == &ov, "expected %p, got %p\n", &ov, pov);
|
||||
+
|
||||
+ info.Flags = FILE_SKIP_COMPLETION_PORT_ON_SUCCESS;
|
||||
+ status = pNtSetInformationFile(client, &io, &info, sizeof(info), FileIoCompletionNotificationInformation);
|
||||
+ ok(status == STATUS_SUCCESS, "expected STATUS_SUCCESS, got %08x\n", status);
|
||||
+
|
||||
+ info.Flags = 0;
|
||||
+ status = pNtQueryInformationFile(client, &io, &info, sizeof(info), FileIoCompletionNotificationInformation);
|
||||
+ todo_wine
|
||||
+ ok(status == STATUS_SUCCESS, "expected STATUS_SUCCESS, got %08x\n", status);
|
||||
+ todo_wine
|
||||
+ ok((info.Flags & FILE_SKIP_COMPLETION_PORT_ON_SUCCESS) != 0, "got %08x\n", info.Flags);
|
||||
+
|
||||
+ ret = WriteFile(client, buf, sizeof(buf), &num_bytes, &ov);
|
||||
+ ok(ret, "WriteFile failed, error %u\n", GetLastError());
|
||||
+ ok(num_bytes == sizeof(buf), "expected sizeof(buf), got %u\n", num_bytes);
|
||||
+
|
||||
+ pov = (void *)0xdeadbeef;
|
||||
+ ret = GetQueuedCompletionStatus(port, &num_bytes, &key, &pov, 1000);
|
||||
+ todo_wine
|
||||
+ ok(!ret, "GetQueuedCompletionStatus succeeded\n");
|
||||
+ todo_wine
|
||||
+ ok(pov == NULL, "expected NULL, got %p\n", pov);
|
||||
+
|
||||
+ CloseHandle(ov.hEvent);
|
||||
+ CloseHandle(client);
|
||||
+ CloseHandle(pipe);
|
||||
+ CloseHandle(port);
|
||||
+}
|
||||
+
|
||||
static BOOL userapc_called;
|
||||
static void CALLBACK userapc(ULONG_PTR dwParam)
|
||||
{
|
||||
@@ -1086,6 +1157,9 @@ START_TEST(pipe)
|
||||
trace("starting overlapped tests\n");
|
||||
test_overlapped();
|
||||
|
||||
+ trace("starting completion tests\n");
|
||||
+ test_completion();
|
||||
+
|
||||
trace("starting FILE_PIPE_INFORMATION tests\n");
|
||||
test_filepipeinfo();
|
||||
|
||||
--
|
||||
2.11.0
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user