winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
November 2020
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
1 participants
851 discussions
Start a n
N
ew thread
Nikolay Sivov : mfmediaengine: Add video output topology branch.
by Alexandre Julliard
03 Nov '20
03 Nov '20
Module: wine Branch: master Commit: 344d3fb8a40e4eb431787187d49156ef4048d19c URL:
https://source.winehq.org/git/wine.git/?a=commit;h=344d3fb8a40e4eb431787187…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Tue Nov 3 15:56:03 2020 +0300 mfmediaengine: Add video output topology branch. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfmediaengine/main.c | 166 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 164 insertions(+), 2 deletions(-) diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c index 64f0ae6d2a1..0817c249b27 100644 --- a/dlls/mfmediaengine/main.c +++ b/dlls/mfmediaengine/main.c @@ -75,6 +75,7 @@ struct media_engine IMFMediaEngine IMFMediaEngine_iface; IMFAsyncCallback session_events; IMFAsyncCallback load_handler; + IMFSampleGrabberSinkCallback grabber_callback; LONG refcount; IMFMediaEngineNotify *callback; IMFAttributes *attributes; @@ -237,6 +238,11 @@ static struct media_engine *impl_from_load_handler_IMFAsyncCallback(IMFAsyncCall return CONTAINING_RECORD(iface, struct media_engine, load_handler); } +static struct media_engine *impl_from_IMFSampleGrabberSinkCallback(IMFSampleGrabberSinkCallback *iface) +{ + return CONTAINING_RECORD(iface, struct media_engine, grabber_callback); +} + static HRESULT WINAPI media_engine_callback_QueryInterface(IMFAsyncCallback *iface, REFIID riid, void **obj) { if (IsEqualIID(riid, &IID_IMFAsyncCallback) || @@ -373,6 +379,51 @@ static HRESULT media_engine_create_audio_renderer(struct media_engine *engine, I return hr; } +static HRESULT media_engine_create_video_renderer(struct media_engine *engine, IMFTopologyNode **node) +{ + DXGI_FORMAT output_format; + IMFMediaType *media_type; + IMFActivate *activate; + GUID subtype; + HRESULT hr; + + *node = NULL; + + if (FAILED(IMFAttributes_GetUINT32(engine->attributes, &MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT, &output_format))) + { + WARN("Output format was not specified.\n"); + return E_FAIL; + } + + memcpy(&subtype, &MFVideoFormat_Base, sizeof(subtype)); + if (!(subtype.Data1 = MFMapDXGIFormatToDX9Format(output_format))) + { + WARN("Unrecognized output format %#x.\n", output_format); + return E_FAIL; + } + + if (FAILED(hr = MFCreateMediaType(&media_type))) + return hr; + + IMFMediaType_SetGUID(media_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Video); + IMFMediaType_SetGUID(media_type, &MF_MT_SUBTYPE, &subtype); + + hr = MFCreateSampleGrabberSinkActivate(media_type, &engine->grabber_callback, &activate); + IMFMediaType_Release(media_type); + if (FAILED(hr)) + return hr; + + if (SUCCEEDED(hr = MFCreateTopologyNode(MF_TOPOLOGY_OUTPUT_NODE, node))) + { + IMFTopologyNode_SetObject(*node, (IUnknown *)activate); + IMFTopologyNode_SetUINT32(*node, &MF_TOPONODE_NOSHUTDOWN_ON_REMOVE, FALSE); + } + + IMFActivate_Release(activate); + + return hr; +} + static HRESULT media_engine_create_topology(struct media_engine *engine, IMFMediaSource *source) { IMFStreamDescriptor *sd_audio = NULL, *sd_video = NULL; @@ -455,11 +506,10 @@ static HRESULT media_engine_create_topology(struct media_engine *engine, IMFMedi IMFMediaEngineNotify_EventNotify(engine->callback, MF_MEDIA_ENGINE_EVENT_LOADEDDATA, 0, 0); - /* TODO: set up video stream nodes */ - if (SUCCEEDED(hr = MFCreateTopology(&topology))) { IMFTopologyNode *sar_node = NULL, *audio_src = NULL; + IMFTopologyNode *grabber_node = NULL, *video_src = NULL; if (sd_audio) { @@ -481,6 +531,27 @@ static HRESULT media_engine_create_topology(struct media_engine *engine, IMFMedi if (audio_src) IMFTopologyNode_Release(audio_src); } + + if (SUCCEEDED(hr) && sd_video) + { + if (FAILED(hr = media_engine_create_source_node(source, pd, sd_video, &video_src))) + WARN("Failed to create video source node, hr %#x.\n", hr); + + if (FAILED(hr = media_engine_create_video_renderer(engine, &grabber_node))) + WARN("Failed to create video grabber node, hr %#x.\n", hr); + + if (grabber_node && video_src) + { + IMFTopology_AddNode(topology, video_src); + IMFTopology_AddNode(topology, grabber_node); + IMFTopologyNode_ConnectOutput(video_src, 0, grabber_node, 0); + } + + if (grabber_node) + IMFTopologyNode_Release(grabber_node); + if (video_src) + IMFTopologyNode_Release(video_src); + } } if (topology) @@ -1225,6 +1296,96 @@ static const IMFMediaEngineVtbl media_engine_vtbl = media_engine_OnVideoStreamTick, }; +static HRESULT WINAPI media_engine_grabber_callback_QueryInterface(IMFSampleGrabberSinkCallback *iface, + REFIID riid, void **obj) +{ + if (IsEqualIID(riid, &IID_IMFSampleGrabberSinkCallback) || + IsEqualIID(riid, &IID_IUnknown)) + { + *obj = iface; + IMFSampleGrabberSinkCallback_AddRef(iface); + return S_OK; + } + + *obj = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI media_engine_grabber_callback_AddRef(IMFSampleGrabberSinkCallback *iface) +{ + struct media_engine *engine = impl_from_IMFSampleGrabberSinkCallback(iface); + return IMFMediaEngine_AddRef(&engine->IMFMediaEngine_iface); +} + +static ULONG WINAPI media_engine_grabber_callback_Release(IMFSampleGrabberSinkCallback *iface) +{ + struct media_engine *engine = impl_from_IMFSampleGrabberSinkCallback(iface); + return IMFMediaEngine_Release(&engine->IMFMediaEngine_iface); +} + +static HRESULT WINAPI media_engine_grabber_callback_OnClockStart(IMFSampleGrabberSinkCallback *iface, + MFTIME systime, LONGLONG start_offset) +{ + return S_OK; +} + +static HRESULT WINAPI media_engine_grabber_callback_OnClockStop(IMFSampleGrabberSinkCallback *iface, + MFTIME systime) +{ + return S_OK; +} + +static HRESULT WINAPI media_engine_grabber_callback_OnClockPause(IMFSampleGrabberSinkCallback *iface, + MFTIME systime) +{ + return S_OK; +} + +static HRESULT WINAPI media_engine_grabber_callback_OnClockRestart(IMFSampleGrabberSinkCallback *iface, + MFTIME systime) +{ + return S_OK; +} + +static HRESULT WINAPI media_engine_grabber_callback_OnClockSetRate(IMFSampleGrabberSinkCallback *iface, + MFTIME systime, float rate) +{ + return S_OK; +} + +static HRESULT WINAPI media_engine_grabber_callback_OnSetPresentationClock(IMFSampleGrabberSinkCallback *iface, + IMFPresentationClock *clock) +{ + return S_OK; +} + +static HRESULT WINAPI media_engine_grabber_callback_OnProcessSample(IMFSampleGrabberSinkCallback *iface, + REFGUID major_type, DWORD sample_flags, LONGLONG sample_time, LONGLONG sample_duration, + const BYTE *buffer, DWORD sample_size) +{ + return S_OK; +} + +static HRESULT WINAPI media_engine_grabber_callback_OnShutdown(IMFSampleGrabberSinkCallback *iface) +{ + return S_OK; +} + +static const IMFSampleGrabberSinkCallbackVtbl media_engine_grabber_callback_vtbl = +{ + media_engine_grabber_callback_QueryInterface, + media_engine_grabber_callback_AddRef, + media_engine_grabber_callback_Release, + media_engine_grabber_callback_OnClockStart, + media_engine_grabber_callback_OnClockStop, + media_engine_grabber_callback_OnClockPause, + media_engine_grabber_callback_OnClockRestart, + media_engine_grabber_callback_OnClockSetRate, + media_engine_grabber_callback_OnSetPresentationClock, + media_engine_grabber_callback_OnProcessSample, + media_engine_grabber_callback_OnShutdown, +}; + static HRESULT WINAPI media_engine_factory_QueryInterface(IMFMediaEngineClassFactory *iface, REFIID riid, void **obj) { if (IsEqualIID(riid, &IID_IMFMediaEngineClassFactory) || @@ -1259,6 +1420,7 @@ static HRESULT init_media_engine(DWORD flags, IMFAttributes *attributes, struct engine->IMFMediaEngine_iface.lpVtbl = &media_engine_vtbl; engine->session_events.lpVtbl = &media_engine_session_events_vtbl; engine->load_handler.lpVtbl = &media_engine_load_handler_vtbl; + engine->grabber_callback.lpVtbl = &media_engine_grabber_callback_vtbl; engine->refcount = 1; engine->flags = (flags & MF_MEDIA_ENGINE_CREATEFLAGS_MASK) | FLAGS_ENGINE_PAUSED; engine->default_playback_rate = 1.0;
1
0
0
0
Nikolay Sivov : mfplat: Implement MFMapDXGIFormatToDX9Format().
by Alexandre Julliard
03 Nov '20
03 Nov '20
Module: wine Branch: master Commit: af37f3b085c572dbb5209c5aa18f631e4ca65828 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=af37f3b085c572dbb5209c5a…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Tue Nov 3 15:56:02 2020 +0300 mfplat: Implement MFMapDXGIFormatToDX9Format(). Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfplat/mediatype.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++ dlls/mfplat/mfplat.spec | 1 + dlls/mfplat/tests/mfplat.c | 73 ++++++++++++++++++++++++++++++++++ include/mfapi.h | 2 + 4 files changed, 174 insertions(+) diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c index fcaef110038..f3895ca4d49 100644 --- a/dlls/mfplat/mediatype.c +++ b/dlls/mfplat/mediatype.c @@ -3211,3 +3211,101 @@ HRESULT WINAPI MFFrameRateToAverageTimePerFrame(UINT32 numerator, UINT32 denomin return S_OK; } + +/*********************************************************************** + * MFMapDXGIFormatToDX9Format (mfplat.@) + */ +DWORD WINAPI MFMapDXGIFormatToDX9Format(DXGI_FORMAT dxgi_format) +{ + switch (dxgi_format) + { + case DXGI_FORMAT_R32G32B32A32_FLOAT: + return D3DFMT_A32B32G32R32F; + case DXGI_FORMAT_R16G16B16A16_FLOAT: + return D3DFMT_A16B16G16R16F; + case DXGI_FORMAT_R16G16B16A16_UNORM: + return D3DFMT_A16B16G16R16; + case DXGI_FORMAT_R16G16B16A16_SNORM: + return D3DFMT_Q16W16V16U16; + case DXGI_FORMAT_R32G32_FLOAT: + return D3DFMT_G32R32F; + case DXGI_FORMAT_R10G10B10A2_UNORM: + return D3DFMT_A2B10G10R10; + case DXGI_FORMAT_R8G8B8A8_SNORM: + return D3DFMT_Q8W8V8U8; + case DXGI_FORMAT_R16G16_FLOAT: + return D3DFMT_G16R16F; + case DXGI_FORMAT_R16G16_UNORM: + return D3DFMT_G16R16; + case DXGI_FORMAT_R16G16_SNORM: + return D3DFMT_V16U16; + case DXGI_FORMAT_D32_FLOAT: + return D3DFMT_D32F_LOCKABLE; + case DXGI_FORMAT_R32_FLOAT: + return D3DFMT_R32F; + case DXGI_FORMAT_D24_UNORM_S8_UINT: + return D3DFMT_D24S8; + case DXGI_FORMAT_R8G8_SNORM: + return D3DFMT_V8U8; + case DXGI_FORMAT_R16_FLOAT: + return D3DFMT_R16F; + case DXGI_FORMAT_D16_UNORM: + return D3DFMT_D16_LOCKABLE; + case DXGI_FORMAT_R16_UNORM: + return D3DFMT_L16; + case DXGI_FORMAT_R8_UNORM: + return D3DFMT_L8; + case DXGI_FORMAT_A8_UNORM: + return D3DFMT_A8; + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + return D3DFMT_DXT1; + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + return D3DFMT_DXT2; + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + return D3DFMT_DXT4; + case DXGI_FORMAT_R8G8B8A8_UNORM: + return D3DFMT_A8B8G8R8; + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return D3DFMT_A8R8G8B8; + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return D3DFMT_X8R8G8B8; + case DXGI_FORMAT_AYUV: + return MAKEFOURCC('A','Y','U','V'); + case DXGI_FORMAT_Y410: + return MAKEFOURCC('Y','4','1','0'); + case DXGI_FORMAT_Y416: + return MAKEFOURCC('Y','4','1','6'); + case DXGI_FORMAT_NV12: + return MAKEFOURCC('N','V','1','2'); + case DXGI_FORMAT_P010: + return MAKEFOURCC('P','0','1','0'); + case DXGI_FORMAT_P016: + return MAKEFOURCC('P','0','1','6'); + case DXGI_FORMAT_420_OPAQUE: + return MAKEFOURCC('4','2','0','O'); + case DXGI_FORMAT_YUY2: + return D3DFMT_YUY2; + case DXGI_FORMAT_Y210: + return MAKEFOURCC('Y','2','1','0'); + case DXGI_FORMAT_Y216: + return MAKEFOURCC('Y','2','1','6'); + case DXGI_FORMAT_NV11: + return MAKEFOURCC('N','V','1','1'); + case DXGI_FORMAT_AI44: + return MAKEFOURCC('A','I','4','4'); + case DXGI_FORMAT_IA44: + return MAKEFOURCC('I','A','4','4'); + case DXGI_FORMAT_P8: + return D3DFMT_P8; + case DXGI_FORMAT_A8P8: + return D3DFMT_A8P8; + default: + return 0; + } +} diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec index 36e009c2db9..8ef40dd20c8 100644 --- a/dlls/mfplat/mfplat.spec +++ b/dlls/mfplat/mfplat.spec @@ -131,6 +131,7 @@ @ stdcall MFJoinWorkQueue(long long ptr) rtworkq.RtwqJoinWorkQueue @ stdcall MFLockPlatform() rtworkq.RtwqLockPlatform @ stdcall MFLockWorkQueue(long) rtworkq.RtwqLockWorkQueue +@ stdcall MFMapDXGIFormatToDX9Format(long) @ stdcall MFPutWaitingWorkItem(long long ptr ptr) rtworkq.RtwqPutWaitingWorkItem @ stdcall MFPutWorkItem(long ptr ptr) @ stdcall MFPutWorkItem2(long long ptr ptr) diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index a6c8a10f777..4f5cf268d2a 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -108,6 +108,7 @@ static HRESULT (WINAPI *pMFCreateMediaBufferFromMediaType)(IMFMediaType *media_t DWORD min_alignment, IMFMediaBuffer **buffer); static HRESULT (WINAPI *pMFCreateDXSurfaceBuffer)(REFIID riid, IUnknown *surface, BOOL bottom_up, IMFMediaBuffer **buffer); static HRESULT (WINAPI *pMFCreateTrackedSample)(IMFTrackedSample **sample); +static DWORD (WINAPI *pMFMapDXGIFormatToDX9Format)(DXGI_FORMAT dxgi_format); static HWND create_window(void) { @@ -742,6 +743,7 @@ static void init_functions(void) X(MFCreateTransformActivate); X(MFGetPlaneSize); X(MFGetStrideForBitmapInfoHeader); + X(MFMapDXGIFormatToDX9Format); X(MFPutWaitingWorkItem); X(MFRegisterLocalByteStreamHandler); X(MFRegisterLocalSchemeHandler); @@ -5911,6 +5913,76 @@ static void test_MFFrameRateToAverageTimePerFrame(void) } } +static void test_MFMapDXGIFormatToDX9Format(void) +{ + static const struct format_pair + { + DXGI_FORMAT dxgi_format; + DWORD d3d9_format; + } + formats_map[] = + { + { DXGI_FORMAT_R32G32B32A32_FLOAT, D3DFMT_A32B32G32R32F }, + { DXGI_FORMAT_R16G16B16A16_FLOAT, D3DFMT_A16B16G16R16F }, + { DXGI_FORMAT_R16G16B16A16_UNORM, D3DFMT_A16B16G16R16 }, + { DXGI_FORMAT_R16G16B16A16_SNORM, D3DFMT_Q16W16V16U16 }, + { DXGI_FORMAT_R32G32_FLOAT, D3DFMT_G32R32F }, + { DXGI_FORMAT_R10G10B10A2_UNORM, D3DFMT_A2B10G10R10 }, + { DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, D3DFMT_A8R8G8B8 }, + { DXGI_FORMAT_R8G8B8A8_SNORM, D3DFMT_Q8W8V8U8 }, + { DXGI_FORMAT_R16G16_FLOAT, D3DFMT_G16R16F }, + { DXGI_FORMAT_R16G16_UNORM, D3DFMT_G16R16 }, + { DXGI_FORMAT_R16G16_SNORM, D3DFMT_V16U16 }, + { DXGI_FORMAT_D32_FLOAT, D3DFMT_D32F_LOCKABLE }, + { DXGI_FORMAT_R32_FLOAT, D3DFMT_R32F }, + { DXGI_FORMAT_D24_UNORM_S8_UINT, D3DFMT_D24S8 }, + { DXGI_FORMAT_R8G8_SNORM, D3DFMT_V8U8 }, + { DXGI_FORMAT_R16_FLOAT, D3DFMT_R16F }, + { DXGI_FORMAT_R16_UNORM, D3DFMT_L16 }, + { DXGI_FORMAT_R8_UNORM, D3DFMT_L8 }, + { DXGI_FORMAT_A8_UNORM, D3DFMT_A8 }, + { DXGI_FORMAT_BC1_UNORM, D3DFMT_DXT1 }, + { DXGI_FORMAT_BC1_UNORM_SRGB, D3DFMT_DXT1 }, + { DXGI_FORMAT_BC2_UNORM, D3DFMT_DXT2 }, + { DXGI_FORMAT_BC2_UNORM_SRGB, D3DFMT_DXT2 }, + { DXGI_FORMAT_BC3_UNORM, D3DFMT_DXT4 }, + { DXGI_FORMAT_BC3_UNORM_SRGB, D3DFMT_DXT4 }, + { DXGI_FORMAT_B8G8R8A8_UNORM, D3DFMT_A8R8G8B8 }, + { DXGI_FORMAT_B8G8R8X8_UNORM, D3DFMT_X8R8G8B8 }, + { DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, D3DFMT_A8R8G8B8 }, + { DXGI_FORMAT_B8G8R8X8_UNORM_SRGB, D3DFMT_X8R8G8B8 }, + { DXGI_FORMAT_AYUV, MAKEFOURCC('A','Y','U','V') }, + { DXGI_FORMAT_Y410, MAKEFOURCC('Y','4','1','0') }, + { DXGI_FORMAT_Y416, MAKEFOURCC('Y','4','1','6') }, + { DXGI_FORMAT_NV12, MAKEFOURCC('N','V','1','2') }, + { DXGI_FORMAT_P010, MAKEFOURCC('P','0','1','0') }, + { DXGI_FORMAT_P016, MAKEFOURCC('P','0','1','6') }, + { DXGI_FORMAT_420_OPAQUE, MAKEFOURCC('4','2','0','O') }, + { DXGI_FORMAT_YUY2, D3DFMT_YUY2 }, + { DXGI_FORMAT_Y210, MAKEFOURCC('Y','2','1','0') }, + { DXGI_FORMAT_Y216, MAKEFOURCC('Y','2','1','6') }, + { DXGI_FORMAT_NV11, MAKEFOURCC('N','V','1','1') }, + { DXGI_FORMAT_AI44, MAKEFOURCC('A','I','4','4') }, + { DXGI_FORMAT_IA44, MAKEFOURCC('I','A','4','4') }, + { DXGI_FORMAT_P8, D3DFMT_P8 }, + { DXGI_FORMAT_A8P8, D3DFMT_A8P8 }, + }; + unsigned int i; + DWORD format; + + if (!pMFMapDXGIFormatToDX9Format) + { + win_skip("MFMapDXGIFormatToDX9Format is not available.\n"); + return; + } + + for (i = 0; i < ARRAY_SIZE(formats_map); ++i) + { + format = pMFMapDXGIFormatToDX9Format(formats_map[i].dxgi_format); + ok(format == formats_map[i].d3d9_format, "Unexpected d3d9 format %#x, dxgi format %#x.\n", format, formats_map[i].dxgi_format); + } +} + START_TEST(mfplat) { char **argv; @@ -5970,6 +6042,7 @@ START_TEST(mfplat) test_MFCreateDXSurfaceBuffer(); test_MFCreateTrackedSample(); test_MFFrameRateToAverageTimePerFrame(); + test_MFMapDXGIFormatToDX9Format(); CoUninitialize(); } diff --git a/include/mfapi.h b/include/mfapi.h index 8661b41fc4e..77875486e54 100644 --- a/include/mfapi.h +++ b/include/mfapi.h @@ -22,6 +22,7 @@ #include <mfobjects.h> #include <mmreg.h> #include <avrt.h> +#include <dxgiformat.h> #if defined(__cplusplus) extern "C" { @@ -549,6 +550,7 @@ HRESULT WINAPI MFInitAttributesFromBlob(IMFAttributes *attributes, const UINT8 * HRESULT WINAPI MFInitMediaTypeFromWaveFormatEx(IMFMediaType *mediatype, const WAVEFORMATEX *format, UINT32 size); HRESULT WINAPI MFInvokeCallback(IMFAsyncResult *result); HRESULT WINAPI MFLockPlatform(void); +DWORD WINAPI MFMapDXGIFormatToDX9Format(DXGI_FORMAT dxgi_format); HRESULT WINAPI MFPutWaitingWorkItem(HANDLE event, LONG priority, IMFAsyncResult *result, MFWORKITEM_KEY *key); HRESULT WINAPI MFPutWorkItem(DWORD queue, IMFAsyncCallback *callback, IUnknown *state); HRESULT WINAPI MFPutWorkItem2(DWORD queue, LONG priority, IMFAsyncCallback *callback, IUnknown *state);
1
0
0
0
Zhiyi Zhang : wined3d: Restore display modes for all outputs when doing mode restoration.
by Alexandre Julliard
03 Nov '20
03 Nov '20
Module: wine Branch: master Commit: b911e560458ac7a05c04758efb8f5286a47cae7d URL:
https://source.winehq.org/git/wine.git/?a=commit;h=b911e560458ac7a05c04758e…
Author: Zhiyi Zhang <zzhang(a)codeweavers.com> Date: Mon Nov 2 17:44:57 2020 +0800 wined3d: Restore display modes for all outputs when doing mode restoration. Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d3d8/tests/device.c | 30 ++++----- dlls/d3d9/tests/device.c | 30 ++++----- dlls/ddraw/ddraw.c | 2 +- dlls/ddraw/tests/ddraw1.c | 10 +-- dlls/ddraw/tests/ddraw2.c | 10 +-- dlls/ddraw/tests/ddraw4.c | 10 +-- dlls/ddraw/tests/ddraw7.c | 10 +-- dlls/dxgi/tests/dxgi.c | 14 ++-- dlls/wined3d/directx.c | 162 +++++++++++++++++++++++++++++++++++----------- dlls/wined3d/swapchain.c | 55 +++++++++------- dlls/wined3d/wined3d.spec | 1 + include/wine/wined3d.h | 1 + 12 files changed, 217 insertions(+), 118 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=b911e560458ac7a05c04…
1
0
0
0
Alistair Leslie-Hughes : netutils: Add stub dll.
by Alexandre Julliard
03 Nov '20
03 Nov '20
Module: wine Branch: master Commit: 5575072e7281eaf865c46f9c0f0ab13f83fdbfb3 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=5575072e7281eaf865c46f9c…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Mon Nov 2 19:19:28 2020 +0100 netutils: Add stub dll. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- configure | 2 ++ configure.ac | 1 + dlls/netutils/Makefile.in | 5 +++++ dlls/netutils/main.c | 41 +++++++++++++++++++++++++++++++++++++++++ dlls/netutils/netutils.spec | 22 ++++++++++++++++++++++ 5 files changed, 71 insertions(+) diff --git a/configure b/configure index a372aae0b21..26caf6703e5 100755 --- a/configure +++ b/configure @@ -1503,6 +1503,7 @@ enable_netapi32 enable_netcfgx enable_netio_sys enable_netprofm +enable_netutils enable_newdev enable_ninput enable_normaliz @@ -20833,6 +20834,7 @@ wine_fn_config_makefile dlls/netcfgx/tests enable_tests wine_fn_config_makefile dlls/netio.sys enable_netio_sys wine_fn_config_makefile dlls/netprofm enable_netprofm wine_fn_config_makefile dlls/netprofm/tests enable_tests +wine_fn_config_makefile dlls/netutils enable_netutils wine_fn_config_makefile dlls/newdev enable_newdev wine_fn_config_makefile dlls/ninput enable_ninput wine_fn_config_makefile dlls/ninput/tests enable_tests diff --git a/configure.ac b/configure.ac index 18f47abaac1..923d5e3b0f3 100644 --- a/configure.ac +++ b/configure.ac @@ -3575,6 +3575,7 @@ WINE_CONFIG_MAKEFILE(dlls/netcfgx/tests) WINE_CONFIG_MAKEFILE(dlls/netio.sys) WINE_CONFIG_MAKEFILE(dlls/netprofm) WINE_CONFIG_MAKEFILE(dlls/netprofm/tests) +WINE_CONFIG_MAKEFILE(dlls/netutils) WINE_CONFIG_MAKEFILE(dlls/newdev) WINE_CONFIG_MAKEFILE(dlls/ninput) WINE_CONFIG_MAKEFILE(dlls/ninput/tests) diff --git a/dlls/netutils/Makefile.in b/dlls/netutils/Makefile.in new file mode 100644 index 00000000000..21589e07b8b --- /dev/null +++ b/dlls/netutils/Makefile.in @@ -0,0 +1,5 @@ +MODULE = netutils.dll + +EXTRADLLFLAGS = -mno-cygwin + +C_SRCS = main.c diff --git a/dlls/netutils/main.c b/dlls/netutils/main.c new file mode 100644 index 00000000000..503e0ef7bfb --- /dev/null +++ b/dlls/netutils/main.c @@ -0,0 +1,41 @@ +/* + * + * Copyright (C) 2020 Alistair Leslie-Hughes + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(netutils); + +BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) +{ + TRACE("(%p, %u, %p)\n", instance, reason, reserved); + + switch (reason) + { + case DLL_WINE_PREATTACH: + return FALSE; /* prefer native version */ + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(instance); + break; + } + + return TRUE; +} diff --git a/dlls/netutils/netutils.spec b/dlls/netutils/netutils.spec new file mode 100644 index 00000000000..ff022af2c57 --- /dev/null +++ b/dlls/netutils/netutils.spec @@ -0,0 +1,22 @@ +@ stub NetApiBufferAllocate +@ stub NetApiBufferFree +@ stub NetApiBufferReallocate +@ stub NetApiBufferSize +@ stub NetRemoteComputerSupports +@ stub NetapipBufferAllocate +@ stub NetpIsComputerNameValid +@ stub NetpIsDomainNameValid +@ stub NetpIsGroupNameValid +@ stub NetpIsRemote +@ stub NetpIsRemoteNameValid +@ stub NetpIsShareNameValid +@ stub NetpIsUncComputerNameValid +@ stub NetpIsUserNameValid +@ stub NetpwListCanonicalize +@ stub NetpwListTraverse +@ stub NetpwNameCanonicalize +@ stub NetpwNameCompare +@ stub NetpwNameValidate +@ stub NetpwPathCanonicalize +@ stub NetpwPathCompare +@ stub NetpwPathType
1
0
0
0
Alistair Leslie-Hughes : srvcli: Add stub dll.
by Alexandre Julliard
03 Nov '20
03 Nov '20
Module: wine Branch: master Commit: 8f81123f4f17f2afa31417db72c9b2db95ef6323 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=8f81123f4f17f2afa31417db…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Mon Nov 2 19:19:27 2020 +0100 srvcli: Add stub dll. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- configure | 2 ++ configure.ac | 1 + dlls/srvcli/Makefile.in | 5 ++++ dlls/srvcli/main.c | 41 +++++++++++++++++++++++++++++++++ dlls/srvcli/srvcli.spec | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ tools/make_specfiles | 1 + 6 files changed, 111 insertions(+) diff --git a/configure b/configure index 4e76dbf9d02..a372aae0b21 100755 --- a/configure +++ b/configure @@ -1593,6 +1593,7 @@ enable_snmpapi enable_softpub enable_spoolss enable_srclient +enable_srvcli enable_sspicli enable_stdole2_tlb enable_stdole32_tlb @@ -20981,6 +20982,7 @@ wine_fn_config_makefile dlls/sound.drv16 enable_win16 wine_fn_config_makefile dlls/spoolss enable_spoolss wine_fn_config_makefile dlls/spoolss/tests enable_tests wine_fn_config_makefile dlls/srclient enable_srclient +wine_fn_config_makefile dlls/srvcli enable_srvcli wine_fn_config_makefile dlls/sspicli enable_sspicli wine_fn_config_makefile dlls/stdole2.tlb enable_stdole2_tlb wine_fn_config_makefile dlls/stdole32.tlb enable_stdole32_tlb diff --git a/configure.ac b/configure.ac index 06031352866..18f47abaac1 100644 --- a/configure.ac +++ b/configure.ac @@ -3724,6 +3724,7 @@ WINE_CONFIG_MAKEFILE(dlls/sound.drv16,enable_win16) WINE_CONFIG_MAKEFILE(dlls/spoolss) WINE_CONFIG_MAKEFILE(dlls/spoolss/tests) WINE_CONFIG_MAKEFILE(dlls/srclient) +WINE_CONFIG_MAKEFILE(dlls/srvcli) WINE_CONFIG_MAKEFILE(dlls/sspicli) WINE_CONFIG_MAKEFILE(dlls/stdole2.tlb) WINE_CONFIG_MAKEFILE(dlls/stdole32.tlb) diff --git a/dlls/srvcli/Makefile.in b/dlls/srvcli/Makefile.in new file mode 100644 index 00000000000..716cc1b3867 --- /dev/null +++ b/dlls/srvcli/Makefile.in @@ -0,0 +1,5 @@ +MODULE = srvcli.dll + +EXTRADLLFLAGS = -mno-cygwin + +C_SRCS = main.c diff --git a/dlls/srvcli/main.c b/dlls/srvcli/main.c new file mode 100644 index 00000000000..0df8e00d0fa --- /dev/null +++ b/dlls/srvcli/main.c @@ -0,0 +1,41 @@ +/* + * + * Copyright (C) 2020 Alistair Leslie-Hughes + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(srvcli); + +BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) +{ + TRACE("(%p, %u, %p)\n", instance, reason, reserved); + + switch (reason) + { + case DLL_WINE_PREATTACH: + return FALSE; /* prefer native version */ + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(instance); + break; + } + + return TRUE; +} diff --git a/dlls/srvcli/srvcli.spec b/dlls/srvcli/srvcli.spec new file mode 100644 index 00000000000..821724a7d4d --- /dev/null +++ b/dlls/srvcli/srvcli.spec @@ -0,0 +1,61 @@ +@ stub I_NetDfsGetVersion +@ stub I_NetServerSetServiceBits +@ stub I_NetServerSetServiceBitsEx +@ stub LocalAliasGet +@ stub LocalFileClose +@ stub LocalFileEnum +@ stub LocalFileEnumEx +@ stub LocalFileGetInfo +@ stub LocalFileGetInfoEx +@ stub LocalServerCertificateMappingAdd +@ stub LocalServerCertificateMappingEnum +@ stub LocalServerCertificateMappingGet +@ stub LocalServerCertificateMappingRemove +@ stub LocalSessionDel +@ stub LocalSessionEnum +@ stub LocalSessionEnumEx +@ stub LocalSessionGetInfo +@ stub LocalSessionGetInfoEx +@ stub LocalShareAdd +@ stub LocalShareDelEx +@ stub LocalShareEnum +@ stub LocalShareEnumEx +@ stub LocalShareGetInfo +@ stub LocalShareGetInfoEx +@ stub LocalShareSetInfo +@ stub NetConnectionEnum +@ stub NetFileClose +@ stdcall NetFileEnum(wstr wstr wstr long ptr long ptr ptr ptr) netapi32.NetFileEnum +@ stub NetFileGetInfo +@ stub NetRemoteTOD +@ stub NetServerAliasAdd +@ stub NetServerAliasDel +@ stub NetServerAliasEnum +@ stub NetServerComputerNameAdd +@ stub NetServerComputerNameDel +@ stdcall NetServerDiskEnum(wstr long ptr long ptr ptr ptr) netapi32.NetServerDiskEnum +@ stdcall NetServerGetInfo(wstr long ptr) netapi32.NetServerGetInfo +@ stub NetServerSetInfo +@ stub NetServerStatisticsGet +@ stub NetServerTransportAdd +@ stub NetServerTransportAddEx +@ stub NetServerTransportDel +@ stub NetServerTransportEnum +@ stub NetSessionDel +@ stdcall NetSessionEnum(wstr wstr wstr long ptr long ptr ptr ptr) netapi32.NetSessionEnum +@ stub NetSessionGetInfo +@ stdcall NetShareAdd(wstr long ptr ptr) netapi32.NetShareAdd +@ stub NetShareCheck +@ stdcall NetShareDel(wstr wstr long) netapi32.NetShareDel +@ stub NetShareDelEx +@ stub NetShareDelSticky +@ stdcall NetShareEnum(wstr long ptr long ptr ptr ptr) netapi32.NetShareEnum +@ stub NetShareEnumSticky +@ stdcall NetShareGetInfo(wstr wstr long ptr) netapi32.NetShareGetInfo +@ stub NetShareSetInfo +@ stub NetpsNameCanonicalize +@ stub NetpsNameCompare +@ stub NetpsNameValidate +@ stub NetpsPathCanonicalize +@ stub NetpsPathCompare +@ stub NetpsPathType diff --git a/tools/make_specfiles b/tools/make_specfiles index efb873e2532..e7a706dad42 100755 --- a/tools/make_specfiles +++ b/tools/make_specfiles @@ -177,6 +177,7 @@ my @dll_groups = [ "netapi32", "ext-ms-win-domainjoin-netjoin-l1-1-0", + "srvcli", ], [ "ntdll",
1
0
0
0
Michael Stefaniuc : serialui: Use wide-char string literals.
by Alexandre Julliard
03 Nov '20
03 Nov '20
Module: wine Branch: master Commit: b8ebbbee67afeba8e269cad16a6a980949d88641 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=b8ebbbee67afeba8e269cad1…
Author: Michael Stefaniuc <mstefani(a)winehq.org> Date: Tue Nov 3 01:32:38 2020 +0100 serialui: Use wide-char string literals. Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/serialui/confdlg.c | 26 +++++++------------------- dlls/serialui/tests/confdlg.c | 18 +++++++----------- 2 files changed, 14 insertions(+), 30 deletions(-) diff --git a/dlls/serialui/confdlg.c b/dlls/serialui/confdlg.c index 45419edb421..23c9eb68c2a 100644 --- a/dlls/serialui/confdlg.c +++ b/dlls/serialui/confdlg.c @@ -46,8 +46,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(comm); static HMODULE SERIALUI_hModule; -static const WCHAR comW[] = {'c','o','m',0 }; - /*********************************************************************** * DllMain [Internal] Initializes the internal 'SERIALUI.DLL'. * @@ -463,13 +461,7 @@ DWORD WINAPI drvCommConfigDialogA(LPCSTR lpszName, HWND hWndParent, LPCOMMCONFIG return r; } -static const WCHAR lpszCommKey[] = { - 'S','y','s','t','e','m','\\', - 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\', - 'S','e','r','v','i','c','e','s','\\', - 'C','l','a','s','s','\\','P','o','r','t','s',0 -}; -static const WCHAR lpszDCB[] = {'D','C','B',0}; +static const WCHAR lpszCommKey[] = L"System\\CurrentControlSet\\Services\\Class\\Ports"; /*********************************************************************** * drvSetDefaultCommConfigW (SERIALUI.@) @@ -484,7 +476,6 @@ BOOL WINAPI drvSetDefaultCommConfigW( HKEY hKeyReg=0, hKeyPort=0; WCHAR szKeyName[100]; DWORD r,dwDCBSize; - static const WCHAR fmt[] = {'%','s','\\','%','s',0 }; TRACE("%p %p %x\n",lpszDevice,lpCommConfig,dwSize); @@ -498,13 +489,12 @@ BOOL WINAPI drvSetDefaultCommConfigW( if(r != ERROR_SUCCESS) return FALSE; - swprintf(szKeyName, ARRAY_SIZE(szKeyName), fmt, lpszCommKey, lpszDevice); + swprintf(szKeyName, ARRAY_SIZE(szKeyName), L"%s\\%s", lpszCommKey, lpszDevice); r = RegCreateKeyW(hKeyReg, szKeyName, &hKeyPort); if(r == ERROR_SUCCESS) { dwDCBSize = sizeof (DCB); - r = RegSetValueExW( hKeyPort, lpszDCB, 0, REG_BINARY, - (LPBYTE)&lpCommConfig->dcb,dwDCBSize); + r = RegSetValueExW(hKeyPort, L"DCB", 0, REG_BINARY, (BYTE *)&lpCommConfig->dcb, dwDCBSize); TRACE("write key r=%d\n",r); RegCloseKey(hKeyPort); } @@ -539,7 +529,6 @@ DWORD WINAPI drvGetDefaultCommConfigW( HKEY hKeyReg, hKeyPort; WCHAR szKeyName[100]; DWORD r,dwSize,dwType; - static const WCHAR fmt[] = {'%','s','\\','%','s',0 }; TRACE("(%s, %p, %p) *lpdwSize: %u\n", debugstr_w(lpszDevice), lpCommConfig, lpdwSize, lpdwSize ? *lpdwSize : 0); @@ -553,11 +542,11 @@ DWORD WINAPI drvGetDefaultCommConfigW( } /* only "com1" - "com9" is allowed */ - r = ARRAY_SIZE(comW); /* len of "com\0" */ + r = ARRAY_SIZE(L"com"); lstrcpynW(szKeyName, lpszDevice, r); /* simulate a lstrcmpnW */ r--; - if( lstrcmpiW(szKeyName, comW) || + if (lstrcmpiW(szKeyName, L"com") || (lpszDevice[r] < '1') || (lpszDevice[r] > '9') || lpszDevice[r+1]) { return ERROR_BADKEY; } @@ -571,14 +560,13 @@ DWORD WINAPI drvGetDefaultCommConfigW( r = RegConnectRegistryW(NULL, HKEY_LOCAL_MACHINE, &hKeyReg); if(r != ERROR_SUCCESS) return r; - swprintf(szKeyName, ARRAY_SIZE(szKeyName), fmt, lpszCommKey, lpszDevice); + swprintf(szKeyName, ARRAY_SIZE(szKeyName), L"%s\\%s", lpszCommKey, lpszDevice); r = RegOpenKeyW(hKeyReg, szKeyName, &hKeyPort); if(r == ERROR_SUCCESS) { dwSize = sizeof (DCB); dwType = 0; - r = RegQueryValueExW( hKeyPort, lpszDCB, NULL, - &dwType, (LPBYTE)&lpCommConfig->dcb, &dwSize); + r = RegQueryValueExW(hKeyPort, L"DCB", NULL, &dwType, (BYTE *)&lpCommConfig->dcb, &dwSize); RegCloseKey(hKeyPort); if ((r!=ERROR_SUCCESS) || (dwType != REG_BINARY) || (dwSize != sizeof(DCB))) { diff --git a/dlls/serialui/tests/confdlg.c b/dlls/serialui/tests/confdlg.c index bd541cda2b9..31669085d47 100644 --- a/dlls/serialui/tests/confdlg.c +++ b/dlls/serialui/tests/confdlg.c @@ -42,10 +42,6 @@ static const CHAR emptyA[] = ""; static const CHAR fmt_comA[] = "com%d"; static const CHAR str_colonA[] = ":"; -static const WCHAR com1W[] = {'c','o','m','1',0}; -static const WCHAR emptyW[] = {0}; -static const WCHAR str_colonW[] = {':',0}; - /* ################# */ static LPCSTR load_functions(void) @@ -202,7 +198,7 @@ static void test_drvCommConfigDialogW(void) ZeroMemory(pCC, sizeof(pCC)); SetLastError(0xdeadbeef); - res = pCommConfigDialogW(emptyW, NULL, pCC); + res = pCommConfigDialogW(L"", NULL, pCC); ok( res == ERROR_INSUFFICIENT_BUFFER, "returned %u with %u (expected ERROR_INSUFFICIENT_BUFFER)\n", res, GetLastError()); @@ -211,7 +207,7 @@ static void test_drvCommConfigDialogW(void) ZeroMemory(pCC, sizeof(pCC)); pCC[0].dwSize = sizeof(COMMCONFIG); SetLastError(0xdeadbeef); - res = pCommConfigDialogW(emptyW, NULL, pCC); + res = pCommConfigDialogW(L"", NULL, pCC); ok( res == ERROR_BADKEY, "returned %u with %u (expected ERROR_BADKEY)\n", res, GetLastError()); @@ -334,7 +330,7 @@ static void test_drvGetDefaultCommConfigW(void) len = sizeof(COMMCONFIG) -1; ZeroMemory(pCC, sizeof(pCC)); SetLastError(0xdeadbeef); - res = pGetDefaultCommConfigW(com1W, pCC, &len); + res = pGetDefaultCommConfigW(L"com1", pCC, &len); if (res == ERROR_CALL_NOT_IMPLEMENTED) { win_skip("*W not implemented\n"); return; @@ -366,7 +362,7 @@ static void test_drvGetDefaultCommConfigW(void) /* a name with a colon is invalid */ if (res == ERROR_SUCCESS) { lstrcatA(bufferA, str_colonA); - lstrcatW(bufferW, str_colonW); + lstrcatW(bufferW, L":"); len = sizeof(pCC); ZeroMemory(pCC, sizeof(pCC)); res = pGetDefaultCommConfigW(bufferW, pCC, &len); @@ -380,7 +376,7 @@ static void test_drvGetDefaultCommConfigW(void) len = sizeof(pCC); ZeroMemory(pCC, sizeof(pCC)); SetLastError(0xdeadbeef); - res = pGetDefaultCommConfigW(emptyW, pCC, &len); + res = pGetDefaultCommConfigW(L"", pCC, &len); ok( res == ERROR_BADKEY, "returned %u with %u and %u for %s (expected ERROR_BADKEY)\n", res, GetLastError(), len, emptyA); @@ -397,14 +393,14 @@ static void test_drvGetDefaultCommConfigW(void) len = sizeof(pCC); SetLastError(0xdeadbeef); - res = pGetDefaultCommConfigW(com1W, NULL, &len); + res = pGetDefaultCommConfigW(L"com1", NULL, &len); ok( res == ERROR_INVALID_PARAMETER, "returned %u with %u and %u (expected ERROR_INVALID_PARAMETER)\n", res, GetLastError(), len); SetLastError(0xdeadbeef); - res = pGetDefaultCommConfigW(com1W, pCC, NULL); + res = pGetDefaultCommConfigW(L"com1", pCC, NULL); ok( res == ERROR_INVALID_PARAMETER, "returned %u with %u (expected ERROR_INVALID_PARAMETER)\n", res, GetLastError());
1
0
0
0
Daniel Lehman : concrt140/tests: Add _Context::_CurrentContext tests.
by Alexandre Julliard
03 Nov '20
03 Nov '20
Module: wine Branch: master Commit: c56bddf94e737565d9165d4261960e18c07c9e2a URL:
https://source.winehq.org/git/wine.git/?a=commit;h=c56bddf94e737565d9165d42…
Author: Daniel Lehman <dlehman25(a)gmail.com> Date: Mon Nov 2 20:12:10 2020 -0800 concrt140/tests: Add _Context::_CurrentContext tests. Signed-off-by: Daniel Lehman <dlehman25(a)gmail.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- configure | 1 + configure.ac | 1 + dlls/concrt140/tests/Makefile.in | 4 ++ dlls/concrt140/tests/concrt140.c | 79 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+) diff --git a/configure b/configure index ac6a7985cc7..4e76dbf9d02 100755 --- a/configure +++ b/configure @@ -20363,6 +20363,7 @@ wine_fn_config_makefile dlls/compstui enable_compstui wine_fn_config_makefile dlls/comsvcs enable_comsvcs wine_fn_config_makefile dlls/comsvcs/tests enable_tests wine_fn_config_makefile dlls/concrt140 enable_concrt140 +wine_fn_config_makefile dlls/concrt140/tests enable_tests wine_fn_config_makefile dlls/connect enable_connect wine_fn_config_makefile dlls/credui enable_credui wine_fn_config_makefile dlls/credui/tests enable_tests diff --git a/configure.ac b/configure.ac index 2f81fd22610..06031352866 100644 --- a/configure.ac +++ b/configure.ac @@ -3106,6 +3106,7 @@ WINE_CONFIG_MAKEFILE(dlls/compstui) WINE_CONFIG_MAKEFILE(dlls/comsvcs) WINE_CONFIG_MAKEFILE(dlls/comsvcs/tests) WINE_CONFIG_MAKEFILE(dlls/concrt140) +WINE_CONFIG_MAKEFILE(dlls/concrt140/tests) WINE_CONFIG_MAKEFILE(dlls/connect) WINE_CONFIG_MAKEFILE(dlls/credui) WINE_CONFIG_MAKEFILE(dlls/credui/tests) diff --git a/dlls/concrt140/tests/Makefile.in b/dlls/concrt140/tests/Makefile.in new file mode 100644 index 00000000000..e36fc37eb86 --- /dev/null +++ b/dlls/concrt140/tests/Makefile.in @@ -0,0 +1,4 @@ +TESTDLL = concrt140.dll + +C_SRCS = \ + concrt140.c diff --git a/dlls/concrt140/tests/concrt140.c b/dlls/concrt140/tests/concrt140.c new file mode 100644 index 00000000000..03e0b2850f2 --- /dev/null +++ b/dlls/concrt140/tests/concrt140.c @@ -0,0 +1,79 @@ +/* + * Copyright 2020 Daniel Lehman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "wine/test.h" + +typedef void (*vtable_ptr)(void); + +typedef struct { + const vtable_ptr *vtable; +} Context; + +typedef struct { + Context *ctx; +} _Context; + +static Context* (__cdecl *p_Context_CurrentContext)(void); +static _Context* (__cdecl *p__Context__CurrentContext)(_Context*); + +#define SETNOFAIL(x,y) x = (void*)GetProcAddress(module,y) +#define SET(x,y) do { SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y); } while(0) + +static BOOL init(void) +{ + HMODULE module; + + module = LoadLibraryA("concrt140.dll"); + if (!module) + { + win_skip("concrt140.dll not installed\n"); + return FALSE; + } + + SET(p__Context__CurrentContext, + "?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ"); + if(sizeof(void*) == 8) { /* 64-bit initialization */ + SET(p_Context_CurrentContext, + "?CurrentContext@Context@Concurrency@@SAPEAV12@XZ"); + } else { + SET(p_Context_CurrentContext, + "?CurrentContext@Context@Concurrency@@SAPAV12@XZ"); + } + + return TRUE; +} + +static void test_CurrentContext(void) +{ + _Context _ctx, *ret; + Context *ctx; + + ctx = p_Context_CurrentContext(); + ok(!!ctx, "got NULL\n"); + + memset(&_ctx, 0xcc, sizeof(_ctx)); + ret = p__Context__CurrentContext(&_ctx); + ok(_ctx.ctx == ctx, "expected %p, got %p\n", ctx, _ctx.ctx); + ok(ret == &_ctx, "expected %p, got %p\n", &_ctx, ret); +} + +START_TEST(concrt140) +{ + if (!init()) return; + test_CurrentContext(); +}
1
0
0
0
Daniel Lehman : msvcr120/tests: Add _Context::_CurrentContext tests.
by Alexandre Julliard
03 Nov '20
03 Nov '20
Module: wine Branch: master Commit: 782d4bc5357af0f917ec9dad91aea9e51ec339f2 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=782d4bc5357af0f917ec9dad…
Author: Daniel Lehman <dlehman25(a)gmail.com> Date: Mon Nov 2 20:12:09 2020 -0800 msvcr120/tests: Add _Context::_CurrentContext tests. Signed-off-by: Daniel Lehman <dlehman25(a)gmail.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcr120/tests/msvcr120.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/dlls/msvcr120/tests/msvcr120.c b/dlls/msvcr120/tests/msvcr120.c index a055feeac91..52531ddad72 100644 --- a/dlls/msvcr120/tests/msvcr120.c +++ b/dlls/msvcr120/tests/msvcr120.c @@ -157,6 +157,16 @@ typedef struct double i; } _Dcomplex; +typedef void (*vtable_ptr)(void); + +typedef struct { + const vtable_ptr *vtable; +} Context; + +typedef struct { + Context *ctx; +} _Context; + static char* (CDECL *p_setlocale)(int category, const char* locale); static struct MSVCRT_lconv* (CDECL *p_localeconv)(void); static size_t (CDECL *p_wcstombs_s)(size_t *ret, char* dest, size_t sz, const wchar_t* src, size_t max); @@ -208,6 +218,9 @@ static MSVCRT_bool (__thiscall *p__Condition_variable_wait_for)(_Condition_varia static void (__thiscall *p__Condition_variable_notify_one)(_Condition_variable*); static void (__thiscall *p__Condition_variable_notify_all)(_Condition_variable*); +static Context* (__cdecl *p_Context_CurrentContext)(void); +static _Context* (__cdecl *p__Context__CurrentContext)(_Context*); + #define SETNOFAIL(x,y) x = (void*)GetProcAddress(module,y) #define SET(x,y) do { SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y); } while(0) @@ -250,6 +263,7 @@ static BOOL init(void) SET(p_nexttowardl, "nexttowardl"); SET(p_wctrans, "wctrans"); SET(p_towctrans, "towctrans"); + SET(p__Context__CurrentContext, "?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ"); if(sizeof(void*) == 8) { /* 64-bit initialization */ SET(p_critical_section_ctor, "??0critical_section@Concurrency@@QEAA@XZ"); @@ -281,6 +295,8 @@ static BOOL init(void) "?notify_one@_Condition_variable@details@Concurrency@@QEAAXXZ"); SET(p__Condition_variable_notify_all, "?notify_all@_Condition_variable@details@Concurrency@@QEAAXXZ"); + SET(p_Context_CurrentContext, + "?CurrentContext@Context@Concurrency@@SAPEAV12@XZ"); } else { #ifdef __arm__ SET(p_critical_section_ctor, @@ -345,6 +361,8 @@ static BOOL init(void) SET(p__Condition_variable_notify_all, "?notify_all@_Condition_variable@details@Concurrency@@QAEXXZ"); #endif + SET(p_Context_CurrentContext, + "?CurrentContext@Context@Concurrency@@SAPAV12@XZ"); } init_thiscall_thunk(); @@ -1065,6 +1083,20 @@ static void test_towctrans(void) ok(ret == 'T', "towctrans('T', 1) returned %c, expected T\n", ret); } +static void test_CurrentContext(void) +{ + _Context _ctx, *ret; + Context *ctx; + + ctx = p_Context_CurrentContext(); + ok(!!ctx, "got NULL\n"); + + memset(&_ctx, 0xcc, sizeof(_ctx)); + ret = p__Context__CurrentContext(&_ctx); + ok(_ctx.ctx == ctx, "expected %p, got %p\n", ctx, _ctx.ctx); + ok(ret == &_ctx, "expected %p, got %p\n", &_ctx, ret); +} + START_TEST(msvcr120) { if (!init()) return; @@ -1086,4 +1118,5 @@ START_TEST(msvcr120) test__Cbuild(); test_nexttoward(); test_towctrans(); + test_CurrentContext(); }
1
0
0
0
Daniel Lehman : msvcr110: Add _Context::_CurrentContext.
by Alexandre Julliard
03 Nov '20
03 Nov '20
Module: wine Branch: master Commit: a29f606e08d702ffe0cf6487105427b1dec02bff URL:
https://source.winehq.org/git/wine.git/?a=commit;h=a29f606e08d702ffe0cf6487…
Author: Daniel Lehman <dlehman25(a)gmail.com> Date: Mon Nov 2 20:12:08 2020 -0800 msvcr110: Add _Context::_CurrentContext. Signed-off-by: Daniel Lehman <dlehman25(a)gmail.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/concrt140/concrt140.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr110/tests/msvcr110.c | 39 +++++++++++++++++++++++++++++++++++++ dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcrt/scheduler.c | 14 +++++++++++++ 6 files changed, 57 insertions(+), 4 deletions(-) diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec index 9a8ef13aaeb..ea8a3e00dc5 100644 --- a/dlls/concrt140/concrt140.spec +++ b/dlls/concrt140/concrt140.spec @@ -327,7 +327,7 @@ @ stub -arch=win64 ?_ConcRT_Trace@details@Concurrency@@YAXHPEB_WZZ @ stub -arch=i386 ?_Confirm_cancel@_Cancellation_beacon@details@Concurrency@@QAE_NXZ @ stub -arch=win64 ?_Confirm_cancel@_Cancellation_beacon@details@Concurrency@@QEAA_NXZ -@ stub ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ +@ cdecl ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ() msvcr120.?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ @ stub ?_Current_node@location@Concurrency@@SA?AV12@XZ @ stub -arch=i386 ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EAEXXZ @ stub -arch=win64 ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EEAAXXZ diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 425bdfdc21a..54196f63690 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -513,7 +513,7 @@ @ stub -arch=arm ?_Copy_str@exception@std@@AAAXPBD@Z @ stub -arch=i386 ?_Copy_str@exception@std@@AAEXPBD@Z @ stub -arch=win64 ?_Copy_str@exception@std@@AEAAXPEBD@Z -@ stub ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ +@ cdecl ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ(ptr) _Context__CurrentContext @ stub ?_Current_node@location@Concurrency@@SA?AV12@XZ @ stub -arch=arm ?_DeregisterCallback@_CancellationTokenState@details@Concurrency@@QAAXPAV_CancellationTokenRegistration@23@@Z @ stub -arch=i386 ?_DeregisterCallback@_CancellationTokenState@details@Concurrency@@QAEXPAV_CancellationTokenRegistration@23@@Z diff --git a/dlls/msvcr110/tests/msvcr110.c b/dlls/msvcr110/tests/msvcr110.c index 364dd26aa82..f88e3122ac9 100644 --- a/dlls/msvcr110/tests/msvcr110.c +++ b/dlls/msvcr110/tests/msvcr110.c @@ -31,6 +31,16 @@ #include <locale.h> +typedef void (*vtable_ptr)(void); + +typedef struct { + const vtable_ptr *vtable; +} Context; + +typedef struct { + Context *ctx; +} _Context; + static char* (CDECL *p_setlocale)(int category, const char* locale); static size_t (CDECL *p___strncnt)(const char *str, size_t count); @@ -39,6 +49,9 @@ static unsigned int (CDECL *p__CurrentScheduler__GetNumberOfVirtualProcessors)(v static unsigned int (CDECL *p_CurrentScheduler_Id)(void); static unsigned int (CDECL *p__CurrentScheduler__Id)(void); +static Context* (__cdecl *p_Context_CurrentContext)(void); +static _Context* (__cdecl *p__Context__CurrentContext)(_Context*); + #define SETNOFAIL(x,y) x = (void*)GetProcAddress(module,y) #define SET(x,y) do { SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y); } while(0) @@ -60,6 +73,17 @@ static BOOL init(void) SET(p_CurrentScheduler_Id, "?Id@CurrentScheduler@Concurrency@@SAIXZ"); SET(p__CurrentScheduler__Id, "?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ"); + SET(p__Context__CurrentContext, "?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ"); + + if(sizeof(void*) == 8) + { + SET(p_Context_CurrentContext, "?CurrentContext@Context@Concurrency@@SAPEAV12@XZ"); + } + else + { + SET(p_Context_CurrentContext, "?CurrentContext@Context@Concurrency@@SAPAV12@XZ"); + } + return TRUE; } @@ -146,10 +170,25 @@ static void test___strncnt(void) } } +static void test_CurrentContext(void) +{ + _Context _ctx, *ret; + Context *ctx; + + ctx = p_Context_CurrentContext(); + ok(!!ctx, "got NULL\n"); + + memset(&_ctx, 0xcc, sizeof(_ctx)); + ret = p__Context__CurrentContext(&_ctx); + ok(_ctx.ctx == ctx, "expected %p, got %p\n", ctx, _ctx.ctx); + ok(ret == &_ctx, "expected %p, got %p\n", &_ctx, ret); +} + START_TEST(msvcr110) { if (!init()) return; test_CurrentScheduler(); /* MUST be first (at least among Concurrency tests) */ test_setlocale(); test___strncnt(); + test_CurrentContext(); } diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 368f376939d..f1e6fe210a7 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -509,7 +509,7 @@ @ stub -arch=arm ?_Copy_str@exception@std@@AAAXPBD@Z @ stub -arch=i386 ?_Copy_str@exception@std@@AAEXPBD@Z @ stub -arch=win64 ?_Copy_str@exception@std@@AEAAXPEBD@Z -@ stub ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ +@ cdecl ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ() _Context__CurrentContext @ stub ?_Current_node@location@Concurrency@@SA?AV12@XZ @ stub -arch=arm ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EAAXXZ @ stub -arch=i386 ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EAEXXZ diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 54a02bb0a90..87a55210951 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -505,7 +505,7 @@ @ stub -arch=arm ?_Copy_str@exception@std@@AAAXPBD@Z @ stub -arch=i386 ?_Copy_str@exception@std@@AAEXPBD@Z @ stub -arch=win64 ?_Copy_str@exception@std@@AEAAXPEBD@Z -@ stub ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ +@ cdecl ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ() msvcr120.?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ @ stub ?_Current_node@location@Concurrency@@SA?AV12@XZ @ stub -arch=arm ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EAAXXZ @ stub -arch=i386 ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EAEXXZ diff --git a/dlls/msvcrt/scheduler.c b/dlls/msvcrt/scheduler.c index 59e177b5aec..0701839a9dc 100644 --- a/dlls/msvcrt/scheduler.c +++ b/dlls/msvcrt/scheduler.c @@ -68,6 +68,10 @@ typedef struct { #define call_Context_dtor(this, flags) CALL_VTBL_FUNC(this, 20, \ Context*, (Context*, unsigned int), (this, flags)) +typedef struct { + Context *context; +} _Context; + union allocator_cache_entry { struct _free { int depth; @@ -278,6 +282,16 @@ unsigned int __cdecl Context_VirtualProcessorId(void) return ctx ? call_Context_GetVirtualProcessorId(ctx) : -1; } +#if _MSVCR_VER > 100 +/* ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ */ +_Context *__cdecl _Context__CurrentContext(_Context *ret) +{ + TRACE("(%p)\n", ret); + ret->context = Context_CurrentContext(); + return ret; +} +#endif + DEFINE_THISCALL_WRAPPER(ExternalContextBase_GetId, 4) unsigned int __thiscall ExternalContextBase_GetId(const ExternalContextBase *this) {
1
0
0
0
Daniel Lehman : msvcr110/tests: Use macro to get function address.
by Alexandre Julliard
03 Nov '20
03 Nov '20
Module: wine Branch: master Commit: b698da22985b576618ef8c779121cbe79c349ef0 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=b698da22985b576618ef8c77…
Author: Daniel Lehman <dlehman25(a)gmail.com> Date: Mon Nov 2 20:12:07 2020 -0800 msvcr110/tests: Use macro to get function address. Signed-off-by: Daniel Lehman <dlehman25(a)gmail.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcr110/tests/msvcr110.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/dlls/msvcr110/tests/msvcr110.c b/dlls/msvcr110/tests/msvcr110.c index 09876131f07..364dd26aa82 100644 --- a/dlls/msvcr110/tests/msvcr110.c +++ b/dlls/msvcr110/tests/msvcr110.c @@ -39,6 +39,9 @@ static unsigned int (CDECL *p__CurrentScheduler__GetNumberOfVirtualProcessors)(v static unsigned int (CDECL *p_CurrentScheduler_Id)(void); static unsigned int (CDECL *p__CurrentScheduler__Id)(void); +#define SETNOFAIL(x,y) x = (void*)GetProcAddress(module,y) +#define SET(x,y) do { SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y); } while(0) + static BOOL init(void) { HMODULE module; @@ -50,12 +53,12 @@ static BOOL init(void) return FALSE; } - p_setlocale = (void*)GetProcAddress(module, "setlocale"); - p___strncnt = (void*)GetProcAddress(module, "__strncnt"); - p_CurrentScheduler_GetNumberOfVirtualProcessors = (void*)GetProcAddress(module, "?GetNumberOfVirtualProcessors@CurrentScheduler@Concurrency@@SAIXZ"); - p__CurrentScheduler__GetNumberOfVirtualProcessors = (void*)GetProcAddress(module, "?_GetNumberOfVirtualProcessors@_CurrentScheduler@details@Concurrency@@SAIXZ"); - p_CurrentScheduler_Id = (void*)GetProcAddress(module, "?Id@CurrentScheduler@Concurrency@@SAIXZ"); - p__CurrentScheduler__Id = (void*)GetProcAddress(module, "?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ"); + SET(p_setlocale, "setlocale"); + SET(p___strncnt, "__strncnt"); + SET(p_CurrentScheduler_GetNumberOfVirtualProcessors, "?GetNumberOfVirtualProcessors@CurrentScheduler@Concurrency@@SAIXZ"); + SET(p__CurrentScheduler__GetNumberOfVirtualProcessors, "?_GetNumberOfVirtualProcessors@_CurrentScheduler@details@Concurrency@@SAIXZ"); + SET(p_CurrentScheduler_Id, "?Id@CurrentScheduler@Concurrency@@SAIXZ"); + SET(p__CurrentScheduler__Id, "?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ"); return TRUE; }
1
0
0
0
← Newer
1
...
78
79
80
81
82
83
84
85
86
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Results per page:
10
25
50
100
200