Module: wine Branch: master Commit: ec2a7a325176c6c8d3278bcaab9bae8418eed880 URL: https://gitlab.winehq.org/wine/wine/-/commit/ec2a7a325176c6c8d3278bcaab9bae8...
Author: Rémi Bernon rbernon@codeweavers.com Date: Mon Sep 4 11:36:10 2023 +0200
dmsynth: Move constructor parameter checks to class factory.
---
dlls/dmsynth/dmsynth_main.c | 28 +++++++++++++++++----------- dlls/dmsynth/dmsynth_private.h | 4 ++-- dlls/dmsynth/synth.c | 16 +++++++--------- dlls/dmsynth/synthsink.c | 14 ++++++-------- 4 files changed, 32 insertions(+), 30 deletions(-)
diff --git a/dlls/dmsynth/dmsynth_main.c b/dlls/dmsynth/dmsynth_main.c index edeaab8474e..84caeceb472 100644 --- a/dlls/dmsynth/dmsynth_main.c +++ b/dlls/dmsynth/dmsynth_main.c @@ -27,7 +27,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(dmsynth);
typedef struct { IClassFactory IClassFactory_iface; - HRESULT (*fnCreateInstance)(REFIID riid, void **ppv); + HRESULT (*create_instance)(IUnknown **ret_iface); } IClassFactoryImpl;
/****************************************************************** @@ -68,17 +68,24 @@ static ULONG WINAPI ClassFactory_Release(IClassFactory *iface) return 1; /* non-heap based object */ }
-static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter, - REFIID riid, void **ppv) +static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *unk_outer, + REFIID riid, void **ret_iface) { - IClassFactoryImpl *This = impl_from_IClassFactory(iface); + IClassFactoryImpl *This = impl_from_IClassFactory(iface); + IUnknown *object; + HRESULT hr;
- TRACE ("(%p, %s, %p)\n", pUnkOuter, debugstr_dmguid(riid), ppv); + TRACE("(%p, %s, %p)\n", unk_outer, debugstr_dmguid(riid), ret_iface);
- if (pUnkOuter) - return CLASS_E_NOAGGREGATION; + *ret_iface = NULL; + if (unk_outer) return CLASS_E_NOAGGREGATION; + if (SUCCEEDED(hr = This->create_instance(&object))) + { + hr = IUnknown_QueryInterface(object, riid, ret_iface); + IUnknown_Release(object); + }
- return This->fnCreateInstance(riid, ppv); + return hr; }
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock) @@ -95,9 +102,8 @@ static const IClassFactoryVtbl classfactory_vtbl = { ClassFactory_LockServer };
-static IClassFactoryImpl Synth_CF = {{&classfactory_vtbl}, DMUSIC_CreateDirectMusicSynthImpl}; -static IClassFactoryImpl SynthSink_CF = {{&classfactory_vtbl}, - DMUSIC_CreateDirectMusicSynthSinkImpl}; +static IClassFactoryImpl Synth_CF = {{&classfactory_vtbl}, synth_create}; +static IClassFactoryImpl SynthSink_CF = {{&classfactory_vtbl}, synth_sink_create};
/****************************************************************** diff --git a/dlls/dmsynth/dmsynth_private.h b/dlls/dmsynth/dmsynth_private.h index 35c87775cf7..529b46ca978 100644 --- a/dlls/dmsynth/dmsynth_private.h +++ b/dlls/dmsynth/dmsynth_private.h @@ -43,8 +43,8 @@ /***************************************************************************** * ClassFactory */ -extern HRESULT DMUSIC_CreateDirectMusicSynthImpl(REFIID riid, void **ppobj); -extern HRESULT DMUSIC_CreateDirectMusicSynthSinkImpl(REFIID riid, void **ppobj); +extern HRESULT synth_create(IUnknown **ret_iface); +extern HRESULT synth_sink_create(IUnknown **ret_iface);
/***************************************************************************** * Misc. diff --git a/dlls/dmsynth/synth.c b/dlls/dmsynth/synth.c index 00883505377..e07e47490bd 100644 --- a/dlls/dmsynth/synth.c +++ b/dlls/dmsynth/synth.c @@ -737,19 +737,18 @@ static const IKsControlVtbl synth_control_vtbl = synth_control_KsEvent, };
-HRESULT DMUSIC_CreateDirectMusicSynthImpl(REFIID riid, void **ppobj) +HRESULT synth_create(IUnknown **ret_iface) { struct synth *obj; - HRESULT hr;
- TRACE("(%s, %p)\n", debugstr_guid(riid), ppobj); + TRACE("(%p)\n", ret_iface);
- *ppobj = NULL; + *ret_iface = NULL; if (!(obj = calloc(1, sizeof(*obj)))) return E_OUTOFMEMORY; obj->IDirectMusicSynth8_iface.lpVtbl = &synth_vtbl; obj->IKsControl_iface.lpVtbl = &synth_control_vtbl; obj->ref = 1; - /* fill in caps */ + obj->caps.dwSize = sizeof(DMUS_PORTCAPS); obj->caps.dwFlags = DMUS_PC_DLS | DMUS_PC_SOFTWARESYNTH | DMUS_PC_DIRECTSOUND | DMUS_PC_DLS2 | DMUS_PC_AUDIOPATH | DMUS_PC_WAVE; obj->caps.guidPort = CLSID_DirectMusicSynth; @@ -762,8 +761,7 @@ HRESULT DMUSIC_CreateDirectMusicSynthImpl(REFIID riid, void **ppobj) obj->caps.dwEffectFlags = DMUS_EFFECT_REVERB; lstrcpyW(obj->caps.wszDescription, L"Microsoft Synthesizer");
- hr = IDirectMusicSynth8_QueryInterface(&obj->IDirectMusicSynth8_iface, riid, ppobj); - IDirectMusicSynth8_Release(&obj->IDirectMusicSynth8_iface); - - return hr; + TRACE("Created DirectMusicSynth %p\n", obj); + *ret_iface = (IUnknown *)&obj->IDirectMusicSynth8_iface; + return S_OK; } diff --git a/dlls/dmsynth/synthsink.c b/dlls/dmsynth/synthsink.c index e86763cccd0..6a2a7269092 100644 --- a/dlls/dmsynth/synthsink.c +++ b/dlls/dmsynth/synthsink.c @@ -371,29 +371,27 @@ static const IKsControlVtbl synth_sink_control = synth_sink_control_KsEvent, };
-HRESULT DMUSIC_CreateDirectMusicSynthSinkImpl(REFIID riid, void **ret_iface) +HRESULT synth_sink_create(IUnknown **ret_iface) { struct synth_sink *obj; HRESULT hr;
- TRACE("(%s, %p)\n", debugstr_guid(riid), ret_iface); + TRACE("(%p)\n", ret_iface);
*ret_iface = NULL; - if (!(obj = calloc(1, sizeof(*obj)))) return E_OUTOFMEMORY; obj->IDirectMusicSynthSink_iface.lpVtbl = &synth_sink_vtbl; obj->IKsControl_iface.lpVtbl = &synth_sink_control; obj->ref = 1;
- hr = CoCreateInstance(&CLSID_SystemClock, NULL, CLSCTX_INPROC_SERVER, &IID_IReferenceClock, (LPVOID*)&obj->latency_clock); + hr = CoCreateInstance(&CLSID_SystemClock, NULL, CLSCTX_INPROC_SERVER, &IID_IReferenceClock, (void **)&obj->latency_clock); if (FAILED(hr)) { free(obj); return hr; }
- hr = IDirectMusicSynthSink_QueryInterface(&obj->IDirectMusicSynthSink_iface, riid, ret_iface); - IDirectMusicSynthSink_Release(&obj->IDirectMusicSynthSink_iface); - - return hr; + TRACE("Created DirectMusicSynthSink %p\n", obj); + *ret_iface = (IUnknown *)&obj->IDirectMusicSynthSink_iface; + return S_OK; }