Module: wine Branch: master Commit: 3f10a59ff145967429c4384e0313213296ef6523 URL: https://source.winehq.org/git/wine.git/?a=commit;h=3f10a59ff145967429c4384e0...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Jan 29 16:57:04 2020 +0300
ole32: Fix (item moniker + antimoniker) composing.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ole32/itemmoniker.c | 14 ++++++-------- dlls/ole32/tests/moniker.c | 6 +----- 2 files changed, 7 insertions(+), 13 deletions(-)
diff --git a/dlls/ole32/itemmoniker.c b/dlls/ole32/itemmoniker.c index 19876aa363..78b23ae633 100644 --- a/dlls/ole32/itemmoniker.c +++ b/dlls/ole32/itemmoniker.c @@ -518,7 +518,7 @@ static HRESULT WINAPI ItemMonikerImpl_ComposeWith(IMoniker* iface, IMoniker** ppmkComposite) { HRESULT res=S_OK; - DWORD mkSys,mkSys2; + DWORD mkSys,mkSys2, order; IEnumMoniker* penumMk=0; IMoniker *pmostLeftMk=0; IMoniker* tempMkComposite=0; @@ -530,16 +530,14 @@ static HRESULT WINAPI ItemMonikerImpl_ComposeWith(IMoniker* iface,
*ppmkComposite=0;
- IMoniker_IsSystemMoniker(pmkRight,&mkSys); - - /* If pmkRight is an anti-moniker, the returned moniker is NULL */ - if(mkSys==MKSYS_ANTIMONIKER) - return res; - + if (is_anti_moniker(pmkRight, &order)) + { + return order > 1 ? create_anti_moniker(order - 1, ppmkComposite) : S_OK; + } else /* if pmkRight is a composite whose leftmost component is an anti-moniker, */ /* the returned moniker is the composite after the leftmost anti-moniker is removed. */ - + IMoniker_IsSystemMoniker(pmkRight,&mkSys); if(mkSys==MKSYS_GENERICCOMPOSITE){
res=IMoniker_Enum(pmkRight,TRUE,&penumMk); diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c index 61aa0b4a96..ea1e5b1933 100644 --- a/dlls/ole32/tests/moniker.c +++ b/dlls/ole32/tests/moniker.c @@ -2414,16 +2414,12 @@ todo_wine anti = create_antimoniker(2); hr = IMoniker_ComposeWith(moniker, anti, TRUE, &moniker2); ok(hr == S_OK, "Failed to compose, hr %#x.\n", hr); -todo_wine - ok(!!moniker2, "Unexpected pointer.\n"); -if (moniker2) -{ TEST_MONIKER_TYPE(moniker2, MKSYS_ANTIMONIKER); hr = IMoniker_Hash(moniker2, &hash); ok(hr == S_OK, "Failed to get hash, hr %#x.\n", hr); ok(hash == 0x80000001, "Unexpected hash.\n"); IMoniker_Release(moniker2); -} + IMoniker_Release(anti);
IMoniker_Release(moniker);