mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-09-13 09:17:20 -07:00
Rebase against 0d91274defcf65093957cf8e43985b9be55642d5.
This commit is contained in:
parent
0defa32dfb
commit
9573b57d3c
@ -110,7 +110,7 @@ for more details.*
|
||||
* D3DCompileShader should filter specific warning messages ([Wine Bug #33770](https://bugs.winehq.org/show_bug.cgi?id=33770))
|
||||
* Dirtify vertex shader on transformed update to fix graphical corruption ([Wine Bug #38539](https://bugs.winehq.org/show_bug.cgi?id=38539))
|
||||
* Do not append duplicate NULL characters when importing keys with regedit ([Wine Bug #37575](https://bugs.winehq.org/show_bug.cgi?id=37575))
|
||||
* Do not create foreign thread queues for attach_thread_input requests ([Wine Bug #38562](https://bugs.winehq.org/show_bug.cgi?id=38562))
|
||||
* ~~Do not create foreign thread queues for attach_thread_input requests~~ ([Wine Bug #38562](https://bugs.winehq.org/show_bug.cgi?id=38562))
|
||||
* Do not fail when a used context is passed to wglShareLists ([Wine Bug #11436](https://bugs.winehq.org/show_bug.cgi?id=11436))
|
||||
* Emulate access to KI_USER_SHARED_DATA kernel page on x86_64 ([Wine Bug #33849](https://bugs.winehq.org/show_bug.cgi?id=33849))
|
||||
* Enforce that surfaces are flushed after ReleaseDC
|
||||
@ -121,7 +121,7 @@ for more details.*
|
||||
* FEAR 1 installer expects basic_string_wchar_dtor to return NULL ([Wine Bug #37358](https://bugs.winehq.org/show_bug.cgi?id=37358))
|
||||
* Fallback to global key state for threads without a queue ([Wine Bug #27238](https://bugs.winehq.org/show_bug.cgi?id=27238))
|
||||
* Fix NULL dereference in ICSeqCompressFrameStart ([Wine Bug #27595](https://bugs.winehq.org/show_bug.cgi?id=27595))
|
||||
* Fix access violation when calling GetStringTypeW with NULL src. ([Wine Bug #37759](https://bugs.winehq.org/show_bug.cgi?id=37759))
|
||||
* ~~Fix access violation when calling GetStringTypeW with NULL src.~~ ([Wine Bug #37759](https://bugs.winehq.org/show_bug.cgi?id=37759))
|
||||
* Fix black screen on startup introduced by pixelformat changes. ([Wine Bug #35950](https://bugs.winehq.org/show_bug.cgi?id=35950))
|
||||
* Fix caps lock state issues with multiple processes ([Wine Bug #35907](https://bugs.winehq.org/show_bug.cgi?id=35907))
|
||||
* Fix comparison of punctuation characters in lstrcmp ([Wine Bug #10767](https://bugs.winehq.org/show_bug.cgi?id=10767))
|
||||
@ -213,7 +213,7 @@ for more details.*
|
||||
* Process Hacker 2.x needs ntoskrnl.ProbeForRead ([Wine Bug #38103](https://bugs.winehq.org/show_bug.cgi?id=38103))
|
||||
* Python PIP needs better NtQueryInformationJobObject stub
|
||||
* Reduced SetTimer minimum value from 10 ms to 5 ms (improves Silverlight framerates)
|
||||
* Reset device state in SysKeyboard*Impl_Acquire ([Wine Bug #11607](https://bugs.winehq.org/show_bug.cgi?id=11607))
|
||||
* ~~Reset device state in SysKeyboard*Impl_Acquire~~ ([Wine Bug #11607](https://bugs.winehq.org/show_bug.cgi?id=11607))
|
||||
* Return an error when trying to open a terminated process ([Wine Bug #37087](https://bugs.winehq.org/show_bug.cgi?id=37087))
|
||||
* Return correct IMediaSeeking stream positions in quartz ([Wine Bug #23174](https://bugs.winehq.org/show_bug.cgi?id=23174))
|
||||
* Return correct device type for cd devices without medium
|
||||
@ -244,7 +244,7 @@ for more details.*
|
||||
* Support for H264 DXVA2 GPU video decoding through vaapi
|
||||
* Support for ID3DXFont::DrawTextA/W ([Wine Bug #24754](https://bugs.winehq.org/show_bug.cgi?id=24754))
|
||||
* Support for ID3DXSkinInfoImpl_UpdateSkinnedMesh ([Wine Bug #32572](https://bugs.winehq.org/show_bug.cgi?id=32572))
|
||||
* Support for ITextDocument_fnRange function ([Wine Bug #12458](https://bugs.winehq.org/show_bug.cgi?id=12458))
|
||||
* ~~Support for ITextDocument_fnRange function~~ ([Wine Bug #12458](https://bugs.winehq.org/show_bug.cgi?id=12458))
|
||||
* Support for ITextRange, ITextFont and ITextPara ([Wine Bug #18303](https://bugs.winehq.org/show_bug.cgi?id=18303))
|
||||
* Support for Junction Points ([Wine Bug #12401](https://bugs.winehq.org/show_bug.cgi?id=12401))
|
||||
* Support for KF_FLAG_DEFAULT_PATH in SHGetKnownFolderPath ([Wine Bug #30385](https://bugs.winehq.org/show_bug.cgi?id=30385))
|
||||
|
@ -1,96 +0,0 @@
|
||||
From f5c29408aee51ad967cf7aa02578c72d3b573198 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 11 Apr 2015 10:06:05 +0200
|
||||
Subject: dinput: Reset device state in SysKeyboard*Impl_Acquire.
|
||||
|
||||
---
|
||||
dlls/dinput/keyboard.c | 27 +++++++++++++++++++++++++--
|
||||
dlls/dinput/tests/keyboard.c | 20 ++++++++++++++++++++
|
||||
2 files changed, 45 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
|
||||
index a5967d7..f3ac30e 100644
|
||||
--- a/dlls/dinput/keyboard.c
|
||||
+++ b/dlls/dinput/keyboard.c
|
||||
@@ -527,6 +527,29 @@ static HRESULT WINAPI SysKeyboardAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface,
|
||||
return SysKeyboardWImpl_GetProperty(IDirectInputDevice8W_from_impl(This), rguid, pdiph);
|
||||
}
|
||||
|
||||
+static HRESULT WINAPI SysKeyboardWImpl_Acquire(LPDIRECTINPUTDEVICE8W iface)
|
||||
+{
|
||||
+ SysKeyboardImpl *This = impl_from_IDirectInputDevice8W(iface);
|
||||
+ HRESULT res;
|
||||
+
|
||||
+ TRACE("(%p)\n", This);
|
||||
+
|
||||
+ res = IDirectInputDevice2WImpl_Acquire(iface);
|
||||
+ if (res == DI_OK)
|
||||
+ {
|
||||
+ TRACE("clearing keystate\n");
|
||||
+ memset(This->DInputKeyState, 0, sizeof(This->DInputKeyState));
|
||||
+ }
|
||||
+
|
||||
+ return res;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI SysKeyboardAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
|
||||
+{
|
||||
+ SysKeyboardImpl *This = impl_from_IDirectInputDevice8A(iface);
|
||||
+ return SysKeyboardWImpl_Acquire(IDirectInputDevice8W_from_impl(This));
|
||||
+}
|
||||
+
|
||||
static HRESULT WINAPI SysKeyboardWImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W iface,
|
||||
LPDIACTIONFORMATW lpdiaf,
|
||||
LPCWSTR lpszUserName,
|
||||
@@ -615,7 +638,7 @@ static const IDirectInputDevice8AVtbl SysKeyboardAvt =
|
||||
IDirectInputDevice2AImpl_EnumObjects,
|
||||
SysKeyboardAImpl_GetProperty,
|
||||
IDirectInputDevice2AImpl_SetProperty,
|
||||
- IDirectInputDevice2AImpl_Acquire,
|
||||
+ SysKeyboardAImpl_Acquire,
|
||||
IDirectInputDevice2AImpl_Unacquire,
|
||||
SysKeyboardAImpl_GetDeviceState,
|
||||
IDirectInputDevice2AImpl_GetDeviceData,
|
||||
@@ -651,7 +674,7 @@ static const IDirectInputDevice8WVtbl SysKeyboardWvt =
|
||||
IDirectInputDevice2WImpl_EnumObjects,
|
||||
SysKeyboardWImpl_GetProperty,
|
||||
IDirectInputDevice2WImpl_SetProperty,
|
||||
- IDirectInputDevice2WImpl_Acquire,
|
||||
+ SysKeyboardWImpl_Acquire,
|
||||
IDirectInputDevice2WImpl_Unacquire,
|
||||
SysKeyboardWImpl_GetDeviceState,
|
||||
IDirectInputDevice2WImpl_GetDeviceData,
|
||||
diff --git a/dlls/dinput/tests/keyboard.c b/dlls/dinput/tests/keyboard.c
|
||||
index ef5f06a..eaec276 100644
|
||||
--- a/dlls/dinput/tests/keyboard.c
|
||||
+++ b/dlls/dinput/tests/keyboard.c
|
||||
@@ -91,6 +91,26 @@ static void acquire_tests(IDirectInputA *pDI, HWND hwnd)
|
||||
for (i = 0; i < sizeof(custom_state) / sizeof(custom_state[0]); i++)
|
||||
ok(custom_state[i] == 0, "Should be zeroed, got 0x%08x\n", custom_state[i]);
|
||||
|
||||
+ /* simulate some keyboard input */
|
||||
+ SetFocus(hwnd);
|
||||
+ keybd_event('Q', 0, 0, 0);
|
||||
+ hr = IDirectInputDevice_GetDeviceState(pKeyboard, sizeof(custom_state), custom_state);
|
||||
+ ok(SUCCEEDED(hr), "IDirectInputDevice_GetDeviceState(4,) failed: %08x\n", hr);
|
||||
+ if (!custom_state[0])
|
||||
+ win_skip("Keyboard event not processed, skipping test\n");
|
||||
+ else
|
||||
+ {
|
||||
+ /* unacquiring should reset the device state */
|
||||
+ hr = IDirectInputDevice_Unacquire(pKeyboard);
|
||||
+ ok(SUCCEEDED(hr), "IDirectInputDevice_Unacquire() failed: %08x\n", hr);
|
||||
+ hr = IDirectInputDevice_Acquire(pKeyboard);
|
||||
+ ok(SUCCEEDED(hr), "IDirectInputDevice_Acquire() failed: %08x\n", hr);
|
||||
+ hr = IDirectInputDevice_GetDeviceState(pKeyboard, sizeof(custom_state), custom_state);
|
||||
+ ok(SUCCEEDED(hr), "IDirectInputDevice_GetDeviceState failed: %08x\n", hr);
|
||||
+ for (i = 0; i < sizeof(custom_state) / sizeof(custom_state[0]); i++)
|
||||
+ ok(custom_state[i] == 0, "Should be zeroed, got 0x%08x\n", custom_state[i]);
|
||||
+ }
|
||||
+
|
||||
if (pKeyboard) IUnknown_Release(pKeyboard);
|
||||
}
|
||||
|
||||
--
|
||||
2.3.5
|
||||
|
@ -1,2 +0,0 @@
|
||||
Fixes: [11607] Reset device state in SysKeyboard*Impl_Acquire
|
||||
Category: stable
|
@ -1,57 +0,0 @@
|
||||
From 62e504c9dcad87ffd419b5bb157c88342934ff61 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Faure <christian.faurebouvard@gmail.com>
|
||||
Date: Tue, 23 Dec 2014 13:13:49 -0300
|
||||
Subject: kernel32: Allow empty source in GetStringTypeW.
|
||||
|
||||
---
|
||||
dlls/kernel32/locale.c | 5 +++++
|
||||
dlls/kernel32/tests/locale.c | 10 ++++++++++
|
||||
2 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
|
||||
index 1460f7a..30f9048 100644
|
||||
--- a/dlls/kernel32/locale.c
|
||||
+++ b/dlls/kernel32/locale.c
|
||||
@@ -2479,6 +2479,11 @@ BOOL WINAPI GetStringTypeW( DWORD type, LPCWSTR src, INT count, LPWORD chartype
|
||||
C2_OTHERNEUTRAL /* LRE, LRO, RLE, RLO, PDF */
|
||||
};
|
||||
|
||||
+ if (!src) /* Abort and return FALSE when src is null */
|
||||
+ {
|
||||
+ SetLastError( ERROR_INVALID_PARAMETER );
|
||||
+ return FALSE;
|
||||
+ }
|
||||
if (count == -1) count = strlenW(src) + 1;
|
||||
switch(type)
|
||||
{
|
||||
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
|
||||
index 65172a7..24b541a 100644
|
||||
--- a/dlls/kernel32/tests/locale.c
|
||||
+++ b/dlls/kernel32/tests/locale.c
|
||||
@@ -3281,6 +3281,7 @@ static void test_GetStringTypeW(void)
|
||||
|
||||
WORD types[20];
|
||||
WCHAR ch;
|
||||
+ BOOL res;
|
||||
int i;
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
@@ -3338,6 +3339,15 @@ static void test_GetStringTypeW(void)
|
||||
for (i = 0; i < 3; i++)
|
||||
ok(types[i] & C1_SPACE || broken(types[i] == C1_CNTRL) || broken(types[i] == 0), "incorrect types returned for %x -> (%x does not have %x)\n",space_special[i], types[i], C1_SPACE );
|
||||
|
||||
+ for (i = -1; i < 3; i++)
|
||||
+ {
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ memset(types, 0, sizeof(types));
|
||||
+ res = GetStringTypeW(CT_CTYPE1, NULL, i, types);
|
||||
+ ok(!res, "GetStringTypeW unexpectedly succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error, got %u\n", GetLastError());
|
||||
+ }
|
||||
+
|
||||
/* surrogate pairs */
|
||||
ch = 0xd800;
|
||||
memset(types, 0, sizeof(types));
|
||||
--
|
||||
2.1.3
|
||||
|
@ -1,2 +0,0 @@
|
||||
Fixes: [37759] Fix access violation when calling GetStringTypeW with NULL src.
|
||||
Category: stable
|
@ -1,4 +1,4 @@
|
||||
From e2337e9756c38d06661d6dabd4a04d97528c4ab1 Mon Sep 17 00:00:00 2001
|
||||
From 48231cd898005f4c3bbb3992776d480e7eee837b Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Thu, 7 Aug 2014 18:31:33 -0600
|
||||
Subject: server: Keep a pointer to parent's fd unix_name in the closed_fd
|
||||
@ -9,7 +9,7 @@ Subject: server: Keep a pointer to parent's fd unix_name in the closed_fd
|
||||
1 file changed, 21 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/server/fd.c b/server/fd.c
|
||||
index 9a4aac4..cd62cc8 100644
|
||||
index a432ec7..397e51d 100644
|
||||
--- a/server/fd.c
|
||||
+++ b/server/fd.c
|
||||
@@ -164,7 +164,8 @@ struct closed_fd
|
||||
@ -154,15 +154,15 @@ index 9a4aac4..cd62cc8 100644
|
||||
if (flags & O_TRUNC)
|
||||
{
|
||||
if (S_ISDIR(st.st_mode))
|
||||
@@ -1896,7 +1900,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
|
||||
set_error( STATUS_NOT_A_DIRECTORY );
|
||||
goto error;
|
||||
}
|
||||
@@ -1891,7 +1895,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
|
||||
}
|
||||
else /* special file */
|
||||
{
|
||||
- if (unlink_name[0]) /* we can't unlink special files */
|
||||
+ if (options & FILE_DELETE_ON_CLOSE) /* we can't unlink special files */
|
||||
{
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
goto error;
|
||||
--
|
||||
2.3.3
|
||||
2.4.0
|
||||
|
||||
|
@ -1,127 +0,0 @@
|
||||
From 53fb7cd87e18767ddda8e4b901ec4f3a4570ae98 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Fri, 15 May 2015 19:57:42 +0200
|
||||
Subject: ntdll/tests: Add tests for accessing \\Device\\Null.
|
||||
|
||||
---
|
||||
dlls/ntdll/tests/om.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 99 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
|
||||
index 96e1e6e..71b7ca8 100644
|
||||
--- a/dlls/ntdll/tests/om.c
|
||||
+++ b/dlls/ntdll/tests/om.c
|
||||
@@ -1032,6 +1032,104 @@ static void test_keyed_events(void)
|
||||
NtClose( event );
|
||||
}
|
||||
|
||||
+static void test_null_device(void)
|
||||
+{
|
||||
+ OBJECT_ATTRIBUTES attr;
|
||||
+ IO_STATUS_BLOCK iosb;
|
||||
+ UNICODE_STRING str;
|
||||
+ NTSTATUS status;
|
||||
+ DWORD num_bytes;
|
||||
+ OVERLAPPED ov;
|
||||
+ char buf[64];
|
||||
+ HANDLE null;
|
||||
+ BOOL ret;
|
||||
+
|
||||
+ memset(buf, 0xAA, sizeof(buf));
|
||||
+ memset(&ov, 0, sizeof(ov));
|
||||
+ ov.hEvent = CreateEventA(NULL, TRUE, FALSE, NULL);
|
||||
+
|
||||
+ pRtlCreateUnicodeStringFromAsciiz(&str, "\\Device\\Null");
|
||||
+ InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL);
|
||||
+ status = pNtOpenSymbolicLinkObject(&null, SYMBOLIC_LINK_QUERY, &attr);
|
||||
+ todo_wine
|
||||
+ ok(status == STATUS_OBJECT_TYPE_MISMATCH,
|
||||
+ "expected STATUS_OBJECT_TYPE_MISMATCH, got %08x\n", status);
|
||||
+
|
||||
+ status = pNtOpenFile(&null, GENERIC_READ | GENERIC_WRITE, &attr, &iosb,
|
||||
+ FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN);
|
||||
+ todo_wine
|
||||
+ ok(status == STATUS_SUCCESS,
|
||||
+ "expected STATUS_SUCCESS, got %08x\n", status);
|
||||
+
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ret = WriteFile(null, buf, sizeof(buf), &num_bytes, NULL);
|
||||
+ ok(!ret, "WriteFile unexpectedly succeeded\n");
|
||||
+ todo_wine
|
||||
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
+ "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
|
||||
+
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ret = ReadFile(null, buf, sizeof(buf), &num_bytes, NULL);
|
||||
+ ok(!ret, "ReadFile unexpectedly succeeded\n");
|
||||
+ todo_wine
|
||||
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
+ "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
|
||||
+
|
||||
+ num_bytes = 0xdeadbeef;
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ret = WriteFile(null, buf, sizeof(buf), &num_bytes, &ov);
|
||||
+ if (ret || GetLastError() != ERROR_IO_PENDING)
|
||||
+ {
|
||||
+ todo_wine
|
||||
+ ok(ret, "WriteFile failed with error %u\n", GetLastError());
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ num_bytes = 0xdeadbeef;
|
||||
+ ret = GetOverlappedResult(null, &ov, &num_bytes, TRUE);
|
||||
+ ok(ret, "GetOverlappedResult failed with error %u\n", GetLastError());
|
||||
+ }
|
||||
+ todo_wine
|
||||
+ ok(num_bytes == sizeof(buf), "expected num_bytes = %u, got %u\n",
|
||||
+ (DWORD)sizeof(buf), num_bytes);
|
||||
+
|
||||
+ num_bytes = 0xdeadbeef;
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ret = ReadFile(null, buf, sizeof(buf), &num_bytes, &ov);
|
||||
+ if (ret || GetLastError() != ERROR_IO_PENDING)
|
||||
+ {
|
||||
+ ok(!ret, "ReadFile unexpectedly succeeded\n");
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ num_bytes = 0xdeadbeef;
|
||||
+ ret = GetOverlappedResult(null, &ov, &num_bytes, TRUE);
|
||||
+ ok(!ret, "GetOverlappedResult unexpectedly succeeded\n");
|
||||
+ }
|
||||
+ todo_wine
|
||||
+ ok(GetLastError() == ERROR_HANDLE_EOF,
|
||||
+ "expected ERROR_HANDLE_EOF, got %u\n", GetLastError());
|
||||
+
|
||||
+ pNtClose(null);
|
||||
+
|
||||
+ null = CreateFileA("\\\\.\\Null", GENERIC_READ | GENERIC_WRITE,
|
||||
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
|
||||
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
+ ok(null == INVALID_HANDLE_VALUE, "CreateFileA unexpectedly succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
+ "expected ERROR_FILE_NOT_FOUND, got %u\n", GetLastError());
|
||||
+
|
||||
+ null = CreateFileA("\\\\.\\Device\\Null", GENERIC_READ | GENERIC_WRITE,
|
||||
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
|
||||
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
+ ok(null == INVALID_HANDLE_VALUE, "CreateFileA unexpectedly succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_PATH_NOT_FOUND,
|
||||
+ "expected ERROR_PATH_NOT_FOUND, got %u\n", GetLastError());
|
||||
+
|
||||
+ pRtlFreeUnicodeString(&str);
|
||||
+ CloseHandle(ov.hEvent);
|
||||
+}
|
||||
+
|
||||
START_TEST(om)
|
||||
{
|
||||
HMODULE hntdll = GetModuleHandleA("ntdll.dll");
|
||||
@@ -1081,4 +1179,5 @@ START_TEST(om)
|
||||
test_type_mismatch();
|
||||
test_event();
|
||||
test_keyed_events();
|
||||
+ test_null_device();
|
||||
}
|
||||
--
|
||||
2.4.0
|
||||
|
@ -1,21 +1,21 @@
|
||||
From e2577e4c0c0637e22da03eeee33331495eb6d177 Mon Sep 17 00:00:00 2001
|
||||
From f5ebb97d978d8418e1034ea58af16e6a0aa0216d Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Fri, 15 May 2015 22:23:52 +0200
|
||||
Subject: null.sys: Implement device ioctl/read/write functions.
|
||||
|
||||
Based on a patch by Qian Hong.
|
||||
---
|
||||
dlls/ntdll/tests/om.c | 7 ++----
|
||||
dlls/ntdll/tests/om.c | 12 +++------
|
||||
dlls/null.sys/Makefile.in | 1 +
|
||||
dlls/null.sys/main.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
loader/wine.inf.in | 11 +++++++++
|
||||
4 files changed, 77 insertions(+), 5 deletions(-)
|
||||
4 files changed, 79 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
|
||||
index 71b7ca8..f92069c 100644
|
||||
index 71380a7..ca32577 100644
|
||||
--- a/dlls/ntdll/tests/om.c
|
||||
+++ b/dlls/ntdll/tests/om.c
|
||||
@@ -1051,18 +1051,17 @@ static void test_null_device(void)
|
||||
@@ -1053,30 +1053,27 @@ static void test_null_device(void)
|
||||
pRtlCreateUnicodeStringFromAsciiz(&str, "\\Device\\Null");
|
||||
InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL);
|
||||
status = pNtOpenSymbolicLinkObject(&null, SYMBOLIC_LINK_QUERY, &attr);
|
||||
@ -24,49 +24,40 @@ index 71b7ca8..f92069c 100644
|
||||
"expected STATUS_OBJECT_TYPE_MISMATCH, got %08x\n", status);
|
||||
|
||||
status = pNtOpenFile(&null, GENERIC_READ | GENERIC_WRITE, &attr, &iosb,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN);
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0);
|
||||
- todo_wine
|
||||
ok(status == STATUS_SUCCESS,
|
||||
"expected STATUS_SUCCESS, got %08x\n", status);
|
||||
- if (status != STATUS_SUCCESS)
|
||||
- {
|
||||
- skip("opening \\Device\\Null failed, skipping read/write tests\n");
|
||||
- goto out;
|
||||
- }
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = WriteFile(null, buf, sizeof(buf), &num_bytes, NULL);
|
||||
+ todo_wine
|
||||
ok(!ret, "WriteFile unexpectedly succeeded\n");
|
||||
todo_wine
|
||||
+ todo_wine
|
||||
ok(GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
@@ -1070,6 +1069,7 @@ static void test_null_device(void)
|
||||
"expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = ReadFile(null, buf, sizeof(buf), &num_bytes, NULL);
|
||||
+ todo_wine
|
||||
ok(!ret, "ReadFile unexpectedly succeeded\n");
|
||||
todo_wine
|
||||
+ todo_wine
|
||||
ok(GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
@@ -1080,7 +1080,6 @@ static void test_null_device(void)
|
||||
ret = WriteFile(null, buf, sizeof(buf), &num_bytes, &ov);
|
||||
if (ret || GetLastError() != ERROR_IO_PENDING)
|
||||
{
|
||||
- todo_wine
|
||||
ok(ret, "WriteFile failed with error %u\n", GetLastError());
|
||||
}
|
||||
else
|
||||
@@ -1089,7 +1088,6 @@ static void test_null_device(void)
|
||||
ret = GetOverlappedResult(null, &ov, &num_bytes, TRUE);
|
||||
ok(ret, "GetOverlappedResult failed with error %u\n", GetLastError());
|
||||
}
|
||||
- todo_wine
|
||||
ok(num_bytes == sizeof(buf), "expected num_bytes = %u, got %u\n",
|
||||
(DWORD)sizeof(buf), num_bytes);
|
||||
"expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
|
||||
|
||||
@@ -1106,7 +1104,6 @@ static void test_null_device(void)
|
||||
ret = GetOverlappedResult(null, &ov, &num_bytes, TRUE);
|
||||
ok(!ret, "GetOverlappedResult unexpectedly succeeded\n");
|
||||
}
|
||||
- todo_wine
|
||||
ok(GetLastError() == ERROR_HANDLE_EOF,
|
||||
"expected ERROR_HANDLE_EOF, got %u\n", GetLastError());
|
||||
@@ -1114,7 +1111,6 @@ static void test_null_device(void)
|
||||
|
||||
pNtClose(null);
|
||||
|
||||
-out:
|
||||
null = CreateFileA("\\\\.\\Null", GENERIC_READ | GENERIC_WRITE,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
|
||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
diff --git a/dlls/null.sys/Makefile.in b/dlls/null.sys/Makefile.in
|
||||
index 4ea3b55..95c249d 100644
|
||||
--- a/dlls/null.sys/Makefile.in
|
@ -55,7 +55,7 @@ version()
|
||||
echo "Copyright (C) 2014-2015 the Wine Staging project authors."
|
||||
echo ""
|
||||
echo "Patchset to be applied on upstream Wine:"
|
||||
echo " commit 566077a2cdb7ea6ee17eedc1b1f8395c02643633"
|
||||
echo " commit 0d91274defcf65093957cf8e43985b9be55642d5"
|
||||
echo ""
|
||||
}
|
||||
|
||||
@ -114,7 +114,6 @@ patch_enable_all ()
|
||||
enable_ddraw_EnumSurfaces="$1"
|
||||
enable_ddraw_Hotpatch="$1"
|
||||
enable_ddraw_d3d_execute_buffer="$1"
|
||||
enable_dinput_DeviceState="$1"
|
||||
enable_dinput_Events="$1"
|
||||
enable_dsound_EAX="$1"
|
||||
enable_dsound_Fast_Mixer="$1"
|
||||
@ -137,7 +136,6 @@ patch_enable_all ()
|
||||
enable_kernel32_GetFinalPathNameByHandle="$1"
|
||||
enable_kernel32_GetLogicalProcessorInformationEx="$1"
|
||||
enable_kernel32_GetNumaProcessorNode="$1"
|
||||
enable_kernel32_GetStringTypeW="$1"
|
||||
enable_kernel32_GetSystemTimePreciseAsFileTime="$1"
|
||||
enable_kernel32_GetSystemTimes="$1"
|
||||
enable_kernel32_GetVolumePathName="$1"
|
||||
@ -219,7 +217,6 @@ patch_enable_all ()
|
||||
enable_server_Shared_Memory="$1"
|
||||
enable_server_Stored_ACLs="$1"
|
||||
enable_server_Unexpected_Wakeup="$1"
|
||||
enable_server_attach_thread_input="$1"
|
||||
enable_setupapi_SetupDiSelectBestCompatDrv="$1"
|
||||
enable_setupapi_SetupDiSetDeviceInstallParamsW="$1"
|
||||
enable_setupapi_SetupPromptForDisk="$1"
|
||||
@ -412,9 +409,6 @@ patch_enable ()
|
||||
ddraw-d3d_execute_buffer)
|
||||
enable_ddraw_d3d_execute_buffer="$2"
|
||||
;;
|
||||
dinput-DeviceState)
|
||||
enable_dinput_DeviceState="$2"
|
||||
;;
|
||||
dinput-Events)
|
||||
enable_dinput_Events="$2"
|
||||
;;
|
||||
@ -481,9 +475,6 @@ patch_enable ()
|
||||
kernel32-GetNumaProcessorNode)
|
||||
enable_kernel32_GetNumaProcessorNode="$2"
|
||||
;;
|
||||
kernel32-GetStringTypeW)
|
||||
enable_kernel32_GetStringTypeW="$2"
|
||||
;;
|
||||
kernel32-GetSystemTimePreciseAsFileTime)
|
||||
enable_kernel32_GetSystemTimePreciseAsFileTime="$2"
|
||||
;;
|
||||
@ -727,9 +718,6 @@ patch_enable ()
|
||||
server-Unexpected_Wakeup)
|
||||
enable_server_Unexpected_Wakeup="$2"
|
||||
;;
|
||||
server-attach_thread_input)
|
||||
enable_server_attach_thread_input="$2"
|
||||
;;
|
||||
setupapi-SetupDiSelectBestCompatDrv)
|
||||
enable_setupapi_SetupDiSelectBestCompatDrv="$2"
|
||||
;;
|
||||
@ -1356,9 +1344,6 @@ if test "$enable_category_stable" -eq 1; then
|
||||
if test "$enable_ddraw_Hotpatch" -gt 1; then
|
||||
abort "Patchset ddraw-Hotpatch disabled, but category-stable depends on that."
|
||||
fi
|
||||
if test "$enable_dinput_DeviceState" -gt 1; then
|
||||
abort "Patchset dinput-DeviceState disabled, but category-stable depends on that."
|
||||
fi
|
||||
if test "$enable_dinput_Events" -gt 1; then
|
||||
abort "Patchset dinput-Events disabled, but category-stable depends on that."
|
||||
fi
|
||||
@ -1383,9 +1368,6 @@ if test "$enable_category_stable" -eq 1; then
|
||||
if test "$enable_kernel32_GetDriveTypeW" -gt 1; then
|
||||
abort "Patchset kernel32-GetDriveTypeW disabled, but category-stable depends on that."
|
||||
fi
|
||||
if test "$enable_kernel32_GetStringTypeW" -gt 1; then
|
||||
abort "Patchset kernel32-GetStringTypeW disabled, but category-stable depends on that."
|
||||
fi
|
||||
if test "$enable_kernel32_GetSystemTimePreciseAsFileTime" -gt 1; then
|
||||
abort "Patchset kernel32-GetSystemTimePreciseAsFileTime disabled, but category-stable depends on that."
|
||||
fi
|
||||
@ -1482,9 +1464,6 @@ if test "$enable_category_stable" -eq 1; then
|
||||
if test "$enable_server_Unexpected_Wakeup" -gt 1; then
|
||||
abort "Patchset server-Unexpected_Wakeup disabled, but category-stable depends on that."
|
||||
fi
|
||||
if test "$enable_server_attach_thread_input" -gt 1; then
|
||||
abort "Patchset server-attach_thread_input disabled, but category-stable depends on that."
|
||||
fi
|
||||
if test "$enable_setupapi_SetupDiSetDeviceInstallParamsW" -gt 1; then
|
||||
abort "Patchset setupapi-SetupDiSetDeviceInstallParamsW disabled, but category-stable depends on that."
|
||||
fi
|
||||
@ -1607,7 +1586,6 @@ if test "$enable_category_stable" -eq 1; then
|
||||
enable_dbghelp_Debug_Symbols=1
|
||||
enable_ddraw_EnumSurfaces=1
|
||||
enable_ddraw_Hotpatch=1
|
||||
enable_dinput_DeviceState=1
|
||||
enable_dinput_Events=1
|
||||
enable_dxgi_GetDesc=1
|
||||
enable_fltlib_FilterLoad=1
|
||||
@ -1616,7 +1594,6 @@ if test "$enable_category_stable" -eq 1; then
|
||||
enable_gdiplus_GdipCreateEffect=1
|
||||
enable_kernel32_CompareStringEx=1
|
||||
enable_kernel32_GetDriveTypeW=1
|
||||
enable_kernel32_GetStringTypeW=1
|
||||
enable_kernel32_GetSystemTimePreciseAsFileTime=1
|
||||
enable_kernel32_Named_Pipe=1
|
||||
enable_libs_Debug_Channel=1
|
||||
@ -1649,7 +1626,6 @@ if test "$enable_category_stable" -eq 1; then
|
||||
enable_server_CreateProcess_ACLs=1
|
||||
enable_server_Delete_On_Close=1
|
||||
enable_server_Unexpected_Wakeup=1
|
||||
enable_server_attach_thread_input=1
|
||||
enable_setupapi_SetupDiSetDeviceInstallParamsW=1
|
||||
enable_shell32_RunDLL_CallEntry16=1
|
||||
enable_shell32_SHFileOperation=1
|
||||
@ -2089,23 +2065,6 @@ if test "$enable_advapi32_ImpersonateAnonymousToken" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-Misc_ACL
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#15980] GetSecurityInfo returns NULL DACL for process object
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/advapi32/tests/security.c, server/process.c, server/security.h, server/token.c
|
||||
# |
|
||||
if test "$enable_server_Misc_ACL" -eq 1; then
|
||||
patch_apply server-Misc_ACL/0001-server-Add-default-security-descriptor-ownership-for.patch
|
||||
patch_apply server-Misc_ACL/0002-server-Add-default-security-descriptor-DACL-for-proc.patch
|
||||
(
|
||||
echo '+ { "Erich E. Hoover", "server: Add default security descriptor ownership for processes.", 1 },';
|
||||
echo '+ { "Erich E. Hoover", "server: Add default security descriptor DACL for processes.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-CreateProcess_ACLs
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -2125,6 +2084,23 @@ if test "$enable_server_CreateProcess_ACLs" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-Misc_ACL
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#15980] GetSecurityInfo returns NULL DACL for process object
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/advapi32/tests/security.c, server/process.c, server/security.h, server/token.c
|
||||
# |
|
||||
if test "$enable_server_Misc_ACL" -eq 1; then
|
||||
patch_apply server-Misc_ACL/0001-server-Add-default-security-descriptor-ownership-for.patch
|
||||
patch_apply server-Misc_ACL/0002-server-Add-default-security-descriptor-DACL-for-proc.patch
|
||||
(
|
||||
echo '+ { "Erich E. Hoover", "server: Add default security descriptor ownership for processes.", 1 },';
|
||||
echo '+ { "Erich E. Hoover", "server: Add default security descriptor DACL for processes.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset advapi32-LsaLookupSids
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -2644,21 +2620,6 @@ if test "$enable_ddraw_d3d_execute_buffer" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset dinput-DeviceState
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#11607] Reset device state in SysKeyboard*Impl_Acquire
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/dinput/keyboard.c, dlls/dinput/tests/keyboard.c
|
||||
# |
|
||||
if test "$enable_dinput_DeviceState" -eq 1; then
|
||||
patch_apply dinput-DeviceState/0001-dinput-Reset-device-state-in-SysKeyboard-Impl_Acquir.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "dinput: Reset device state in SysKeyboard*Impl_Acquire.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset dinput-Events
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -2805,6 +2766,48 @@ if test "$enable_wined3d_CSMT_Helper" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-wined3d_swapchain_present
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/swapchain.c
|
||||
# |
|
||||
if test "$enable_wined3d_wined3d_swapchain_present" -eq 1; then
|
||||
patch_apply wined3d-wined3d_swapchain_present/0001-wined3d-Silence-repeated-wined3d_swapchain_present-F.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "wined3d: Silence repeated wined3d_swapchain_present FIXME.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Dirtify_Vertex_Shader
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#38539] Dirtify vertex shader on transformed update to fix graphical corruption
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/glsl_shader.c
|
||||
# |
|
||||
if test "$enable_wined3d_Dirtify_Vertex_Shader" -eq 1; then
|
||||
patch_apply wined3d-Dirtify_Vertex_Shader/0001-wined3d-Dirtify-vertex-shader-on-transformed-untrans.patch
|
||||
(
|
||||
echo '+ { "Matteo Bruni", "wined3d: Dirtify vertex shader on transformed <-> untransformed transition.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Multisampling
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#12652] Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h
|
||||
# |
|
||||
if test "$enable_wined3d_Multisampling" -eq 1; then
|
||||
patch_apply wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch
|
||||
(
|
||||
echo '+ { "Austin English", "wined3d: Allow to specify multisampling AA quality levels via registry.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Revert_PixelFormat
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -2839,18 +2842,6 @@ if test "$enable_wined3d_Revert_PixelFormat" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-wined3d_swapchain_present
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/swapchain.c
|
||||
# |
|
||||
if test "$enable_wined3d_wined3d_swapchain_present" -eq 1; then
|
||||
patch_apply wined3d-wined3d_swapchain_present/0001-wined3d-Silence-repeated-wined3d_swapchain_present-F.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "wined3d: Silence repeated wined3d_swapchain_present FIXME.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-UnhandledBlendFactor
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -2875,36 +2866,6 @@ if test "$enable_wined3d_resource_check_usage" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Dirtify_Vertex_Shader
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#38539] Dirtify vertex shader on transformed update to fix graphical corruption
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/glsl_shader.c
|
||||
# |
|
||||
if test "$enable_wined3d_Dirtify_Vertex_Shader" -eq 1; then
|
||||
patch_apply wined3d-Dirtify_Vertex_Shader/0001-wined3d-Dirtify-vertex-shader-on-transformed-untrans.patch
|
||||
(
|
||||
echo '+ { "Matteo Bruni", "wined3d: Dirtify vertex shader on transformed <-> untransformed transition.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Multisampling
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#12652] Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h
|
||||
# |
|
||||
if test "$enable_wined3d_Multisampling" -eq 1; then
|
||||
patch_apply wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch
|
||||
(
|
||||
echo '+ { "Austin English", "wined3d: Allow to specify multisampling AA quality levels via registry.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-CSMT_Main
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -3655,21 +3616,6 @@ if test "$enable_kernel32_GetNumaProcessorNode" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-GetStringTypeW
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#37759] Fix access violation when calling GetStringTypeW with NULL src.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/kernel32/locale.c, dlls/kernel32/tests/locale.c
|
||||
# |
|
||||
if test "$enable_kernel32_GetStringTypeW" -eq 1; then
|
||||
patch_apply kernel32-GetStringTypeW/0001-kernel32-Allow-empty-source-in-GetStringTypeW.patch
|
||||
(
|
||||
echo '+ { "Christian Faure", "kernel32: Allow empty source in GetStringTypeW.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-GetSystemTimePreciseAsFileTime
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -4492,11 +4438,9 @@ fi
|
||||
# | loader/wine.inf.in
|
||||
# |
|
||||
if test "$enable_null_Null_Device" -eq 1; then
|
||||
patch_apply null-Null_Device/0001-ntdll-tests-Add-tests-for-accessing-Device-Null.patch
|
||||
patch_apply null-Null_Device/0002-null.sys-Added-stub-dll.patch
|
||||
patch_apply null-Null_Device/0003-null.sys-Implement-device-ioctl-read-write-functions.patch
|
||||
patch_apply null-Null_Device/0001-null.sys-Added-stub-dll.patch
|
||||
patch_apply null-Null_Device/0002-null.sys-Implement-device-ioctl-read-write-functions.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "ntdll/tests: Add tests for accessing \\\\\\\\Device\\\\\\\\Null.", 1 },';
|
||||
echo '+ { "Qian Hong", "null.sys: Added stub dll.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "null.sys: Implement device ioctl/read/write functions.", 1 },';
|
||||
) >> "$patchlist"
|
||||
@ -4675,7 +4619,6 @@ fi
|
||||
# Patchset riched20-IText_Interface
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#12458] Support for ITextDocument_fnRange function
|
||||
# | * [#18303] Support for ITextRange, ITextFont and ITextPara
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -4990,21 +4933,6 @@ if test "$enable_server_Unexpected_Wakeup" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-attach_thread_input
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#38562] Do not create foreign thread queues for attach_thread_input requests
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/user32/tests/input.c, server/queue.c
|
||||
# |
|
||||
if test "$enable_server_attach_thread_input" -eq 1; then
|
||||
patch_apply server-attach_thread_input/0001-server-Do-not-create-foreign-thread-queues-for-attac.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "server: Do not create foreign thread queues for attach_thread_input requests.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset setupapi-SetupDiSelectBestCompatDrv
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -5813,21 +5741,19 @@ fi
|
||||
# | * dlls/rpcrt4/rpc_transport.c, dlls/wininet/http.c, dlls/wininet/tests/http.c
|
||||
# |
|
||||
if test "$enable_wininet_Cleanup" -eq 1; then
|
||||
patch_apply wininet-Cleanup/0001-wininet-Fix-memory-leak-by-not-calling-get_cookie_he.patch
|
||||
patch_apply wininet-Cleanup/0002-wininet-tests-Add-more-tests-for-cookies.patch
|
||||
patch_apply wininet-Cleanup/0003-wininet-tests-Add-tests-for-overriding-host-header.patch
|
||||
patch_apply wininet-Cleanup/0004-wininet-tests-Test-auth-credential-reusage-with-host.patch
|
||||
patch_apply wininet-Cleanup/0005-wininet-tests-Check-cookie-behaviour-when-overriding.patch
|
||||
patch_apply wininet-Cleanup/0006-wininet-Use-request-server-name-when-processing-cook.patch
|
||||
patch_apply wininet-Cleanup/0007-wininet-Delay-setting-the-http-host-header.patch
|
||||
patch_apply wininet-Cleanup/0008-wininet-Use-request-server-canon_host_port-in-authen.patch
|
||||
patch_apply wininet-Cleanup/0009-wininet-Use-request-server-canon_host_port-when-quer.patch
|
||||
patch_apply wininet-Cleanup/0010-rpcrt4-Fix-arguments-of-HttpAddRequestHeaders.patch
|
||||
patch_apply wininet-Cleanup/0011-wininet-Fix-arguments-of-HttpAddRequestHeaders.patch
|
||||
patch_apply wininet-Cleanup/0012-wininet-Strip-filename-if-no-path-is-set-in-cookie.patch
|
||||
patch_apply wininet-Cleanup/0013-wininet-Replacing-header-fields-should-fail-if-they-.patch
|
||||
patch_apply wininet-Cleanup/0001-wininet-tests-Add-more-tests-for-cookies.patch
|
||||
patch_apply wininet-Cleanup/0002-wininet-tests-Add-tests-for-overriding-host-header.patch
|
||||
patch_apply wininet-Cleanup/0003-wininet-tests-Test-auth-credential-reusage-with-host.patch
|
||||
patch_apply wininet-Cleanup/0004-wininet-tests-Check-cookie-behaviour-when-overriding.patch
|
||||
patch_apply wininet-Cleanup/0005-wininet-Use-request-server-name-when-processing-cook.patch
|
||||
patch_apply wininet-Cleanup/0006-wininet-Delay-setting-the-http-host-header.patch
|
||||
patch_apply wininet-Cleanup/0007-wininet-Use-request-server-canon_host_port-in-authen.patch
|
||||
patch_apply wininet-Cleanup/0008-wininet-Use-request-server-canon_host_port-when-quer.patch
|
||||
patch_apply wininet-Cleanup/0009-rpcrt4-Fix-arguments-of-HttpAddRequestHeaders.patch
|
||||
patch_apply wininet-Cleanup/0010-wininet-Fix-arguments-of-HttpAddRequestHeaders.patch
|
||||
patch_apply wininet-Cleanup/0011-wininet-Strip-filename-if-no-path-is-set-in-cookie.patch
|
||||
patch_apply wininet-Cleanup/0012-wininet-Replacing-header-fields-should-fail-if-they-.patch
|
||||
(
|
||||
echo '+ { "Michael Müller", "wininet: Fix memory leak by not calling get_cookie_header twice.", 1 },';
|
||||
echo '+ { "Michael Müller", "wininet/tests: Add more tests for cookies.", 1 },';
|
||||
echo '+ { "Michael Müller", "wininet/tests: Add tests for overriding host header.", 1 },';
|
||||
echo '+ { "Michael Müller", "wininet/tests: Test auth credential reusage with host override.", 1 },';
|
||||
|
@ -1,18 +1,18 @@
|
||||
From 6f4e0b9da2720ac9b3e37b419e5599cb0f0fb99d Mon Sep 17 00:00:00 2001
|
||||
From c75a9af77ea3cc0abea38a7c595b52093b4d166a Mon Sep 17 00:00:00 2001
|
||||
From: Jactry Zeng <wine@jactry.com>
|
||||
Date: Fri, 8 Aug 2014 21:32:57 +0800
|
||||
Subject: riched20: Implement IText{Selection, Range}::Set{Start, End}.
|
||||
|
||||
---
|
||||
dlls/riched20/richole.c | 52 +++++++++++++---
|
||||
dlls/riched20/richole.c | 46 ++++++++++++--
|
||||
dlls/riched20/tests/richole.c | 135 ++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 179 insertions(+), 8 deletions(-)
|
||||
2 files changed, 177 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
|
||||
index 3818cfa..89a51ac 100644
|
||||
index 4f85325..55dda9b 100644
|
||||
--- a/dlls/riched20/richole.c
|
||||
+++ b/dlls/riched20/richole.c
|
||||
@@ -871,14 +871,27 @@ static HRESULT WINAPI ITextRange_fnGetStart(ITextRange *me, LONG *pcpFirst)
|
||||
@@ -2995,14 +2995,33 @@ static HRESULT WINAPI ITextSelection_fnGetStart(ITextSelection *me, LONG *pcpFir
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
@ -30,49 +30,6 @@ index 3818cfa..89a51ac 100644
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
static HRESULT WINAPI ITextRange_fnSetStart(ITextRange *me, LONG cpFirst)
|
||||
{
|
||||
ITextRangeImpl *This = impl_from_ITextRange(me);
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
|
||||
- FIXME("not implemented %p\n", This);
|
||||
- return E_NOTIMPL;
|
||||
+ return range_SetStart(This->reOle->editor, cpFirst, &This->start, &This->end);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ITextRange_fnGetEnd(ITextRange *me, LONG *pcpLim)
|
||||
@@ -894,14 +907,27 @@ static HRESULT WINAPI ITextRange_fnGetEnd(ITextRange *me, LONG *pcpLim)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
+static HRESULT range_SetEnd(ME_TextEditor *editor, LONG cpLim, LONG *start, LONG *end)
|
||||
+{
|
||||
+ int len = ME_GetTextLength(editor) + 1;
|
||||
+
|
||||
+ TRACE("%d\n", cpLim);
|
||||
+ if (cpLim == *end)
|
||||
+ return S_FALSE;
|
||||
+ cpLim = min(cpLim, len);
|
||||
+ cpLim = max(cpLim, 0);
|
||||
+ *start = min(*start, cpLim);
|
||||
+ *end = cpLim;
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
static HRESULT WINAPI ITextRange_fnSetEnd(ITextRange *me, LONG cpLim)
|
||||
{
|
||||
ITextRangeImpl *This = impl_from_ITextRange(me);
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
|
||||
- FIXME("not implemented %p\n", This);
|
||||
- return E_NOTIMPL;
|
||||
+ return range_SetEnd(This->reOle->editor, cpLim, &This->start, &This->end);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ITextRange_fnGetFont(ITextRange *me, ITextFont **pFont)
|
||||
@@ -1881,11 +1907,16 @@ static HRESULT WINAPI ITextSelection_fnGetStart(ITextSelection *me, LONG *pcpFir
|
||||
static HRESULT WINAPI ITextSelection_fnSetStart(ITextSelection *me, LONG cpFirst)
|
||||
{
|
||||
ITextSelectionImpl *This = impl_from_ITextSelection(me);
|
||||
@ -91,7 +48,24 @@ index 3818cfa..89a51ac 100644
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ITextSelection_fnGetEnd(ITextSelection *me, LONG *pcpLim)
|
||||
@@ -1905,11 +1936,16 @@ static HRESULT WINAPI ITextSelection_fnGetEnd(ITextSelection *me, LONG *pcpLim)
|
||||
@@ -3019,14 +3038,33 @@ static HRESULT WINAPI ITextSelection_fnGetEnd(ITextSelection *me, LONG *pcpLim)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
+static HRESULT range_SetEnd(ME_TextEditor *editor, LONG cpLim, LONG *start, LONG *end)
|
||||
+{
|
||||
+ int len = ME_GetTextLength(editor) + 1;
|
||||
+
|
||||
+ TRACE("%d\n", cpLim);
|
||||
+ if (cpLim == *end)
|
||||
+ return S_FALSE;
|
||||
+ cpLim = min(cpLim, len);
|
||||
+ cpLim = max(cpLim, 0);
|
||||
+ *start = min(*start, cpLim);
|
||||
+ *end = cpLim;
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
static HRESULT WINAPI ITextSelection_fnSetEnd(ITextSelection *me, LONG cpLim)
|
||||
{
|
||||
ITextSelectionImpl *This = impl_from_ITextSelection(me);
|
||||
@ -111,11 +85,11 @@ index 3818cfa..89a51ac 100644
|
||||
|
||||
static HRESULT WINAPI ITextSelection_fnGetFont(ITextSelection *me, ITextFont **pFont)
|
||||
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
|
||||
index b4fbaa1..5550e30 100644
|
||||
index d826298..9a52f78 100644
|
||||
--- a/dlls/riched20/tests/richole.c
|
||||
+++ b/dlls/riched20/tests/richole.c
|
||||
@@ -1081,6 +1081,137 @@ static void test_IOleInPlaceSite_GetWindow(void)
|
||||
release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
@@ -1347,6 +1347,137 @@ todo_wine {
|
||||
release_interfaces(&hwnd, &reOle, &doc, NULL);
|
||||
}
|
||||
|
||||
+static void test_ITextRange_SetStart(void)
|
||||
@ -252,7 +226,7 @@ index b4fbaa1..5550e30 100644
|
||||
START_TEST(richole)
|
||||
{
|
||||
/* Must explicitly LoadLibrary(). The test has no references to functions in
|
||||
@@ -1093,12 +1224,16 @@ START_TEST(richole)
|
||||
@@ -1359,12 +1490,16 @@ START_TEST(richole)
|
||||
test_ITextSelection_GetText();
|
||||
test_ITextSelection_GetChar();
|
||||
test_ITextSelection_GetStart_GetEnd();
|
||||
@ -270,5 +244,5 @@ index b4fbaa1..5550e30 100644
|
||||
test_IOleWindow_GetWindow();
|
||||
test_IOleInPlaceSite_GetWindow();
|
||||
--
|
||||
2.3.2
|
||||
2.4.0
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
From 359a12d6dac0d8ef3560055d39d6ff59ed80fe5e Mon Sep 17 00:00:00 2001
|
||||
From 44c16f1f02bf269a595b914bcc55a37184fc1fa4 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 13 Sep 2014 17:21:31 +0200
|
||||
Subject: riched20: Fix invalid memory access when parent object was destroyed
|
||||
@ -9,10 +9,10 @@ Subject: riched20: Fix invalid memory access when parent object was destroyed
|
||||
1 file changed, 10 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
|
||||
index e42df2b..fe9af6a 100644
|
||||
index d3ed501..7a07a84 100644
|
||||
--- a/dlls/riched20/richole.c
|
||||
+++ b/dlls/riched20/richole.c
|
||||
@@ -546,10 +546,13 @@ static ULONG WINAPI ITextPara_fnRelease(ITextPara *me)
|
||||
@@ -1618,10 +1618,13 @@ static ULONG WINAPI TextFont_Release(ITextFont *iface)
|
||||
ITextRange_Release(&This->txtRge->ITextRange_iface);
|
||||
else
|
||||
ITextSelection_Release(&This->txtSel->ITextSelection_iface);
|
||||
@ -27,8 +27,8 @@ index e42df2b..fe9af6a 100644
|
||||
+ }
|
||||
heap_free(This);
|
||||
}
|
||||
return ref;
|
||||
@@ -1181,10 +1184,13 @@ static ULONG WINAPI ITextFont_fnRelease(ITextFont *me)
|
||||
|
||||
@@ -2441,10 +2444,13 @@ static ULONG WINAPI TextPara_Release(ITextPara *iface)
|
||||
ITextRange_Release(&This->txtRge->ITextRange_iface);
|
||||
else
|
||||
ITextSelection_Release(&This->txtSel->ITextSelection_iface);
|
||||
@ -43,7 +43,7 @@ index e42df2b..fe9af6a 100644
|
||||
+ }
|
||||
heap_free(This);
|
||||
}
|
||||
return ref;
|
||||
|
||||
--
|
||||
2.1.2
|
||||
2.4.0
|
||||
|
||||
|
@ -1,18 +1,18 @@
|
||||
From 6bb871e513368168c7fd275e0d4fc38ef82a51c1 Mon Sep 17 00:00:00 2001
|
||||
From 0b40418cf55b2c6b963433c48fd52f8465558f1d Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 1 Nov 2014 22:51:34 +0100
|
||||
Subject: riched20: Silence repeated FIXMEs triggered by Adobe Reader.
|
||||
|
||||
Adobe Reader calls these functions very often while scrolling through a document.
|
||||
---
|
||||
dlls/riched20/richole.c | 38 ++++++++++++++++++++++++++++----------
|
||||
1 file changed, 28 insertions(+), 10 deletions(-)
|
||||
dlls/riched20/richole.c | 48 ++++++++++++++++++++++++++++++++++++++----------
|
||||
1 file changed, 38 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
|
||||
index fe9af6a..9de460f 100644
|
||||
index 7a07a84..8e719eb 100644
|
||||
--- a/dlls/riched20/richole.c
|
||||
+++ b/dlls/riched20/richole.c
|
||||
@@ -146,6 +146,14 @@ static HRESULT WINAPI IRichEditOleImpl_inner_fnQueryInterface(IUnknown *iface, R
|
||||
@@ -175,6 +175,14 @@ static HRESULT WINAPI IRichEditOleImpl_inner_fnQueryInterface(IUnknown *iface, R
|
||||
IUnknown_AddRef((IUnknown *)*ppvObj);
|
||||
return S_OK;
|
||||
}
|
||||
@ -27,160 +27,116 @@ index fe9af6a..9de460f 100644
|
||||
FIXME("%p: unhandled interface %s\n", This, debugstr_guid(riid));
|
||||
|
||||
return E_NOINTERFACE;
|
||||
@@ -676,11 +684,12 @@ static HRESULT WINAPI ITextPara_fnSetStyle(ITextPara *me, LONG Value)
|
||||
|
||||
static HRESULT WINAPI ITextPara_fnGetAlignment(ITextPara *me, LONG *pValue)
|
||||
@@ -1833,7 +1841,9 @@ static HRESULT WINAPI TextFont_SetBackColor(ITextFont *iface, LONG value)
|
||||
static HRESULT WINAPI TextFont_GetBold(ITextFont *iface, LONG *value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
- FIXME("(%p)->(%p): stub\n", This, value);
|
||||
+ static int once;
|
||||
ITextParaImpl *This = impl_from_ITextPara(me);
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
+
|
||||
+ if (!once++) FIXME("(%p)->(%p): stub\n", This, value);
|
||||
|
||||
- FIXME("not implemented: %p\n", This);
|
||||
+ if (!once++) FIXME("not implemented: %p\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -1374,13 +1383,14 @@ static HRESULT WINAPI ITextFont_fnSetBackColor(ITextFont *me, LONG Value)
|
||||
|
||||
static HRESULT WINAPI ITextFont_fnGetBold(ITextFont *me, LONG *pValue)
|
||||
{
|
||||
+ static int once;
|
||||
ITextFontImpl *This = impl_from_ITextFont(me);
|
||||
if (!pValue)
|
||||
if (!value)
|
||||
return E_INVALIDARG;
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
|
||||
- FIXME("Stub\n");
|
||||
+ if (!once++) FIXME("Stub\n");
|
||||
*pValue = tomFalse;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -1417,13 +1427,14 @@ static HRESULT WINAPI ITextFont_fnSetEmboss(ITextFont *me, LONG Value)
|
||||
|
||||
static HRESULT WINAPI ITextFont_fnGetForeColor(ITextFont *me, LONG *pValue)
|
||||
@@ -1880,7 +1890,9 @@ static HRESULT WINAPI TextFont_SetEmboss(ITextFont *iface, LONG value)
|
||||
static HRESULT WINAPI TextFont_GetForeColor(ITextFont *iface, LONG *value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
- FIXME("(%p)->(%p): stub\n", This, value);
|
||||
+ static int once;
|
||||
ITextFontImpl *This = impl_from_ITextFont(me);
|
||||
if (!pValue)
|
||||
+
|
||||
+ if (!once++) FIXME("(%p)->(%p): stub\n", This, value);
|
||||
|
||||
if (!value)
|
||||
return E_INVALIDARG;
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
|
||||
- FIXME("Stub\n");
|
||||
+ if (!once++) FIXME("Stub\n");
|
||||
*pValue = tomAutoColor;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -1480,13 +1491,14 @@ static HRESULT WINAPI ITextFont_fnSetEngrave(ITextFont *me, LONG Value)
|
||||
|
||||
static HRESULT WINAPI ITextFont_fnGetItalic(ITextFont *me, LONG *pValue)
|
||||
@@ -1949,7 +1961,9 @@ static HRESULT WINAPI TextFont_SetEngrave(ITextFont *iface, LONG value)
|
||||
static HRESULT WINAPI TextFont_GetItalic(ITextFont *iface, LONG *value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
- FIXME("(%p)->(%p): stub\n", This, value);
|
||||
+ static int once;
|
||||
ITextFontImpl *This = impl_from_ITextFont(me);
|
||||
if (!pValue)
|
||||
+
|
||||
+ if (!once++) FIXME("(%p)->(%p): stub\n", This, value);
|
||||
|
||||
if (!value)
|
||||
return E_INVALIDARG;
|
||||
@@ -1996,7 +2010,9 @@ static HRESULT WINAPI TextFont_SetKerning(ITextFont *iface, FLOAT value)
|
||||
static HRESULT WINAPI TextFont_GetLanguageID(ITextFont *iface, LONG *value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
- FIXME("(%p)->(%p): stub\n", This, value);
|
||||
+ static int once;
|
||||
+
|
||||
+ if (!once++) FIXME("(%p)->(%p): stub\n", This, value);
|
||||
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
|
||||
- FIXME("Stub\n");
|
||||
+ if (!once++) FIXME("Stub\n");
|
||||
*pValue = tomFalse;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -1523,11 +1535,12 @@ static HRESULT WINAPI ITextFont_fnSetKerning(ITextFont *me, float Value)
|
||||
|
||||
static HRESULT WINAPI ITextFont_fnGetLanguageID(ITextFont *me, LONG *pValue)
|
||||
@@ -2133,7 +2149,9 @@ static HRESULT WINAPI TextFont_SetShadow(ITextFont *iface, LONG value)
|
||||
static HRESULT WINAPI TextFont_GetSize(ITextFont *iface, FLOAT *value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
- FIXME("(%p)->(%p): stub\n", This, value);
|
||||
+ static int once;
|
||||
ITextFontImpl *This = impl_from_ITextFont(me);
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
+
|
||||
+ if (!once++) FIXME("(%p)->(%p): stub\n", This, value);
|
||||
|
||||
- FIXME("not implemented: %p\n", This);
|
||||
+ if (!once++) FIXME("not implemented: %p\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -1647,13 +1660,14 @@ static HRESULT WINAPI ITextFont_fnSetShadow(ITextFont *me, LONG Value)
|
||||
|
||||
static HRESULT WINAPI ITextFont_fnGetSize(ITextFont *me, float *pValue)
|
||||
{
|
||||
+ static int once;
|
||||
ITextFontImpl *This = impl_from_ITextFont(me);
|
||||
if (!pValue)
|
||||
if (!value)
|
||||
return E_INVALIDARG;
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
|
||||
- FIXME("Stub\n");
|
||||
+ if (!once++) FIXME("Stub\n");
|
||||
*pValue = 12.0;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -1710,13 +1724,14 @@ static HRESULT WINAPI ITextFont_fnSetSpacing(ITextFont *me, float Value)
|
||||
|
||||
static HRESULT WINAPI ITextFont_fnGetStrikeThrough(ITextFont *me, LONG *pValue)
|
||||
@@ -2202,7 +2220,9 @@ static HRESULT WINAPI TextFont_SetSpacing(ITextFont *iface, FLOAT value)
|
||||
static HRESULT WINAPI TextFont_GetStrikeThrough(ITextFont *iface, LONG *value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
- FIXME("(%p)->(%p): stub\n", This, value);
|
||||
+ static int once;
|
||||
ITextFontImpl *This = impl_from_ITextFont(me);
|
||||
if (!pValue)
|
||||
+
|
||||
+ if (!once++) FIXME("(%p)->(%p): stub\n", This, value);
|
||||
|
||||
if (!value)
|
||||
return E_INVALIDARG;
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
|
||||
- FIXME("Stub\n");
|
||||
+ if (!once++) FIXME("Stub\n");
|
||||
*pValue = tomFalse;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -1733,13 +1748,14 @@ static HRESULT WINAPI ITextFont_fnSetStrikeThrough(ITextFont *me, LONG Value)
|
||||
|
||||
static HRESULT WINAPI ITextFont_fnGetSubscript(ITextFont *me, LONG *pValue)
|
||||
@@ -2227,7 +2247,9 @@ static HRESULT WINAPI TextFont_SetStrikeThrough(ITextFont *iface, LONG value)
|
||||
static HRESULT WINAPI TextFont_GetSubscript(ITextFont *iface, LONG *value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
- FIXME("(%p)->(%p): stub\n", This, value);
|
||||
+ static int once;
|
||||
ITextFontImpl *This = impl_from_ITextFont(me);
|
||||
if (!pValue)
|
||||
+
|
||||
+ if (!once++) FIXME("(%p)->(%p): stub\n", This, value);
|
||||
|
||||
if (!value)
|
||||
return E_INVALIDARG;
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
|
||||
- FIXME("Stub\n");
|
||||
+ if (!once++) FIXME("Stub\n");
|
||||
*pValue = tomFalse;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -1779,13 +1795,14 @@ static HRESULT WINAPI ITextFont_fnSetSuperscript(ITextFont *me, LONG Value)
|
||||
|
||||
static HRESULT WINAPI ITextFont_fnGetUnderline(ITextFont *me, LONG *pValue)
|
||||
@@ -2277,7 +2299,9 @@ static HRESULT WINAPI TextFont_SetSuperscript(ITextFont *iface, LONG value)
|
||||
static HRESULT WINAPI TextFont_GetUnderline(ITextFont *iface, LONG *value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
- FIXME("(%p)->(%p): stub\n", This, value);
|
||||
+ static int once;
|
||||
ITextFontImpl *This = impl_from_ITextFont(me);
|
||||
if (!pValue)
|
||||
+
|
||||
+ if (!once++) FIXME("(%p)->(%p): stub\n", This, value);
|
||||
|
||||
if (!value)
|
||||
return E_INVALIDARG;
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
|
||||
- FIXME("Stub\n");
|
||||
+ if (!once++) FIXME("Stub\n");
|
||||
*pValue = tomNone;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -1802,11 +1819,12 @@ static HRESULT WINAPI ITextFont_fnSetUnderline(ITextFont *me, LONG Value)
|
||||
|
||||
static HRESULT WINAPI ITextFont_fnGetWeight(ITextFont *me, LONG *pValue)
|
||||
@@ -2302,7 +2326,9 @@ static HRESULT WINAPI TextFont_SetUnderline(ITextFont *iface, LONG value)
|
||||
static HRESULT WINAPI TextFont_GetWeight(ITextFont *iface, LONG *value)
|
||||
{
|
||||
ITextFontImpl *This = impl_from_ITextFont(iface);
|
||||
- FIXME("(%p)->(%p): stub\n", This, value);
|
||||
+ static int once;
|
||||
ITextFontImpl *This = impl_from_ITextFont(me);
|
||||
+
|
||||
+ if (!once++) FIXME("(%p)->(%p): stub\n", This, value);
|
||||
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
@@ -2593,7 +2619,9 @@ static HRESULT WINAPI TextPara_SetStyle(ITextPara *iface, LONG value)
|
||||
static HRESULT WINAPI TextPara_GetAlignment(ITextPara *iface, LONG *value)
|
||||
{
|
||||
ITextParaImpl *This = impl_from_ITextPara(iface);
|
||||
- FIXME("(%p)->(%p)\n", This, value);
|
||||
+ static int once;
|
||||
+
|
||||
+ if (!once++) FIXME("(%p)->(%p)\n", This, value);
|
||||
|
||||
- FIXME("not implemented: %p\n", This);
|
||||
+ if (!once++) FIXME("not implemented: %p\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
--
|
||||
2.1.2
|
||||
2.4.0
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
Fixes: [12458] Support for ITextDocument_fnRange function
|
||||
# Fixes: [12458] Support for ITextDocument_fnRange function
|
||||
Fixes: [18303] Support for ITextRange, ITextFont and ITextPara
|
||||
Fixes: Adobe Reader needs ITextSelection_fnGetDuplicate implementation
|
||||
|
@ -1,184 +0,0 @@
|
||||
From 1ee8a05ba250bb7ca37b68f0d80085c231351ee1 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 12 May 2015 05:15:59 +0200
|
||||
Subject: server: Do not create foreign thread queues for attach_thread_input
|
||||
requests.
|
||||
|
||||
---
|
||||
dlls/user32/tests/input.c | 109 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
server/queue.c | 8 ++++
|
||||
2 files changed, 117 insertions(+)
|
||||
|
||||
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
|
||||
index 30b91a0..4a67c74 100644
|
||||
--- a/dlls/user32/tests/input.c
|
||||
+++ b/dlls/user32/tests/input.c
|
||||
@@ -2040,7 +2040,10 @@ static LRESULT WINAPI MsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam, LPAR
|
||||
struct wnd_event
|
||||
{
|
||||
HWND hwnd;
|
||||
+ HANDLE wait_event;
|
||||
HANDLE start_event;
|
||||
+ DWORD attach_from;
|
||||
+ DWORD attach_to;
|
||||
BOOL setWindows;
|
||||
};
|
||||
|
||||
@@ -2048,6 +2051,26 @@ static DWORD WINAPI thread_proc(void *param)
|
||||
{
|
||||
MSG msg;
|
||||
struct wnd_event *wnd_event = param;
|
||||
+ BOOL ret;
|
||||
+
|
||||
+ if (wnd_event->wait_event)
|
||||
+ {
|
||||
+ ok(WaitForSingleObject(wnd_event->wait_event, INFINITE) == WAIT_OBJECT_0,
|
||||
+ "WaitForSingleObject failed\n");
|
||||
+ CloseHandle(wnd_event->wait_event);
|
||||
+ }
|
||||
+
|
||||
+ if (wnd_event->attach_from)
|
||||
+ {
|
||||
+ ret = AttachThreadInput(wnd_event->attach_from, GetCurrentThreadId(), TRUE);
|
||||
+ ok(ret, "AttachThreadInput error %d\n", GetLastError());
|
||||
+ }
|
||||
+
|
||||
+ if (wnd_event->attach_to)
|
||||
+ {
|
||||
+ ret = AttachThreadInput(GetCurrentThreadId(), wnd_event->attach_to, TRUE);
|
||||
+ ok(ret, "AttachThreadInput error %d\n", GetLastError());
|
||||
+ }
|
||||
|
||||
wnd_event->hwnd = CreateWindowExA(0, "TestWindowClass", "window caption text", WS_OVERLAPPEDWINDOW,
|
||||
100, 100, 200, 200, 0, 0, 0, NULL);
|
||||
@@ -2090,7 +2113,10 @@ static void test_attach_input(void)
|
||||
cls.lpszClassName = "TestWindowClass";
|
||||
if(!RegisterClassA(&cls)) return;
|
||||
|
||||
+ wnd_event.wait_event = NULL;
|
||||
wnd_event.start_event = CreateEventW(NULL, 0, 0, NULL);
|
||||
+ wnd_event.attach_from = 0;
|
||||
+ wnd_event.attach_to = 0;
|
||||
wnd_event.setWindows = FALSE;
|
||||
if (!wnd_event.start_event)
|
||||
{
|
||||
@@ -2157,7 +2183,10 @@ static void test_attach_input(void)
|
||||
ok(WaitForSingleObject(hThread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
|
||||
CloseHandle(hThread);
|
||||
|
||||
+ wnd_event.wait_event = NULL;
|
||||
wnd_event.start_event = CreateEventW(NULL, 0, 0, NULL);
|
||||
+ wnd_event.attach_from = 0;
|
||||
+ wnd_event.attach_to = 0;
|
||||
wnd_event.setWindows = TRUE;
|
||||
|
||||
hThread = CreateThread(NULL, 0, thread_proc, &wnd_event, 0, &tid);
|
||||
@@ -2213,6 +2242,86 @@ static void test_attach_input(void)
|
||||
|
||||
ok(WaitForSingleObject(hThread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
|
||||
CloseHandle(hThread);
|
||||
+
|
||||
+ wnd_event.wait_event = CreateEventW(NULL, 0, 0, NULL);
|
||||
+ wnd_event.start_event = CreateEventW(NULL, 0, 0, NULL);
|
||||
+ wnd_event.attach_from = 0;
|
||||
+ wnd_event.attach_to = 0;
|
||||
+ wnd_event.setWindows = TRUE;
|
||||
+
|
||||
+ hThread = CreateThread(NULL, 0, thread_proc, &wnd_event, 0, &tid);
|
||||
+ ok(hThread != NULL, "CreateThread failed, error %d\n", GetLastError());
|
||||
+
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ret = AttachThreadInput(GetCurrentThreadId(), tid, TRUE);
|
||||
+ ok(!ret, "AttachThreadInput succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_INVALID_PARAMETER || broken(GetLastError() == 0xdeadbeef) /* <= Win XP */,
|
||||
+ "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
+
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ ret = AttachThreadInput(tid, GetCurrentThreadId(), TRUE);
|
||||
+ ok(!ret, "AttachThreadInput succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_INVALID_PARAMETER || broken(GetLastError() == 0xdeadbeef) /* <= Win XP */,
|
||||
+ "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
+
|
||||
+ SetEvent(wnd_event.wait_event);
|
||||
+
|
||||
+ ok(WaitForSingleObject(wnd_event.start_event, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
|
||||
+ CloseHandle(wnd_event.start_event);
|
||||
+
|
||||
+ ret = PostMessageA(wnd_event.hwnd, WM_QUIT, 0, 0);
|
||||
+ ok(ret, "PostMessageA(WM_QUIT) error %d\n", GetLastError());
|
||||
+
|
||||
+ ok(WaitForSingleObject(hThread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
|
||||
+ CloseHandle(hThread);
|
||||
+
|
||||
+ wnd_event.wait_event = NULL;
|
||||
+ wnd_event.start_event = CreateEventW(NULL, 0, 0, NULL);
|
||||
+ wnd_event.attach_from = GetCurrentThreadId();
|
||||
+ wnd_event.attach_to = 0;
|
||||
+ wnd_event.setWindows = FALSE;
|
||||
+
|
||||
+ SetFocus(ourWnd);
|
||||
+ SetActiveWindow(ourWnd);
|
||||
+
|
||||
+ hThread = CreateThread(NULL, 0, thread_proc, &wnd_event, 0, &tid);
|
||||
+ ok(hThread != NULL, "CreateThread failed, error %d\n", GetLastError());
|
||||
+
|
||||
+ ok(WaitForSingleObject(wnd_event.start_event, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
|
||||
+ CloseHandle(wnd_event.start_event);
|
||||
+
|
||||
+ ok(GetActiveWindow() == ourWnd, "expected active %p, got %p\n", ourWnd, GetActiveWindow());
|
||||
+ ok(GetFocus() == ourWnd, "expected focus %p, got %p\n", ourWnd, GetFocus());
|
||||
+
|
||||
+ ret = PostMessageA(wnd_event.hwnd, WM_QUIT, 0, 0);
|
||||
+ ok(ret, "PostMessageA(WM_QUIT) error %d\n", GetLastError());
|
||||
+
|
||||
+ ok(WaitForSingleObject(hThread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
|
||||
+ CloseHandle(hThread);
|
||||
+
|
||||
+ wnd_event.wait_event = NULL;
|
||||
+ wnd_event.start_event = CreateEventW(NULL, 0, 0, NULL);
|
||||
+ wnd_event.attach_from = 0;
|
||||
+ wnd_event.attach_to = GetCurrentThreadId();
|
||||
+ wnd_event.setWindows = FALSE;
|
||||
+
|
||||
+ SetFocus(ourWnd);
|
||||
+ SetActiveWindow(ourWnd);
|
||||
+
|
||||
+ hThread = CreateThread(NULL, 0, thread_proc, &wnd_event, 0, &tid);
|
||||
+ ok(hThread != NULL, "CreateThread failed, error %d\n", GetLastError());
|
||||
+
|
||||
+ ok(WaitForSingleObject(wnd_event.start_event, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
|
||||
+ CloseHandle(wnd_event.start_event);
|
||||
+
|
||||
+ ok(GetActiveWindow() == ourWnd, "expected active %p, got %p\n", ourWnd, GetActiveWindow());
|
||||
+ ok(GetFocus() == ourWnd, "expected focus %p, got %p\n", ourWnd, GetFocus());
|
||||
+
|
||||
+ ret = PostMessageA(wnd_event.hwnd, WM_QUIT, 0, 0);
|
||||
+ ok(ret, "PostMessageA(WM_QUIT) error %d\n", GetLastError());
|
||||
+
|
||||
+ ok(WaitForSingleObject(hThread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
|
||||
+ CloseHandle(hThread);
|
||||
DestroyWindow(ourWnd);
|
||||
DestroyWindow(Wnd2);
|
||||
}
|
||||
diff --git a/server/queue.c b/server/queue.c
|
||||
index 30869a0..374a965 100644
|
||||
--- a/server/queue.c
|
||||
+++ b/server/queue.c
|
||||
@@ -1068,6 +1068,14 @@ int attach_thread_input( struct thread *thread_from, struct thread *thread_to )
|
||||
struct thread_input *input;
|
||||
int ret;
|
||||
|
||||
+ /* do not create a message queue for foreign threads */
|
||||
+ if ((!thread_to->queue && thread_to != current) ||
|
||||
+ (!thread_from->queue && thread_from != current))
|
||||
+ {
|
||||
+ set_error( STATUS_INVALID_PARAMETER );
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
if (!thread_to->queue && !(thread_to->queue = create_msg_queue( thread_to, NULL ))) return 0;
|
||||
if (!(desktop = get_thread_desktop( thread_from, 0 ))) return 0;
|
||||
input = (struct thread_input *)grab_object( thread_to->queue->input );
|
||||
--
|
||||
2.4.0
|
||||
|
@ -1,2 +0,0 @@
|
||||
Fixes: [38562] Do not create foreign thread queues for attach_thread_input requests
|
||||
Category: stable
|
@ -1,24 +0,0 @@
|
||||
From a849696bf25a87a84a565d8818fa1d4f5b1ebde3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 15 May 2015 19:55:13 +0200
|
||||
Subject: wininet: Fix memory leak by not calling get_cookie_header twice.
|
||||
|
||||
---
|
||||
dlls/wininet/http.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
|
||||
index cd2cdcf..45183cf 100644
|
||||
--- a/dlls/wininet/http.c
|
||||
+++ b/dlls/wininet/http.c
|
||||
@@ -4244,7 +4244,6 @@ static void HTTP_InsertCookies(http_request_t *request)
|
||||
if(res != ERROR_SUCCESS || !cookies)
|
||||
return;
|
||||
|
||||
- get_cookie_header(request->server->name, request->path, &cookies);
|
||||
HTTP_HttpAddRequestHeadersW(request, cookies, strlenW(cookies), HTTP_ADDREQ_FLAG_REPLACE);
|
||||
heap_free(cookies);
|
||||
}
|
||||
--
|
||||
2.4.0
|
||||
|
Loading…
Reference in New Issue
Block a user