Module: wine Branch: master Commit: 3f0afe8e5ca286b6b26e7a20b16e47f8a99a2a96 URL: https://gitlab.winehq.org/wine/wine/-/commit/3f0afe8e5ca286b6b26e7a20b16e47f...
Author: Michael Stefaniuc mstefani@winehq.org Date: Sat Dec 17 23:38:41 2022 +0100
dmcompos: Return a valid pointer from ComposeSegmentFromTemplate().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53941
---
dlls/dmcompos/composer.c | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-)
diff --git a/dlls/dmcompos/composer.c b/dlls/dmcompos/composer.c index a13a77bff94..a2a58396ee5 100644 --- a/dlls/dmcompos/composer.c +++ b/dlls/dmcompos/composer.c @@ -77,12 +77,38 @@ static ULONG WINAPI IDirectMusicComposerImpl_Release(IDirectMusicComposer *iface
/* IDirectMusicComposerImpl IDirectMusicComposer part: */ static HRESULT WINAPI IDirectMusicComposerImpl_ComposeSegmentFromTemplate(IDirectMusicComposer *iface, - IDirectMusicStyle *pStyle, IDirectMusicSegment *pTemplate, WORD wActivity, - IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) + IDirectMusicStyle *style, IDirectMusicSegment *template, WORD activity, IDirectMusicChordMap *chordmap, + IDirectMusicSegment **segment) { - IDirectMusicComposerImpl *This = impl_from_IDirectMusicComposer(iface); - FIXME("(%p, %p, %p, %d, %p, %p): stub\n", This, pStyle, pTemplate, wActivity, pChordMap, ppSegment); - return S_OK; + IDirectMusicComposerImpl *This = impl_from_IDirectMusicComposer(iface); + IDirectMusicTrack *track; + HRESULT hr; + + FIXME("(%p, %p, %p, %d, %p, %p): semi-stub\n", This, style, template, activity, chordmap, segment); + + if (!segment) + return E_POINTER; + if (!template) + return E_INVALIDARG; + + if (!style) { + hr = IDirectMusicSegment_GetTrack(template, &CLSID_DirectMusicStyleTrack, 0xFFFFFFFF, + DMUS_SEG_ANYTRACK, &track); + if (FAILED(hr)) + return E_INVALIDARG; + else + IDirectMusicTrack_Release(track); /* Temp to not leak memory */ + } + if (!chordmap) { + hr = IDirectMusicSegment_GetTrack(template, &CLSID_DirectMusicChordMapTrack, 0xFFFFFFFF, + DMUS_SEG_ANYTRACK, &track); + if (FAILED(hr)) + return E_INVALIDARG; + else + IDirectMusicTrack_Release(track); /* Temp to not leak memory */ + } + + return IDirectMusicSegment_Clone(template, -1, 0, segment); }
static HRESULT WINAPI IDirectMusicComposerImpl_ComposeSegmentFromShape(IDirectMusicComposer *iface,