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
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
722ee5ed7e | ||
|
126e7db0e0 | ||
|
5a1e1cb2e0 | ||
|
9160b38ad3 | ||
|
e1966ac26e | ||
|
a5a28003b4 | ||
|
621740283c | ||
|
761fef8d70 | ||
|
63300ffaad | ||
|
badfcbc451 | ||
|
6a314e5994 | ||
|
435e01412e | ||
|
410820a918 | ||
|
a604ca1f6d | ||
|
445948eee3 | ||
|
50bad5b9af |
@@ -1,15 +1,15 @@
|
||||
From e4688a88901a1c13b2df67a0444c34e3ee02bbab Mon Sep 17 00:00:00 2001
|
||||
From 9c7acdba85edafc52bc0cc2719ac556894a59351 Mon Sep 17 00:00:00 2001
|
||||
From: Andrew D'Addesio <andrew@fatbag.net>
|
||||
Date: Fri, 8 Feb 2019 18:48:33 -1000
|
||||
Subject: [PATCH] ddraw: Return correct devices based off requested DirectX
|
||||
version.
|
||||
|
||||
---
|
||||
dlls/ddraw/ddraw.c | 232 +++++++++++++++++++++++++--------------------
|
||||
1 file changed, 129 insertions(+), 103 deletions(-)
|
||||
dlls/ddraw/ddraw.c | 240 +++++++++++++++++++++++++--------------------
|
||||
1 file changed, 131 insertions(+), 109 deletions(-)
|
||||
|
||||
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
|
||||
index 5887854556b..5ac95dc3043 100644
|
||||
index 8f2fd9f3b4b..0ef400b7a26 100644
|
||||
--- a/dlls/ddraw/ddraw.c
|
||||
+++ b/dlls/ddraw/ddraw.c
|
||||
@@ -44,37 +44,80 @@ static const DDDEVICEIDENTIFIER2 deviceidentifier =
|
||||
@@ -122,7 +122,7 @@ index 5887854556b..5ac95dc3043 100644
|
||||
/* Fill the missing members, and do some fixup */
|
||||
caps->dpcLineCaps.dwSize = sizeof(caps->dpcLineCaps);
|
||||
caps->dpcLineCaps.dwTextureBlendCaps = D3DPTBLENDCAPS_ADD
|
||||
@@ -3746,8 +3780,7 @@ static HRESULT WINAPI ddraw1_DuplicateSurface(IDirectDraw *iface, IDirectDrawSur
|
||||
@@ -3770,8 +3804,7 @@ static HRESULT WINAPI ddraw1_DuplicateSurface(IDirectDraw *iface, IDirectDrawSur
|
||||
/*****************************************************************************
|
||||
* IDirect3D7::EnumDevices
|
||||
*
|
||||
@@ -132,7 +132,7 @@ index 5887854556b..5ac95dc3043 100644
|
||||
*
|
||||
* Params:
|
||||
* callback: Function to call for each enumerated device
|
||||
@@ -3779,13 +3812,16 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
|
||||
@@ -3803,13 +3836,16 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
|
||||
}
|
||||
dev_caps = device_desc7.dwDevCaps;
|
||||
|
||||
@@ -153,7 +153,7 @@ index 5887854556b..5ac95dc3043 100644
|
||||
if (ret != DDENUMRET_OK)
|
||||
{
|
||||
TRACE("Application cancelled the enumeration.\n");
|
||||
@@ -3801,11 +3837,21 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
|
||||
@@ -3825,11 +3861,21 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ index 5887854556b..5ac95dc3043 100644
|
||||
*
|
||||
* Versions 1, 2 and 3
|
||||
*
|
||||
@@ -3820,18 +3866,18 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
|
||||
@@ -3844,18 +3890,18 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
|
||||
*****************************************************************************/
|
||||
static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBACK callback, void *context)
|
||||
{
|
||||
@@ -205,7 +205,7 @@ index 5887854556b..5ac95dc3043 100644
|
||||
|
||||
TRACE("iface %p, callback %p, context %p.\n", iface, callback, context);
|
||||
|
||||
@@ -3840,55 +3886,60 @@ static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBA
|
||||
@@ -3864,58 +3910,59 @@ static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBA
|
||||
|
||||
wined3d_mutex_lock();
|
||||
|
||||
@@ -221,7 +221,6 @@ index 5887854556b..5ac95dc3043 100644
|
||||
wined3d_mutex_unlock();
|
||||
return hr;
|
||||
}
|
||||
+
|
||||
ddraw_d3dcaps1_from_7(&device_desc1, &device_desc7);
|
||||
+ device_desc1.dwSize = desc_size;
|
||||
|
||||
@@ -245,15 +244,12 @@ index 5887854556b..5ac95dc3043 100644
|
||||
- * flag set. This way it refuses the emulation device, and HAL devices
|
||||
- * never have POW2 unset in d3d7 on windows. */
|
||||
- if (ddraw->d3dversion != 1)
|
||||
+ clear_device_desc(&empty_desc1);
|
||||
+ empty_desc1.dwSize = desc_size;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(device_list); i++)
|
||||
{
|
||||
- static CHAR reference_description[] = "RGB Direct3D emulation";
|
||||
+ if (!(device_list[i].version_mask & D3D_VERSION(ddraw->d3dversion)))
|
||||
+ continue;
|
||||
|
||||
- {
|
||||
- /* Tomb Raider 3 overwrites the reference device description buffer
|
||||
- * with its own custom string. Reserve some extra space in the array
|
||||
- * to avoid a buffer overrun. */
|
||||
- static CHAR reference_description[64] = "RGB Direct3D emulation";
|
||||
-
|
||||
- TRACE("Enumerating WineD3D D3DDevice interface.\n");
|
||||
- hal_desc = device_desc1;
|
||||
- hel_desc = device_desc1;
|
||||
@@ -269,13 +265,22 @@ index 5887854556b..5ac95dc3043 100644
|
||||
- /* RGB, REF, RAMP and MMX devices don't report hardware transform and lighting capability */
|
||||
- hal_desc.dwDevCaps &= ~(D3DDEVCAPS_HWTRANSFORMANDLIGHT | D3DDEVCAPS_DRAWPRIMITIVES2EX | D3DDEVCAPS_HWRASTERIZATION);
|
||||
- hel_desc.dwDevCaps &= ~(D3DDEVCAPS_HWTRANSFORMANDLIGHT | D3DDEVCAPS_DRAWPRIMITIVES2EX | D3DDEVCAPS_HWRASTERIZATION);
|
||||
+ if (IsEqualGUID(&IID_IDirect3DHALDevice, device_list[i].device_guid))
|
||||
+ {
|
||||
+ hal_desc = device_desc1;
|
||||
|
||||
-
|
||||
- hr = callback((GUID *)&IID_IDirect3DRGBDevice, reference_description,
|
||||
- device_name, &hal_desc, &hel_desc, context);
|
||||
- if (hr != D3DENUMRET_OK)
|
||||
+ clear_device_desc(&empty_desc1);
|
||||
+ empty_desc1.dwSize = desc_size;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(device_list); i++)
|
||||
+ {
|
||||
+ if (!(device_list[i].version_mask & D3D_VERSION(ddraw->d3dversion)))
|
||||
+ continue;
|
||||
+
|
||||
+ if (IsEqualGUID(&IID_IDirect3DHALDevice, device_list[i].device_guid))
|
||||
+ {
|
||||
+ hal_desc = device_desc1;
|
||||
+
|
||||
+ /* The HAL device's hel_desc is almost empty -- but not completely */
|
||||
+ hel_desc = empty_desc1;
|
||||
+ hel_desc.dwFlags = D3DDD_COLORMODEL | D3DDD_DEVCAPS | D3DDD_TRANSFORMCAPS
|
||||
@@ -305,7 +310,7 @@ index 5887854556b..5ac95dc3043 100644
|
||||
{
|
||||
TRACE("Application cancelled the enumeration.\n");
|
||||
wined3d_mutex_unlock();
|
||||
@@ -3896,31 +3947,6 @@ static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBA
|
||||
@@ -3923,31 +3970,6 @@ static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBA
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From d09ac9a348309f956a2f3985a1b465b51b6e174c Mon Sep 17 00:00:00 2001
|
||||
From 6ef73a30a9f0c7c6775786d4cdba169f95056393 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 28 Mar 2015 08:18:10 +0100
|
||||
Subject: [PATCH] dsound: Apply filters before sound is multiplied to speakers.
|
||||
@@ -11,10 +11,10 @@ Based on a patch by Mark Harmstone.
|
||||
3 files changed, 81 insertions(+), 36 deletions(-)
|
||||
|
||||
diff --git a/dlls/dsound/dsound.c b/dlls/dsound/dsound.c
|
||||
index 0b8edaaaf06..bdf3a824511 100644
|
||||
index 7629810db50..4c1c022acb7 100644
|
||||
--- a/dlls/dsound/dsound.c
|
||||
+++ b/dlls/dsound/dsound.c
|
||||
@@ -234,6 +234,7 @@ static ULONG DirectSoundDevice_Release(DirectSoundDevice * device)
|
||||
@@ -236,6 +236,7 @@ static ULONG DirectSoundDevice_Release(DirectSoundDevice * device)
|
||||
if(device->mmdevice)
|
||||
IMMDevice_Release(device->mmdevice);
|
||||
CloseHandle(device->sleepev);
|
||||
@@ -23,10 +23,10 @@ index 0b8edaaaf06..bdf3a824511 100644
|
||||
free(device->cp_buffer);
|
||||
free(device->buffer);
|
||||
diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
|
||||
index 124a4311b4c..fe39ca221fa 100644
|
||||
index 61323be99d8..c2656ab82f1 100644
|
||||
--- a/dlls/dsound/dsound_private.h
|
||||
+++ b/dlls/dsound/dsound_private.h
|
||||
@@ -89,8 +89,8 @@ struct DirectSoundDevice
|
||||
@@ -90,8 +90,8 @@ struct DirectSoundDevice
|
||||
int speaker_num[DS_MAX_CHANNELS];
|
||||
int num_speakers;
|
||||
int lfe_channel;
|
||||
@@ -34,14 +34,14 @@ index 124a4311b4c..fe39ca221fa 100644
|
||||
- DWORD tmp_buffer_len, cp_buffer_len;
|
||||
+ float *tmp_buffer, *cp_buffer, *dsp_buffer;
|
||||
+ DWORD tmp_buffer_len, cp_buffer_len, dsp_buffer_len;
|
||||
CO_MTA_USAGE_COOKIE mta_cookie;
|
||||
|
||||
DSVOLUMEPAN volpan;
|
||||
|
||||
diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c
|
||||
index c26b19ea8c1..68a45c46d1e 100644
|
||||
index 042b9499727..f261588454a 100644
|
||||
--- a/dlls/dsound/mixer.c
|
||||
+++ b/dlls/dsound/mixer.c
|
||||
@@ -283,10 +283,9 @@ static inline float get_current_sample(const IDirectSoundBufferImpl *dsb,
|
||||
@@ -286,10 +286,9 @@ static inline float get_current_sample(const IDirectSoundBufferImpl *dsb,
|
||||
return dsb->get(dsb, buffer + (mixpos % buflen), channel);
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ index c26b19ea8c1..68a45c46d1e 100644
|
||||
UINT committed_samples = 0;
|
||||
DWORD channel, i;
|
||||
|
||||
@@ -305,17 +304,16 @@ static UINT cp_fields_noresample(IDirectSoundBufferImpl *dsb, UINT count)
|
||||
@@ -308,17 +307,16 @@ static UINT cp_fields_noresample(IDirectSoundBufferImpl *dsb, UINT count)
|
||||
|
||||
for (; i < count; i++)
|
||||
for (channel = 0; channel < dsb->mix_channels; channel++)
|
||||
@@ -74,7 +74,7 @@ index c26b19ea8c1..68a45c46d1e 100644
|
||||
UINT channels = dsb->mix_channels;
|
||||
|
||||
LONG64 freqAcc_start = *freqAccNum;
|
||||
@@ -343,7 +341,7 @@ static UINT cp_fields_resample_lq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
|
||||
@@ -346,7 +344,7 @@ static UINT cp_fields_resample_lq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
|
||||
float s1 = get_current_sample(dsb, dsb->buffer->memory, dsb->buflen, idx, channel);
|
||||
float s2 = get_current_sample(dsb, dsb->buffer->memory, dsb->buflen, idx + istride, channel);
|
||||
float result = s1 * cur_freqAcc2 + s2 * cur_freqAcc;
|
||||
@@ -83,7 +83,7 @@ index c26b19ea8c1..68a45c46d1e 100644
|
||||
}
|
||||
}
|
||||
|
||||
@@ -351,11 +349,11 @@ static UINT cp_fields_resample_lq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
|
||||
@@ -354,11 +352,11 @@ static UINT cp_fields_resample_lq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
|
||||
return max_ipos;
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ index c26b19ea8c1..68a45c46d1e 100644
|
||||
UINT committed_samples = 0;
|
||||
|
||||
LONG64 freqAcc_start = *freqAccNum;
|
||||
@@ -430,23 +428,24 @@ static UINT cp_fields_resample_hq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
|
||||
@@ -433,23 +431,24 @@ static UINT cp_fields_resample_hq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
|
||||
float* cache = &intermediate[channel * required_input + ipos];
|
||||
for (j = 0; j < fir_used; j++)
|
||||
sum += fir_copy[j] * cache[j];
|
||||
@@ -127,7 +127,7 @@ index c26b19ea8c1..68a45c46d1e 100644
|
||||
|
||||
ipos = dsb->sec_mixpos + adv * dsb->pwfx->nBlockAlign;
|
||||
if (ipos >= dsb->buflen) {
|
||||
@@ -482,6 +481,21 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen, DWORD ptr1, DWORD ptr2)
|
||||
@@ -485,6 +484,21 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen, DWORD ptr1, DWORD ptr2)
|
||||
return buflen + ptr1 - ptr2;
|
||||
}
|
||||
}
|
||||
@@ -149,7 +149,7 @@ index c26b19ea8c1..68a45c46d1e 100644
|
||||
/**
|
||||
* Mix at most the given amount of data into the allocated temporary buffer
|
||||
* of the given secondary buffer, starting from the dsb's first currently
|
||||
@@ -497,31 +511,61 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen, DWORD ptr1, DWORD ptr2)
|
||||
@@ -500,31 +514,61 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen, DWORD ptr1, DWORD ptr2)
|
||||
*/
|
||||
static void DSOUND_MixToTemporary(IDirectSoundBufferImpl *dsb, DWORD frames)
|
||||
{
|
||||
@@ -180,12 +180,22 @@ index c26b19ea8c1..68a45c46d1e 100644
|
||||
+ }
|
||||
+ if(dsb->put_aux == putieee32_sum)
|
||||
+ memset(dsb->device->tmp_buffer, 0, dsb->device->tmp_buffer_len);
|
||||
+
|
||||
|
||||
- if (size_bytes > 0) {
|
||||
- for (i = 0; i < dsb->num_filters; i++) {
|
||||
- if (dsb->filters[i].inplace) {
|
||||
- hr = IMediaObjectInPlace_Process(dsb->filters[i].inplace, size_bytes, (BYTE*)dsb->device->tmp_buffer, 0, DMO_INPLACE_NORMAL);
|
||||
+ if (using_filters) {
|
||||
+ put = putieee32_dsp;
|
||||
+ ostride = dsb->mix_channels * sizeof(float);
|
||||
+ size_bytes = frames * ostride;
|
||||
+
|
||||
|
||||
- if (FAILED(hr))
|
||||
- WARN("IMediaObjectInPlace_Process failed for filter %u\n", i);
|
||||
- } else
|
||||
- WARN("filter %u has no inplace object - unsupported\n", i);
|
||||
- }
|
||||
- }
|
||||
+ if (dsb->device->dsp_buffer_len < size_bytes || !dsb->device->dsp_buffer) {
|
||||
+ if (dsb->device->dsp_buffer)
|
||||
+ dsb->device->dsp_buffer = HeapReAlloc(GetProcessHeap(), 0, dsb->device->dsp_buffer, size_bytes);
|
||||
@@ -194,11 +204,7 @@ index c26b19ea8c1..68a45c46d1e 100644
|
||||
+ dsb->device->dsp_buffer_len = size_bytes;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- if (size_bytes > 0) {
|
||||
- for (i = 0; i < dsb->num_filters; i++) {
|
||||
- if (dsb->filters[i].inplace) {
|
||||
- hr = IMediaObjectInPlace_Process(dsb->filters[i].inplace, size_bytes, (BYTE*)dsb->device->tmp_buffer, 0, DMO_INPLACE_NORMAL);
|
||||
+
|
||||
+ cp_fields(dsb, put, ostride, frames, &dsb->freqAccNum);
|
||||
+
|
||||
+ if (using_filters) {
|
||||
@@ -213,13 +219,7 @@ index c26b19ea8c1..68a45c46d1e 100644
|
||||
+ WARN("filter %lu has no inplace object - unsupported\n", i);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- if (FAILED(hr))
|
||||
- WARN("IMediaObjectInPlace_Process failed for filter %u\n", i);
|
||||
- } else
|
||||
- WARN("filter %u has no inplace object - unsupported\n", i);
|
||||
- }
|
||||
- }
|
||||
+
|
||||
+ istride = ostride;
|
||||
+ ostride = dsb->device->pwfx->nChannels * sizeof(float);
|
||||
+ for (i = 0; i < frames; i++) {
|
||||
@@ -232,5 +232,5 @@ index c26b19ea8c1..68a45c46d1e 100644
|
||||
|
||||
static void DSOUND_MixerVol(const IDirectSoundBufferImpl *dsb, INT frames)
|
||||
--
|
||||
2.39.2
|
||||
2.43.0
|
||||
|
||||
|
@@ -1,223 +0,0 @@
|
||||
From dd46b005cfcc8aa02bf25c031326e28bd75e0ff2 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Jansen <mark.jansen@reactos.org>
|
||||
Date: Sun, 24 Sep 2017 22:45:22 +0200
|
||||
Subject: [PATCH] kernel32/tests: Add tests for job object accounting
|
||||
|
||||
Signed-off-by: Mark Jansen <mark.jansen@reactos.org>
|
||||
---
|
||||
dlls/kernel32/tests/process.c | 95 +++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 95 insertions(+)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
|
||||
index e9e8555c32e..e5a9914ca7b 100644
|
||||
--- a/dlls/kernel32/tests/process.c
|
||||
+++ b/dlls/kernel32/tests/process.c
|
||||
@@ -2541,6 +2541,69 @@ static void _create_process(int line, const char *command, LPPROCESS_INFORMATION
|
||||
ok_(__FILE__, line)(ret, "CreateProcess error %lu\n", GetLastError());
|
||||
}
|
||||
|
||||
+#define test_assigned_proc(job, ...) _test_assigned_proc(__LINE__, job, __VA_ARGS__)
|
||||
+static void _test_assigned_proc(int line, HANDLE job, int expected_count, ...)
|
||||
+{
|
||||
+ char buf[sizeof(JOBOBJECT_BASIC_PROCESS_ID_LIST) + sizeof(ULONG_PTR) * 20];
|
||||
+ PJOBOBJECT_BASIC_PROCESS_ID_LIST pid_list = (JOBOBJECT_BASIC_PROCESS_ID_LIST *)buf;
|
||||
+ DWORD ret_len, pid;
|
||||
+ va_list valist;
|
||||
+ int n;
|
||||
+ BOOL ret;
|
||||
+
|
||||
+ memset(buf, 0, sizeof(buf));
|
||||
+ ret = pQueryInformationJobObject(job, JobObjectBasicProcessIdList, pid_list, sizeof(buf), &ret_len);
|
||||
+ ok_(__FILE__, line)(ret, "QueryInformationJobObject error %lu\n", GetLastError());
|
||||
+ if (ret)
|
||||
+ {
|
||||
+ todo_wine_if(expected_count)
|
||||
+ ok_(__FILE__, line)(expected_count == pid_list->NumberOfAssignedProcesses,
|
||||
+ "Expected NumberOfAssignedProcesses to be %d (expected_count) is %ld\n",
|
||||
+ expected_count, pid_list->NumberOfAssignedProcesses);
|
||||
+ todo_wine_if(expected_count)
|
||||
+ ok_(__FILE__, line)(expected_count == pid_list->NumberOfProcessIdsInList,
|
||||
+ "Expected NumberOfProcessIdsInList to be %d (expected_count) is %ld\n",
|
||||
+ expected_count, pid_list->NumberOfProcessIdsInList);
|
||||
+
|
||||
+ va_start(valist, expected_count);
|
||||
+ for (n = 0; n < min(expected_count, pid_list->NumberOfProcessIdsInList); ++n)
|
||||
+ {
|
||||
+ pid = va_arg(valist, DWORD);
|
||||
+ ok_(__FILE__, line)(pid == pid_list->ProcessIdList[n],
|
||||
+ "Expected pid_list->ProcessIdList[%d] to be %lx is %Ix\n",
|
||||
+ n, pid, pid_list->ProcessIdList[n]);
|
||||
+ }
|
||||
+ va_end(valist);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#define test_accounting(job, total_proc, active_proc, terminated_proc) _test_accounting(__LINE__, job, total_proc, active_proc, terminated_proc)
|
||||
+static void _test_accounting(int line, HANDLE job, int total_proc, int active_proc, int terminated_proc)
|
||||
+{
|
||||
+ JOBOBJECT_BASIC_ACCOUNTING_INFORMATION basic_accounting;
|
||||
+ DWORD ret_len;
|
||||
+ BOOL ret;
|
||||
+
|
||||
+ memset(&basic_accounting, 0, sizeof(basic_accounting));
|
||||
+ ret = pQueryInformationJobObject(job, JobObjectBasicAccountingInformation, &basic_accounting, sizeof(basic_accounting), &ret_len);
|
||||
+ ok_(__FILE__, line)(ret, "QueryInformationJobObject error %lu\n", GetLastError());
|
||||
+ if (ret)
|
||||
+ {
|
||||
+ /* Not going to check process times or page faults */
|
||||
+
|
||||
+ todo_wine_if(total_proc)
|
||||
+ ok_(__FILE__, line)(total_proc == basic_accounting.TotalProcesses,
|
||||
+ "Expected basic_accounting.TotalProcesses to be %d (total_proc) is %ld\n",
|
||||
+ total_proc, basic_accounting.TotalProcesses);
|
||||
+ todo_wine_if(active_proc)
|
||||
+ ok_(__FILE__, line)(active_proc == basic_accounting.ActiveProcesses,
|
||||
+ "Expected basic_accounting.ActiveProcesses to be %d (active_proc) is %ld\n",
|
||||
+ active_proc, basic_accounting.ActiveProcesses);
|
||||
+ ok_(__FILE__, line)(terminated_proc == basic_accounting.TotalTerminatedProcesses,
|
||||
+ "Expected basic_accounting.TotalTerminatedProcesses to be %d (terminated_proc) is %ld\n",
|
||||
+ terminated_proc, basic_accounting.TotalTerminatedProcesses);
|
||||
+ }
|
||||
+}
|
||||
|
||||
static void test_IsProcessInJob(void)
|
||||
{
|
||||
@@ -2566,11 +2629,15 @@ static void test_IsProcessInJob(void)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %lu\n", GetLastError());
|
||||
ok(!out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job, 0);
|
||||
+ test_accounting(job, 0, 0, 0);
|
||||
|
||||
out = TRUE;
|
||||
ret = pIsProcessInJob(pi.hProcess, job2, &out);
|
||||
ok(ret, "IsProcessInJob error %lu\n", GetLastError());
|
||||
ok(!out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job2, 0);
|
||||
+ test_accounting(job2, 0, 0, 0);
|
||||
|
||||
ret = pAssignProcessToJobObject(job, pi.hProcess);
|
||||
ok(ret, "AssignProcessToJobObject error %lu\n", GetLastError());
|
||||
@@ -2579,11 +2646,15 @@ static void test_IsProcessInJob(void)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %lu\n", GetLastError());
|
||||
ok(out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job, 1, pi.dwProcessId);
|
||||
+ test_accounting(job, 1, 1, 0);
|
||||
|
||||
out = TRUE;
|
||||
ret = pIsProcessInJob(pi.hProcess, job2, &out);
|
||||
ok(ret, "IsProcessInJob error %lu\n", GetLastError());
|
||||
ok(!out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job2, 0);
|
||||
+ test_accounting(job2, 0, 0, 0);
|
||||
|
||||
out = FALSE;
|
||||
ret = pIsProcessInJob(pi.hProcess, NULL, &out);
|
||||
@@ -2597,6 +2668,8 @@ static void test_IsProcessInJob(void)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %lu\n", GetLastError());
|
||||
ok(out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job, 0);
|
||||
+ test_accounting(job, 1, 0, 0);
|
||||
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
@@ -2613,11 +2686,15 @@ static void test_TerminateJobObject(void)
|
||||
|
||||
job = pCreateJobObjectW(NULL, NULL);
|
||||
ok(job != NULL, "CreateJobObject error %lu\n", GetLastError());
|
||||
+ test_assigned_proc(job, 0);
|
||||
+ test_accounting(job, 0, 0, 0);
|
||||
|
||||
create_process("wait", &pi);
|
||||
|
||||
ret = pAssignProcessToJobObject(job, pi.hProcess);
|
||||
ok(ret, "AssignProcessToJobObject error %lu\n", GetLastError());
|
||||
+ test_assigned_proc(job, 1, pi.dwProcessId);
|
||||
+ test_accounting(job, 1, 1, 0);
|
||||
|
||||
ret = pTerminateJobObject(job, 123);
|
||||
ok(ret, "TerminateJobObject error %lu\n", GetLastError());
|
||||
@@ -2626,6 +2703,8 @@ static void test_TerminateJobObject(void)
|
||||
dwret = WaitForSingleObject(pi.hProcess, 1000);
|
||||
ok(dwret == WAIT_OBJECT_0, "WaitForSingleObject returned %lu\n", dwret);
|
||||
if (dwret == WAIT_TIMEOUT) TerminateProcess(pi.hProcess, 0);
|
||||
+ test_assigned_proc(job, 0);
|
||||
+ test_accounting(job, 1, 0, 0);
|
||||
|
||||
ret = GetExitCodeProcess(pi.hProcess, &dwret);
|
||||
ok(ret, "GetExitCodeProcess error %lu\n", GetLastError());
|
||||
@@ -2643,6 +2722,8 @@ static void test_TerminateJobObject(void)
|
||||
ret = pAssignProcessToJobObject(job, pi.hProcess);
|
||||
ok(!ret, "AssignProcessToJobObject unexpectedly succeeded\n");
|
||||
expect_eq_d(ERROR_ACCESS_DENIED, GetLastError());
|
||||
+ test_assigned_proc(job, 0);
|
||||
+ test_accounting(job, 1, 0, 0);
|
||||
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
@@ -2841,11 +2922,15 @@ static void test_KillOnJobClose(void)
|
||||
return;
|
||||
}
|
||||
ok(ret, "SetInformationJobObject error %lu\n", GetLastError());
|
||||
+ test_assigned_proc(job, 0);
|
||||
+ test_accounting(job, 0, 0, 0);
|
||||
|
||||
create_process("wait", &pi);
|
||||
|
||||
ret = pAssignProcessToJobObject(job, pi.hProcess);
|
||||
ok(ret, "AssignProcessToJobObject error %lu\n", GetLastError());
|
||||
+ test_assigned_proc(job, 1, pi.dwProcessId);
|
||||
+ test_accounting(job, 1, 1, 0);
|
||||
|
||||
CloseHandle(job);
|
||||
|
||||
@@ -2955,6 +3040,8 @@ static HANDLE test_AddSelfToJob(void)
|
||||
|
||||
ret = pAssignProcessToJobObject(job, GetCurrentProcess());
|
||||
ok(ret, "AssignProcessToJobObject error %lu\n", GetLastError());
|
||||
+ test_assigned_proc(job, 1, GetCurrentProcessId());
|
||||
+ test_accounting(job, 1, 1, 0);
|
||||
|
||||
return job;
|
||||
}
|
||||
@@ -2976,6 +3063,8 @@ static void test_jobInheritance(HANDLE job)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %lu\n", GetLastError());
|
||||
ok(out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job, 2, GetCurrentProcessId(), pi.dwProcessId);
|
||||
+ test_accounting(job, 2, 2, 0);
|
||||
|
||||
wait_and_close_child_process(&pi);
|
||||
}
|
||||
@@ -3009,6 +3098,8 @@ static void test_BreakawayOk(HANDLE parent_job)
|
||||
ret = CreateProcessA(NULL, buffer, NULL, NULL, FALSE, CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &si, &pi);
|
||||
ok(!ret, "CreateProcessA expected failure\n");
|
||||
expect_eq_d(ERROR_ACCESS_DENIED, GetLastError());
|
||||
+ test_assigned_proc(job, 1, GetCurrentProcessId());
|
||||
+ test_accounting(job, 2, 1, 0);
|
||||
|
||||
if (ret)
|
||||
{
|
||||
@@ -3048,6 +3139,8 @@ static void test_BreakawayOk(HANDLE parent_job)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %lu\n", GetLastError());
|
||||
ok(!out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job, 1, GetCurrentProcessId());
|
||||
+ test_accounting(job, 2, 1, 0);
|
||||
|
||||
ret = pIsProcessInJob(pi.hProcess, parent_job, &out);
|
||||
ok(ret, "IsProcessInJob error %lu\n", GetLastError());
|
||||
@@ -3065,6 +3158,8 @@ static void test_BreakawayOk(HANDLE parent_job)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %lu\n", GetLastError());
|
||||
ok(!out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job, 1, GetCurrentProcessId());
|
||||
+ test_accounting(job, 2, 1, 0);
|
||||
|
||||
wait_and_close_child_process(&pi);
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From d4f9fa0c33b6a414fe3b6c604f3039e98d416263 Mon Sep 17 00:00:00 2001
|
||||
From a808aeb6fbb9c7cace366a262715607379ca1b58 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Tue, 9 Jul 2019 14:13:28 +1000
|
||||
Subject: [PATCH] user32: Do not enumerate the registry in
|
||||
@@ -13,10 +13,10 @@ not the complete list from the registry.
|
||||
3 files changed, 36 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/dlls/user32/input.c b/dlls/user32/input.c
|
||||
index 1fff29c7f87..9bf65573d87 100644
|
||||
index 00337aa72b7..375ca3abee3 100644
|
||||
--- a/dlls/user32/input.c
|
||||
+++ b/dlls/user32/input.c
|
||||
@@ -486,7 +486,6 @@ BOOL WINAPI UnloadKeyboardLayout( HKL layout )
|
||||
@@ -497,7 +497,6 @@ BOOL WINAPI UnloadKeyboardLayout( HKL layout )
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -25,11 +25,11 @@ index 1fff29c7f87..9bf65573d87 100644
|
||||
{
|
||||
SendMessageTimeoutW(handle, WM_DEVICECHANGE, flags, (LPARAM)header, SMTO_ABORTIFHUNG, 2000, NULL);
|
||||
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
|
||||
index 350baff600d..27066fc46f4 100644
|
||||
index b92e59396ac..364afc08b26 100644
|
||||
--- a/dlls/user32/tests/input.c
|
||||
+++ b/dlls/user32/tests/input.c
|
||||
@@ -5542,6 +5542,40 @@ static void test_keyboard_ll_hook_blocking(void)
|
||||
ok_ret( 1, DestroyWindow( hwnd ) );
|
||||
@@ -5637,6 +5637,40 @@ static void test_LoadKeyboardLayoutEx(void)
|
||||
ok_eq( old_hkl, GetKeyboardLayout( 0 ), HKL, "%p" );
|
||||
}
|
||||
|
||||
+static void test_GetKeyboardLayoutList(void)
|
||||
@@ -69,7 +69,7 @@ index 350baff600d..27066fc46f4 100644
|
||||
/* run the tests in a separate desktop to avoid interaction with other
|
||||
* tests, current desktop state, or user actions. */
|
||||
static void test_input_desktop( char **argv )
|
||||
@@ -5633,6 +5667,7 @@ START_TEST(input)
|
||||
@@ -5730,6 +5764,7 @@ START_TEST(input)
|
||||
test_GetKeyState();
|
||||
test_OemKeyScan();
|
||||
test_rawinput(argv[0]);
|
||||
@@ -78,10 +78,10 @@ index 350baff600d..27066fc46f4 100644
|
||||
|
||||
if(pGetMouseMovePointsEx)
|
||||
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
|
||||
index ef8d564c264..9a7c58f359d 100644
|
||||
index 1886ff979d7..1834ae40441 100644
|
||||
--- a/dlls/win32u/input.c
|
||||
+++ b/dlls/win32u/input.c
|
||||
@@ -1267,11 +1267,7 @@ HKL WINAPI NtUserActivateKeyboardLayout( HKL layout, UINT flags )
|
||||
@@ -1266,11 +1266,7 @@ HKL WINAPI NtUserActivateKeyboardLayout( HKL layout, UINT flags )
|
||||
*/
|
||||
UINT WINAPI NtUserGetKeyboardLayoutList( INT size, HKL *layouts )
|
||||
{
|
||||
@@ -94,7 +94,7 @@ index ef8d564c264..9a7c58f359d 100644
|
||||
HKL layout;
|
||||
|
||||
TRACE_(keyboard)( "size %d, layouts %p.\n", size, layouts );
|
||||
@@ -1285,33 +1281,6 @@ UINT WINAPI NtUserGetKeyboardLayoutList( INT size, HKL *layouts )
|
||||
@@ -1284,33 +1280,6 @@ UINT WINAPI NtUserGetKeyboardLayoutList( INT size, HKL *layouts )
|
||||
if (size && layouts)
|
||||
{
|
||||
layouts[count - 1] = layout;
|
||||
|
@@ -1,20 +1,20 @@
|
||||
From aba54e8536ab5423e8293452db6462dcca0bea0b Mon Sep 17 00:00:00 2001
|
||||
From d683f0129b0df79227b23133874960284b76baa8 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 11 Sep 2020 17:55:59 +1000
|
||||
Subject: [PATCH] include: Remove interfaces already define in msxml6.idl
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/msxml3/factory.c | 1 +
|
||||
dlls/msxml3/factory.c | 3 +-
|
||||
dlls/msxml3/tests/saxreader.c | 1 +
|
||||
dlls/msxml3/tests/schema.c | 5 ++
|
||||
dlls/msxml3/uuid.c | 11 ++++
|
||||
include/msxml2.idl | 109 ----------------------------------
|
||||
dlls/msxml3/uuid.c | 10 ++++
|
||||
include/msxml2.idl | 101 ----------------------------------
|
||||
include/msxml6.idl | 24 ++++----
|
||||
6 files changed, 30 insertions(+), 121 deletions(-)
|
||||
6 files changed, 29 insertions(+), 115 deletions(-)
|
||||
|
||||
diff --git a/dlls/msxml3/factory.c b/dlls/msxml3/factory.c
|
||||
index c2d3cd30c60..243ee379712 100644
|
||||
index e91666c6d79..e35839db2a3 100644
|
||||
--- a/dlls/msxml3/factory.c
|
||||
+++ b/dlls/msxml3/factory.c
|
||||
@@ -31,6 +31,7 @@
|
||||
@@ -25,6 +25,15 @@ index c2d3cd30c60..243ee379712 100644
|
||||
#include "xmlparser.h"
|
||||
|
||||
/* undef the #define in msxml2 so that we can access the v.2 version
|
||||
@@ -43,8 +44,6 @@
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(msxml);
|
||||
|
||||
-extern GUID CLSID_XMLSchemaCache60;
|
||||
-
|
||||
typedef HRESULT (*ClassFactoryCreateInstanceFunc)(void**);
|
||||
typedef HRESULT (*DOMFactoryCreateInstanceFunc)(MSXML_VERSION, void**);
|
||||
|
||||
diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c
|
||||
index e123d4eba5a..48cfa8f5593 100644
|
||||
--- a/dlls/msxml3/tests/saxreader.c
|
||||
@@ -38,7 +47,7 @@ index e123d4eba5a..48cfa8f5593 100644
|
||||
#include "ocidl.h"
|
||||
#include "dispex.h"
|
||||
diff --git a/dlls/msxml3/tests/schema.c b/dlls/msxml3/tests/schema.c
|
||||
index efc3a8e56e3..a4fe29aca02 100644
|
||||
index 50e5a743b82..c83e72e136a 100644
|
||||
--- a/dlls/msxml3/tests/schema.c
|
||||
+++ b/dlls/msxml3/tests/schema.c
|
||||
@@ -32,6 +32,11 @@
|
||||
@@ -52,12 +61,12 @@ index efc3a8e56e3..a4fe29aca02 100644
|
||||
+
|
||||
#include "wine/test.h"
|
||||
|
||||
#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
|
||||
static const WCHAR xdr_schema1_uri[] = L"x-schema:test1.xdr";
|
||||
diff --git a/dlls/msxml3/uuid.c b/dlls/msxml3/uuid.c
|
||||
index 4abbe5e4763..333d4f3d3c7 100644
|
||||
index 7e50b439146..7214d23c5dc 100644
|
||||
--- a/dlls/msxml3/uuid.c
|
||||
+++ b/dlls/msxml3/uuid.c
|
||||
@@ -41,6 +41,17 @@
|
||||
@@ -41,6 +41,16 @@
|
||||
#include "initguid.h"
|
||||
#include "msxml2.h"
|
||||
|
||||
@@ -69,14 +78,13 @@ index 4abbe5e4763..333d4f3d3c7 100644
|
||||
+DEFINE_GUID(CLSID_SAXXMLReader60, 0x88d96a0c, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
+DEFINE_GUID(CLSID_ServerXMLHTTP60, 0x88d96a0b, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
+DEFINE_GUID(CLSID_XMLHTTP60, 0x88d96a0a, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
+DEFINE_GUID(CLSID_XMLSchemaCache60, 0x88d96a07, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
+DEFINE_GUID(CLSID_XSLTemplate60, 0x88d96a08, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
+
|
||||
/*
|
||||
* Note that because of a #define in msxml2.h, we end up initializing
|
||||
* CLSID_DOMDocument2 to be the v.3 version independent DOMDocument
|
||||
diff --git a/include/msxml2.idl b/include/msxml2.idl
|
||||
index ede4113ecbf..85bb6a5b0cb 100644
|
||||
index 848bc13952a..85bb6a5b0cb 100644
|
||||
--- a/include/msxml2.idl
|
||||
+++ b/include/msxml2.idl
|
||||
@@ -1612,15 +1612,6 @@ coclass FreeThreadedDOMDocument40
|
||||
@@ -125,22 +133,7 @@ index ede4113ecbf..85bb6a5b0cb 100644
|
||||
[
|
||||
helpstring("Server XML HTTP"),
|
||||
progid("Msxml2.ServerXMLHTTP"),
|
||||
@@ -1750,14 +1725,6 @@ coclass XMLSchemaCache40
|
||||
[default] interface IXMLDOMSchemaCollection2;
|
||||
}
|
||||
|
||||
-[
|
||||
- uuid(88d96a07-f192-11d4-a65f-0040963251e5)
|
||||
-]
|
||||
-coclass XMLSchemaCache60
|
||||
-{
|
||||
- [default] interface IXMLDOMSchemaCollection2;
|
||||
-}
|
||||
-
|
||||
[
|
||||
helpstring("XML Schema Cache"),
|
||||
progid("Msxml2.XMLSchemaCache"),
|
||||
@@ -1798,14 +1765,6 @@ coclass XSLTemplate40
|
||||
@@ -1790,14 +1765,6 @@ coclass XSLTemplate40
|
||||
[default] interface IXSLTemplate;
|
||||
}
|
||||
|
||||
@@ -155,7 +148,7 @@ index ede4113ecbf..85bb6a5b0cb 100644
|
||||
[
|
||||
helpstring("XSL Template"),
|
||||
progid("Msxml2.XSLTemplate"),
|
||||
@@ -3297,15 +3256,6 @@ coclass SAXXMLReader40
|
||||
@@ -3289,15 +3256,6 @@ coclass SAXXMLReader40
|
||||
interface ISAXXMLReader;
|
||||
}
|
||||
|
||||
@@ -171,7 +164,7 @@ index ede4113ecbf..85bb6a5b0cb 100644
|
||||
[
|
||||
helpstring("SAX XML Reader"),
|
||||
progid("Msxml2.SAXXMLReader"),
|
||||
@@ -3380,26 +3330,6 @@ coclass MXHTMLWriter40
|
||||
@@ -3372,26 +3330,6 @@ coclass MXHTMLWriter40
|
||||
interface IVBSAXLexicalHandler;
|
||||
}
|
||||
|
||||
@@ -198,7 +191,7 @@ index ede4113ecbf..85bb6a5b0cb 100644
|
||||
[
|
||||
helpstring("MXXMLWriter 3.0"),
|
||||
progid("Msxml2.MXXMLWriter.3.0"),
|
||||
@@ -3444,26 +3374,6 @@ coclass MXXMLWriter40
|
||||
@@ -3436,26 +3374,6 @@ coclass MXXMLWriter40
|
||||
interface IVBSAXLexicalHandler;
|
||||
}
|
||||
|
||||
@@ -225,7 +218,7 @@ index ede4113ecbf..85bb6a5b0cb 100644
|
||||
[
|
||||
helpstring("MXXMLWriter"),
|
||||
progid("Msxml2.MXXMLWriter"),
|
||||
@@ -3506,15 +3416,6 @@ coclass MXNamespaceManager40
|
||||
@@ -3498,15 +3416,6 @@ coclass MXNamespaceManager40
|
||||
interface IMXNamespaceManager;
|
||||
}
|
||||
|
||||
@@ -241,7 +234,7 @@ index ede4113ecbf..85bb6a5b0cb 100644
|
||||
[
|
||||
helpstring("SAXAttributes 3.0"),
|
||||
progid("Msxml2.SAXAttributes.3.0"),
|
||||
@@ -3539,16 +3440,6 @@ coclass SAXAttributes40
|
||||
@@ -3531,16 +3440,6 @@ coclass SAXAttributes40
|
||||
interface ISAXAttributes;
|
||||
}
|
||||
|
||||
@@ -301,5 +294,5 @@ index d4a5c490243..7396826a1f6 100644
|
||||
helpstring("XML HTTP 6.0"),
|
||||
progid("Msxml2.XMLHTTP.6.0"),
|
||||
--
|
||||
2.41.0
|
||||
2.43.0
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From b26ba4d86df312d28bc2422ed1e544b058e4aacd Mon Sep 17 00:00:00 2001
|
||||
From c4694f8dfffa56648976c1a05bb4788262a8677b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Tue, 8 Sep 2020 18:43:52 +0200
|
||||
Subject: [PATCH] msxml3: Implement FreeThreadedXMLHTTP60.
|
||||
@@ -27,10 +27,10 @@ index 7e59a223143..5044c4e2c79 100644
|
||||
|
||||
SOURCES = \
|
||||
diff --git a/dlls/msxml3/factory.c b/dlls/msxml3/factory.c
|
||||
index 243ee379712..323c7b49848 100644
|
||||
index 218ba87c4a8..ed14bd63a87 100644
|
||||
--- a/dlls/msxml3/factory.c
|
||||
+++ b/dlls/msxml3/factory.c
|
||||
@@ -279,6 +279,7 @@ static HRESULT DOMClassFactory_Create(const GUID *clsid, REFIID riid, void **ppv
|
||||
@@ -281,6 +281,7 @@ static HRESULT DOMClassFactory_Create(const GUID *clsid, REFIID riid, void **ppv
|
||||
|
||||
static ClassFactory xmldoccf = { { &ClassFactoryVtbl }, XMLDocument_create };
|
||||
static ClassFactory httpreqcf = { { &ClassFactoryVtbl }, XMLHTTPRequest_create };
|
||||
@@ -38,7 +38,7 @@ index 243ee379712..323c7b49848 100644
|
||||
static ClassFactory serverhttp = { { &ClassFactoryVtbl }, ServerXMLHTTP_create };
|
||||
static ClassFactory xsltemplatecf = { { &ClassFactoryVtbl }, XSLTemplate_create };
|
||||
static ClassFactory mxnsmanagercf = { {&ClassFactoryVtbl }, MXNamespaceManager_create };
|
||||
@@ -340,6 +341,10 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
|
||||
@@ -342,6 +343,10 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
|
||||
{
|
||||
cf = &httpreqcf.IClassFactory_iface;
|
||||
}
|
||||
@@ -50,7 +50,7 @@ index 243ee379712..323c7b49848 100644
|
||||
IsEqualCLSID( rclsid, &CLSID_ServerXMLHTTP30 ) ||
|
||||
IsEqualCLSID( rclsid, &CLSID_ServerXMLHTTP40 ) ||
|
||||
diff --git a/dlls/msxml3/httprequest.c b/dlls/msxml3/httprequest.c
|
||||
index 459466a1234..d059c20ae81 100644
|
||||
index 6e4ab4c6519..412958a2a40 100644
|
||||
--- a/dlls/msxml3/httprequest.c
|
||||
+++ b/dlls/msxml3/httprequest.c
|
||||
@@ -37,10 +37,12 @@
|
||||
@@ -67,7 +67,7 @@ index 459466a1234..d059c20ae81 100644
|
||||
|
||||
static const WCHAR colspaceW[] = {':',' ',0};
|
||||
static const WCHAR crlfW[] = {'\r','\n',0};
|
||||
@@ -2057,6 +2059,468 @@ static const struct IServerXMLHTTPRequestVtbl ServerXMLHTTPRequestVtbl =
|
||||
@@ -2054,6 +2056,468 @@ static const struct IServerXMLHTTPRequestVtbl ServerXMLHTTPRequestVtbl =
|
||||
ServerXMLHTTPRequest_setOption
|
||||
};
|
||||
|
||||
@@ -536,7 +536,7 @@ index 459466a1234..d059c20ae81 100644
|
||||
static void init_httprequest(httprequest *req)
|
||||
{
|
||||
req->IXMLHTTPRequest_iface.lpVtbl = &XMLHTTPRequestVtbl;
|
||||
@@ -2106,6 +2570,35 @@ HRESULT XMLHTTPRequest_create(void **obj)
|
||||
@@ -2103,6 +2567,35 @@ HRESULT XMLHTTPRequest_create(void **obj)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
@@ -573,10 +573,10 @@ index 459466a1234..d059c20ae81 100644
|
||||
{
|
||||
serverhttp *req;
|
||||
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
|
||||
index 449a86df5e8..3e5181fa6d8 100644
|
||||
index 54f54995c76..6188414c5ce 100644
|
||||
--- a/dlls/msxml3/msxml_private.h
|
||||
+++ b/dlls/msxml3/msxml_private.h
|
||||
@@ -344,6 +344,7 @@ extern HRESULT XMLDocument_create(void**);
|
||||
@@ -343,6 +343,7 @@ extern HRESULT XMLDocument_create(void**);
|
||||
extern HRESULT SAXXMLReader_create(MSXML_VERSION, void**);
|
||||
extern HRESULT SAXAttributes_create(MSXML_VERSION, void**);
|
||||
extern HRESULT XMLHTTPRequest_create(void **);
|
||||
@@ -1017,7 +1017,7 @@ index bccfbaf582a..23d7680d196 100644
|
||||
CoUninitialize();
|
||||
}
|
||||
diff --git a/dlls/msxml3/tests/schema.c b/dlls/msxml3/tests/schema.c
|
||||
index a4fe29aca02..fd244ee2e1c 100644
|
||||
index c83e72e136a..c896f1e6a04 100644
|
||||
--- a/dlls/msxml3/tests/schema.c
|
||||
+++ b/dlls/msxml3/tests/schema.c
|
||||
@@ -32,10 +32,16 @@
|
||||
@@ -1038,7 +1038,7 @@ index a4fe29aca02..fd244ee2e1c 100644
|
||||
#include "wine/test.h"
|
||||
|
||||
diff --git a/dlls/msxml3/uuid.c b/dlls/msxml3/uuid.c
|
||||
index 333d4f3d3c7..1b4f0452c5f 100644
|
||||
index 7214d23c5dc..320a7e04fa3 100644
|
||||
--- a/dlls/msxml3/uuid.c
|
||||
+++ b/dlls/msxml3/uuid.c
|
||||
@@ -43,6 +43,7 @@
|
||||
@@ -1049,9 +1049,9 @@ index 333d4f3d3c7..1b4f0452c5f 100644
|
||||
DEFINE_GUID(CLSID_MXNamespaceManager60, 0x88d96a11, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
DEFINE_GUID(CLSID_MXXMLWriter60, 0x88d96a0f, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
DEFINE_GUID(CLSID_SAXAttributes60, 0x88d96a0e, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
@@ -51,6 +52,10 @@ DEFINE_GUID(CLSID_ServerXMLHTTP60, 0x88d96a0b, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0
|
||||
@@ -50,6 +51,10 @@ DEFINE_GUID(CLSID_SAXXMLReader60, 0x88d96a0c, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x
|
||||
DEFINE_GUID(CLSID_ServerXMLHTTP60, 0x88d96a0b, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
DEFINE_GUID(CLSID_XMLHTTP60, 0x88d96a0a, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
DEFINE_GUID(CLSID_XMLSchemaCache60, 0x88d96a07, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
DEFINE_GUID(CLSID_XSLTemplate60, 0x88d96a08, 0xf192, 0x11d4, 0xa6,0x5f, 0x00,0x40,0x96,0x32,0x51,0xe5);
|
||||
+DEFINE_GUID(IID_IXMLHTTPRequest2, 0xe5d37dc0, 0x552a, 0x4d52, 0x9c,0xc0, 0xa1,0x4d,0x54,0x6f,0xbd,0x04);
|
||||
+DEFINE_GUID(IID_IXMLHTTPRequest3, 0xa1c9feee, 0x0617, 0x4f23, 0x9d,0x58, 0x89,0x61,0xea,0x43,0x56,0x7c);
|
||||
@@ -1101,5 +1101,5 @@ index 7396826a1f6..b2d8bd3b337 100644
|
||||
helpstring("XML DOM Document 6.0"),
|
||||
progid("Msxml2.DOMDocument.6.0"),
|
||||
--
|
||||
2.42.0
|
||||
2.43.0
|
||||
|
||||
|
@@ -1,62 +0,0 @@
|
||||
From 9da818bd948256572640e17766a14a72e58ce100 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Wed, 25 Feb 2015 22:45:42 +0100
|
||||
Subject: [PATCH] ntdll: Fix race-condition when threads are killed during
|
||||
shutdown.
|
||||
|
||||
When exit_thread is executed, nb_threads is decremented before the thread is
|
||||
fully shutdown. When another thread runs ExitProcess() this will cause a SIGQUIT
|
||||
signal to all threads, effectively decrementing nb_threads twice. The process
|
||||
will terminate with a wrong exitcode then because the refcount reaches zero too
|
||||
early.
|
||||
|
||||
Currently Wine has no locking protection of LdrShutdownProcess(), so it can
|
||||
only be executed safely when all other threads have terminated before. Most
|
||||
likely there are more Wine bugs in this area, but the attached patch should
|
||||
fix the most critical one (messed up refcounting of threads) for now.
|
||||
---
|
||||
dlls/ntdll/thread.c | 2 +-
|
||||
dlls/ntdll/unix/thread.c | 7 +++++++
|
||||
2 files changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
|
||||
index d5e34cae3b1..83237b3569a 100644
|
||||
--- a/dlls/ntdll/thread.c
|
||||
+++ b/dlls/ntdll/thread.c
|
||||
@@ -295,7 +295,7 @@ void WINAPI RtlExitUserThread( ULONG status )
|
||||
SERVER_END_REQ;
|
||||
}
|
||||
|
||||
- if (InterlockedDecrement( &nb_threads ) <= 0)
|
||||
+ if (InterlockedCompareExchange( &nb_threads, 0, 0 ) <= 0)
|
||||
{
|
||||
LdrShutdownProcess();
|
||||
unix_funcs->exit_process( status );
|
||||
diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c
|
||||
index 205a1312e92..563712bd59e 100644
|
||||
--- a/dlls/ntdll/unix/thread.c
|
||||
+++ b/dlls/ntdll/unix/thread.c
|
||||
@@ -219,6 +219,7 @@ void CDECL abort_thread( int status )
|
||||
void CDECL exit_thread( int status )
|
||||
{
|
||||
static void *prev_teb;
|
||||
+ sigset_t sigset;
|
||||
TEB *teb;
|
||||
|
||||
pthread_sigmask( SIG_BLOCK, &server_block_set, NULL );
|
||||
@@ -233,6 +234,12 @@ void CDECL exit_thread( int status )
|
||||
virtual_free_teb( teb );
|
||||
}
|
||||
}
|
||||
+
|
||||
+ sigemptyset( &sigset );
|
||||
+ sigaddset( &sigset, SIGQUIT );
|
||||
+ pthread_sigmask( SIG_BLOCK, &sigset, NULL );
|
||||
+ if (!InterlockedDecrement( nb_threads )) _exit( status );
|
||||
+
|
||||
signal_exit_thread( status, pthread_exit_wrapper );
|
||||
}
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@@ -1,3 +0,0 @@
|
||||
Fixes: Fix race-condition when threads are killed during shutdown
|
||||
# Needs careful review to determine if this is still needed. Deferring.
|
||||
Disabled: true
|
@@ -1,4 +1,5 @@
|
||||
Depends: server-Stored_ACLs
|
||||
Fixes: Support for inherited file ACLs
|
||||
# Originally written for Silverlight.
|
||||
#Badly broken by bb00942671.
|
||||
Disabled: true
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 7685969c358fbfb68d623d6eb4fc80231f07b604 Mon Sep 17 00:00:00 2001
|
||||
From 898c8d269bdcda704a2a923349d2a1967a1f23eb Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sun, 15 Mar 2015 01:05:48 +0100
|
||||
Subject: [PATCH] server: Fix handling of GetMessage after previous PeekMessage
|
||||
@@ -15,10 +15,10 @@ Changes in v3:
|
||||
2 files changed, 65 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
|
||||
index 0059afcbac7..cf01e156458 100644
|
||||
index 1169d82271c..bee49c302cb 100644
|
||||
--- a/dlls/user32/tests/msg.c
|
||||
+++ b/dlls/user32/tests/msg.c
|
||||
@@ -14113,13 +14113,10 @@ static void test_PeekMessage3(void)
|
||||
@@ -14329,13 +14329,10 @@ static void test_PeekMessage3(void)
|
||||
ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
ret = PeekMessageA(&msg, hwnd, 0, 0, PM_NOREMOVE);
|
||||
@@ -32,7 +32,7 @@ index 0059afcbac7..cf01e156458 100644
|
||||
ok(ret && msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
ret = PeekMessageA(&msg, hwnd, 0, 0, 0);
|
||||
ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
@@ -14129,10 +14126,8 @@ static void test_PeekMessage3(void)
|
||||
@@ -14345,10 +14342,8 @@ static void test_PeekMessage3(void)
|
||||
ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
ret = PeekMessageA(&msg, hwnd, 0, 0, PM_REMOVE);
|
||||
@@ -43,7 +43,7 @@ index 0059afcbac7..cf01e156458 100644
|
||||
ok(ret && msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
ret = PeekMessageA(&msg, hwnd, 0, 0, 0);
|
||||
ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
@@ -14144,10 +14139,11 @@ static void test_PeekMessage3(void)
|
||||
@@ -14360,10 +14355,11 @@ static void test_PeekMessage3(void)
|
||||
ok(msg.message == WM_TIMER, "msg.message = %u instead of WM_TIMER\n", msg.message);
|
||||
PostMessageA(hwnd, WM_USER, 0, 0);
|
||||
ret = GetMessageA(&msg, hwnd, 0, 0);
|
||||
@@ -57,7 +57,7 @@ index 0059afcbac7..cf01e156458 100644
|
||||
ok(ret && msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
ret = PeekMessageA(&msg, hwnd, 0, 0, 0);
|
||||
ok(!ret, "expected PeekMessage to return FALSE, got %u\n", ret);
|
||||
@@ -14175,14 +14171,32 @@ static void test_PeekMessage3(void)
|
||||
@@ -14391,14 +14387,32 @@ static void test_PeekMessage3(void)
|
||||
ret = GetMessageA(&msg, hwnd, 0, 0);
|
||||
ok(ret && msg.message == WM_USER, "msg.message = %u instead of WM_USER\n", msg.message);
|
||||
ret = GetMessageA(&msg, hwnd, 0, 0);
|
||||
@@ -93,10 +93,10 @@ index 0059afcbac7..cf01e156458 100644
|
||||
* because both messages are in the same queue. */
|
||||
|
||||
diff --git a/server/queue.c b/server/queue.c
|
||||
index 9007438e082..1d7a31a318a 100644
|
||||
index ed099b3b989..35926b701af 100644
|
||||
--- a/server/queue.c
|
||||
+++ b/server/queue.c
|
||||
@@ -142,6 +142,7 @@ struct msg_queue
|
||||
@@ -145,6 +145,7 @@ struct msg_queue
|
||||
struct hook_table *hooks; /* hook table */
|
||||
timeout_t last_get_msg; /* time of last get message call */
|
||||
int keystate_lock; /* owns an input keystate lock */
|
||||
@@ -104,7 +104,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
};
|
||||
|
||||
struct hotkey
|
||||
@@ -310,6 +311,7 @@ static struct msg_queue *create_msg_queue( struct thread *thread, struct thread_
|
||||
@@ -313,6 +314,7 @@ static struct msg_queue *create_msg_queue( struct thread *thread, struct thread_
|
||||
queue->hooks = NULL;
|
||||
queue->last_get_msg = current_time;
|
||||
queue->keystate_lock = 0;
|
||||
@@ -112,7 +112,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
list_init( &queue->send_result );
|
||||
list_init( &queue->callback_result );
|
||||
list_init( &queue->pending_timers );
|
||||
@@ -643,13 +645,21 @@ static inline struct msg_queue *get_current_queue(void)
|
||||
@@ -656,13 +658,21 @@ static inline struct msg_queue *get_current_queue(void)
|
||||
}
|
||||
|
||||
/* get a (pseudo-)unique id to tag hardware messages */
|
||||
@@ -135,7 +135,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
/* try to merge a WM_MOUSEMOVE message with the last in the list; return 1 if successful */
|
||||
static int merge_mousemove( struct thread_input *input, const struct message *msg )
|
||||
{
|
||||
@@ -960,7 +970,7 @@ static int match_window( user_handle_t win, user_handle_t msg_win )
|
||||
@@ -973,7 +983,7 @@ static int match_window( user_handle_t win, user_handle_t msg_win )
|
||||
}
|
||||
|
||||
/* retrieve a posted message */
|
||||
@@ -144,7 +144,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
unsigned int first, unsigned int last, unsigned int flags,
|
||||
struct get_message_reply *reply )
|
||||
{
|
||||
@@ -971,6 +981,7 @@ static int get_posted_message( struct msg_queue *queue, user_handle_t win,
|
||||
@@ -984,6 +994,7 @@ static int get_posted_message( struct msg_queue *queue, user_handle_t win,
|
||||
{
|
||||
if (!match_window( win, msg->win )) continue;
|
||||
if (!check_msg_filter( msg->msg, first, last )) continue;
|
||||
@@ -152,7 +152,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
goto found; /* found one */
|
||||
}
|
||||
return 0;
|
||||
@@ -1585,6 +1596,7 @@ found:
|
||||
@@ -1598,6 +1609,7 @@ found:
|
||||
msg->msg = WM_HOTKEY;
|
||||
msg->wparam = hotkey->id;
|
||||
msg->lparam = ((hotkey->vkey & 0xffff) << 16) | modifiers;
|
||||
@@ -160,7 +160,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
|
||||
free( msg->data );
|
||||
msg->data = NULL;
|
||||
@@ -2276,7 +2288,7 @@ static int get_hardware_message( struct thread *thread, unsigned int hw_id, user
|
||||
@@ -2503,7 +2515,7 @@ static int get_hardware_message( struct thread *thread, unsigned int hw_id, user
|
||||
}
|
||||
|
||||
/* now we can return it */
|
||||
@@ -169,7 +169,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
reply->type = MSG_HARDWARE;
|
||||
reply->win = win;
|
||||
reply->msg = msg_code;
|
||||
@@ -2382,6 +2394,7 @@ void post_message( user_handle_t win, unsigned int message, lparam_t wparam, lpa
|
||||
@@ -2610,6 +2622,7 @@ void post_message( user_handle_t win, unsigned int message, lparam_t wparam, lpa
|
||||
msg->result = NULL;
|
||||
msg->data = NULL;
|
||||
msg->data_size = 0;
|
||||
@@ -177,7 +177,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
|
||||
get_message_defaults( thread->queue, &msg->x, &msg->y, &msg->time );
|
||||
|
||||
@@ -2626,6 +2639,7 @@ DECL_HANDLER(send_message)
|
||||
@@ -2896,6 +2909,7 @@ DECL_HANDLER(send_message)
|
||||
set_queue_bits( recv_queue, QS_SENDMESSAGE );
|
||||
break;
|
||||
case MSG_POSTED:
|
||||
@@ -185,7 +185,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
list_add_tail( &recv_queue->msg_list[POST_MESSAGE], &msg->entry );
|
||||
set_queue_bits( recv_queue, QS_POSTMESSAGE|QS_ALLPOSTMESSAGE );
|
||||
if (msg->msg == WM_HOTKEY)
|
||||
@@ -2744,12 +2758,12 @@ DECL_HANDLER(get_message)
|
||||
@@ -3022,12 +3036,12 @@ DECL_HANDLER(get_message)
|
||||
|
||||
/* then check for posted messages */
|
||||
if ((filter & QS_POSTMESSAGE) &&
|
||||
@@ -200,16 +200,16 @@ index 9007438e082..1d7a31a318a 100644
|
||||
return;
|
||||
|
||||
/* only check for quit messages if not posted messages pending */
|
||||
@@ -2760,7 +2774,7 @@ DECL_HANDLER(get_message)
|
||||
@@ -3038,7 +3052,7 @@ DECL_HANDLER(get_message)
|
||||
if ((filter & QS_INPUT) &&
|
||||
filter_contains_hw_range( req->get_first, req->get_last ) &&
|
||||
get_hardware_message( current, req->hw_id, get_win, req->get_first, req->get_last, req->flags, reply ))
|
||||
- return;
|
||||
+ goto found_msg;
|
||||
|
||||
/* check for any internal driver message */
|
||||
if (get_hardware_message( current, req->hw_id, get_win, WM_WINE_FIRST_DRIVER_MSG,
|
||||
@@ -2778,7 +2792,7 @@ DECL_HANDLER(get_message)
|
||||
/* now check for WM_PAINT */
|
||||
if ((filter & QS_PAINT) &&
|
||||
@@ -3051,7 +3065,7 @@ DECL_HANDLER(get_message)
|
||||
reply->wparam = 0;
|
||||
reply->lparam = 0;
|
||||
get_message_defaults( queue, &reply->x, &reply->y, &reply->time );
|
||||
@@ -218,7 +218,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
}
|
||||
|
||||
/* now check for timer */
|
||||
@@ -2794,13 +2808,30 @@ DECL_HANDLER(get_message)
|
||||
@@ -3067,13 +3081,30 @@ DECL_HANDLER(get_message)
|
||||
get_message_defaults( queue, &reply->x, &reply->y, &reply->time );
|
||||
if (!(req->flags & PM_NOYIELD) && current->process->idle_event)
|
||||
set_event( current->process->idle_event );
|
||||
@@ -250,7 +250,7 @@ index 9007438e082..1d7a31a318a 100644
|
||||
}
|
||||
|
||||
|
||||
@@ -2818,7 +2849,10 @@ DECL_HANDLER(reply_message)
|
||||
@@ -3091,7 +3122,10 @@ DECL_HANDLER(reply_message)
|
||||
DECL_HANDLER(accept_hardware_message)
|
||||
{
|
||||
if (current->queue)
|
||||
|
@@ -1,7 +1,6 @@
|
||||
# Bugs 37419 and 29582 track applications which want a faster
|
||||
# GetForegroundWindow(). Unfortunately, that patch is disabled, and I can't
|
||||
# find record of applications which want the other functions here to be faster.
|
||||
Depends: ntdll-Threading
|
||||
Depends: server-PeekMessage
|
||||
Depends: server-Signal_Thread
|
||||
Depends: ntdll-ext4-case-folder
|
||||
|
@@ -1,2 +1,3 @@
|
||||
Depends: server-File_Permissions
|
||||
Fixes: [33576] Support for stored file ACLs
|
||||
# Originally written for Silverlight.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 7b8a67910d0a0f962e505ab73be75789432807ae Mon Sep 17 00:00:00 2001
|
||||
From 72e0335ca16cd47b520db1fec02b5961d6da8da7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Thu, 26 Feb 2015 23:21:26 +0100
|
||||
Subject: [PATCH] shell32: Pass FILE_INFORMATION into SHNotify* functions.
|
||||
@@ -9,7 +9,7 @@ Preparation of the progressbar work. Based on a patch by Huw Campbell.
|
||||
1 file changed, 98 insertions(+), 103 deletions(-)
|
||||
|
||||
diff --git a/dlls/shell32/shlfileop.c b/dlls/shell32/shlfileop.c
|
||||
index 4e40e9dd71b..a64cc0d7f8d 100644
|
||||
index 40d2c1d8a3c..07ab3f805aa 100644
|
||||
--- a/dlls/shell32/shlfileop.c
|
||||
+++ b/dlls/shell32/shlfileop.c
|
||||
@@ -55,16 +55,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||
@@ -399,7 +399,7 @@ index 4e40e9dd71b..a64cc0d7f8d 100644
|
||||
{
|
||||
DWORD i;
|
||||
INT mismatched = 0;
|
||||
@@ -1403,14 +1400,12 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
@@ -1404,14 +1401,12 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
if (!flTo->dwNumFiles)
|
||||
return ERROR_FILE_NOT_FOUND;
|
||||
|
||||
@@ -416,16 +416,16 @@ index 4e40e9dd71b..a64cc0d7f8d 100644
|
||||
flFrom->dwNumFiles > flTo->dwNumFiles)
|
||||
{
|
||||
return ERROR_CANCELLED;
|
||||
@@ -1423,7 +1418,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
return ret;
|
||||
}
|
||||
@@ -1421,7 +1416,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
if (ret && ret != ERROR_ALREADY_EXISTS)
|
||||
return ret;
|
||||
|
||||
- if (lpFileOp->fFlags & FOF_MULTIDESTFILES)
|
||||
+ if (multidest)
|
||||
mismatched = flFrom->dwNumFiles - flTo->dwNumFiles;
|
||||
|
||||
fileDest = &flTo->feFiles[0];
|
||||
@@ -1434,7 +1429,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
@@ -1432,7 +1427,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
if (!PathFileExistsW(fileDest->szDirectory))
|
||||
return ERROR_CANCELLED;
|
||||
|
||||
@@ -434,7 +434,7 @@ index 4e40e9dd71b..a64cc0d7f8d 100644
|
||||
{
|
||||
if (i >= flTo->dwNumFiles)
|
||||
break;
|
||||
@@ -1448,9 +1443,9 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
@@ -1446,9 +1441,9 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
}
|
||||
|
||||
if (fileDest->bExists && IsAttribDir(fileDest->attributes))
|
||||
@@ -446,7 +446,7 @@ index 4e40e9dd71b..a64cc0d7f8d 100644
|
||||
}
|
||||
|
||||
if (mismatched > 0)
|
||||
@@ -1465,7 +1460,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
@@ -1463,7 +1458,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
}
|
||||
|
||||
/* the FO_RENAME files */
|
||||
@@ -455,7 +455,7 @@ index 4e40e9dd71b..a64cc0d7f8d 100644
|
||||
{
|
||||
const FILE_ENTRY *feFrom;
|
||||
const FILE_ENTRY *feTo;
|
||||
@@ -1487,7 +1482,7 @@ static int rename_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, con
|
||||
@@ -1485,7 +1480,7 @@ static int rename_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, con
|
||||
if (feTo->bExists)
|
||||
return ERROR_ALREADY_EXISTS;
|
||||
|
||||
@@ -464,7 +464,7 @@ index 4e40e9dd71b..a64cc0d7f8d 100644
|
||||
}
|
||||
|
||||
/* alert the user if an unsupported flag is used */
|
||||
@@ -1534,16 +1529,16 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
|
||||
@@ -1532,16 +1527,16 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
|
||||
switch (lpFileOp->wFunc)
|
||||
{
|
||||
case FO_COPY:
|
||||
@@ -486,5 +486,5 @@ index 4e40e9dd71b..a64cc0d7f8d 100644
|
||||
default:
|
||||
ret = ERROR_INVALID_PARAMETER;
|
||||
--
|
||||
2.40.1
|
||||
2.43.0
|
||||
|
||||
|
@@ -1,3 +1,2 @@
|
||||
Fixes: Support for shell32 file operation progress dialog
|
||||
Depends: kernel32-CopyFileEx
|
||||
Depends: shell32-SHFileOperation_Move
|
||||
|
@@ -1,52 +0,0 @@
|
||||
From 147822d028471e1ffa83193c9df85c4f7c04bc8b Mon Sep 17 00:00:00 2001
|
||||
From: Zhenbo Li <litimetal@gmail.com>
|
||||
Date: Fri, 14 Aug 2015 21:18:43 +0800
|
||||
Subject: [PATCH] shell32: Fix SHFileOperation(FO_MOVE) for creating
|
||||
subdirectories.
|
||||
|
||||
This patch fixes bug 25207.
|
||||
---
|
||||
dlls/shell32/shlfileop.c | 6 +++++-
|
||||
dlls/shell32/tests/shlfileop.c | 4 ++--
|
||||
2 files changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/shell32/shlfileop.c b/dlls/shell32/shlfileop.c
|
||||
index 17a8e7046c7..01e1ab13bf5 100644
|
||||
--- a/dlls/shell32/shlfileop.c
|
||||
+++ b/dlls/shell32/shlfileop.c
|
||||
@@ -1420,7 +1420,11 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const
|
||||
}
|
||||
|
||||
if (!PathFileExistsW(flTo->feFiles[0].szDirectory))
|
||||
- return ERROR_CANCELLED;
|
||||
+ {
|
||||
+ int ret = SHCreateDirectoryExW(NULL, flTo->feFiles[0].szDirectory, NULL);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+ }
|
||||
|
||||
if (lpFileOp->fFlags & FOF_MULTIDESTFILES)
|
||||
mismatched = flFrom->dwNumFiles - flTo->dwNumFiles;
|
||||
diff --git a/dlls/shell32/tests/shlfileop.c b/dlls/shell32/tests/shlfileop.c
|
||||
index 273b09d5005..ed1c25a3528 100644
|
||||
--- a/dlls/shell32/tests/shlfileop.c
|
||||
+++ b/dlls/shell32/tests/shlfileop.c
|
||||
@@ -2306,13 +2306,13 @@ static void test_move(void)
|
||||
ok(!DeleteFileA("d.txt"), "Expected d.txt to not exist\n");
|
||||
}
|
||||
|
||||
- /* FO_MOVE does not create dest directories */
|
||||
+ /* FO_MOVE should create dest directories */
|
||||
shfo.pFrom = "test2.txt\0";
|
||||
shfo.pTo = "dir1\\dir2\\test2.txt\0";
|
||||
retval = SHFileOperationA(&shfo);
|
||||
if (dir_exists("dir1"))
|
||||
{
|
||||
- /* Vista and W2K8 (broken or new behavior ?) */
|
||||
+ /* New behavior on Vista or later */
|
||||
ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", retval);
|
||||
ok(DeleteFileA("dir1\\dir2\\test2.txt"), "Expected dir1\\dir2\\test2.txt to exist\n");
|
||||
RemoveDirectoryA("dir1\\dir2");
|
||||
--
|
||||
2.35.1
|
||||
|
@@ -1,2 +0,0 @@
|
||||
Fixes: [25207] SHFileOperation with FO_MOVE should create new directory on Vista+
|
||||
# Patch might be incomplete, see https://bugs.wine-staging.com/show_bug.cgi?id=541#c3
|
@@ -1,28 +0,0 @@
|
||||
From 79fbd3342a3e5c7cb2198bf2f0412db1df4b1fce Mon Sep 17 00:00:00 2001
|
||||
From: Louis Lenders <xerox.xerox2000x@gmail.com>
|
||||
Date: Thu, 4 Nov 2021 21:01:24 +1100
|
||||
Subject: [PATCH] shell32: Append .exe when registry lookup fails first time
|
||||
|
||||
---
|
||||
dlls/shell32/shlexec.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/shell32/shlexec.c b/dlls/shell32/shlexec.c
|
||||
index 069b96a51a1..5033330b60c 100644
|
||||
--- a/dlls/shell32/shlexec.c
|
||||
+++ b/dlls/shell32/shlexec.c
|
||||
@@ -459,7 +459,10 @@ static BOOL SHELL_TryAppPathW( LPCWSTR szName, LPWSTR lpResult, WCHAR **env)
|
||||
|
||||
wcscat(buffer, szName);
|
||||
res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, buffer, 0, KEY_READ, &hkApp);
|
||||
- if (res) goto end;
|
||||
+ if (res)
|
||||
+ res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, lstrcatW(buffer, L".exe"), 0, KEY_READ, &hkApp);
|
||||
+ if (res)
|
||||
+ goto end;
|
||||
|
||||
len = MAX_PATH*sizeof(WCHAR);
|
||||
res = RegQueryValueW(hkApp, NULL, lpResult, &len);
|
||||
--
|
||||
2.42.0
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [51957] Append .exe, if registry lookup fails first.
|
@@ -1,2 +1,4 @@
|
||||
Fixes: [3689] Compile stdole32.tlb in SLTG typelib format
|
||||
Depends: widl-SLTG_Typelib_Support
|
||||
# Disabled dependency.
|
||||
Disabled: true
|
||||
|
@@ -1,47 +0,0 @@
|
||||
From 4e0be5a53f3a87285973ca032358b81c0c3126c5 Mon Sep 17 00:00:00 2001
|
||||
From: Austin English <austinenglish@gmail.com>
|
||||
Date: Mon, 1 Jul 2019 09:17:31 +1000
|
||||
Subject: [PATCH] user32: Added LoadKeyboardLayoutEx stub.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=28170
|
||||
---
|
||||
dlls/user32/input.c | 9 +++++++++
|
||||
dlls/user32/user32.spec | 2 +-
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/user32/input.c b/dlls/user32/input.c
|
||||
index 8b2ae805aa..a789108a86 100644
|
||||
--- a/dlls/user32/input.c
|
||||
+++ b/dlls/user32/input.c
|
||||
@@ -1017,6 +1017,15 @@ HKL WINAPI LoadKeyboardLayoutA(LPCSTR pwszKLID, UINT Flags)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+/***********************************************************************
|
||||
+ * LoadKeyboardLayoutEx (USER32.@)
|
||||
+ */
|
||||
+HKL WINAPI LoadKeyboardLayoutEx(DWORD unknown, const WCHAR *locale, UINT flags)
|
||||
+{
|
||||
+ FIXME("(%ld, %s, %x) semi-stub!\n", unknown, debugstr_w(locale), flags);
|
||||
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
+ return LoadKeyboardLayoutW(locale, flags);
|
||||
+}
|
||||
|
||||
/***********************************************************************
|
||||
* UnloadKeyboardLayout (USER32.@)
|
||||
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
|
||||
index f9a4ae26df..6d70df366e 100644
|
||||
--- a/dlls/user32/user32.spec
|
||||
+++ b/dlls/user32/user32.spec
|
||||
@@ -496,7 +496,7 @@
|
||||
@ stdcall LoadImageA(long str long long long long)
|
||||
@ stdcall LoadImageW(long wstr long long long long)
|
||||
@ stdcall LoadKeyboardLayoutA(str long)
|
||||
-# @ stub LoadKeyboardLayoutEx
|
||||
+@ stdcall LoadKeyboardLayoutEx(long wstr long)
|
||||
@ stdcall LoadKeyboardLayoutW(wstr long)
|
||||
@ stdcall LoadLocalFonts()
|
||||
@ stdcall LoadMenuA(long str)
|
||||
--
|
||||
2.17.1
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user