Commit 3f10a59f authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

ole32: Fix (item moniker + antimoniker) composing.

parent c94b31ee
...@@ -518,7 +518,7 @@ static HRESULT WINAPI ItemMonikerImpl_ComposeWith(IMoniker* iface, ...@@ -518,7 +518,7 @@ static HRESULT WINAPI ItemMonikerImpl_ComposeWith(IMoniker* iface,
IMoniker** ppmkComposite) IMoniker** ppmkComposite)
{ {
HRESULT res=S_OK; HRESULT res=S_OK;
DWORD mkSys,mkSys2; DWORD mkSys,mkSys2, order;
IEnumMoniker* penumMk=0; IEnumMoniker* penumMk=0;
IMoniker *pmostLeftMk=0; IMoniker *pmostLeftMk=0;
IMoniker* tempMkComposite=0; IMoniker* tempMkComposite=0;
...@@ -530,16 +530,14 @@ static HRESULT WINAPI ItemMonikerImpl_ComposeWith(IMoniker* iface, ...@@ -530,16 +530,14 @@ static HRESULT WINAPI ItemMonikerImpl_ComposeWith(IMoniker* iface,
*ppmkComposite=0; *ppmkComposite=0;
IMoniker_IsSystemMoniker(pmkRight,&mkSys); if (is_anti_moniker(pmkRight, &order))
{
/* If pmkRight is an anti-moniker, the returned moniker is NULL */ return order > 1 ? create_anti_moniker(order - 1, ppmkComposite) : S_OK;
if(mkSys==MKSYS_ANTIMONIKER) }
return res;
else else
/* if pmkRight is a composite whose leftmost component is an anti-moniker, */ /* 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. */ /* the returned moniker is the composite after the leftmost anti-moniker is removed. */
IMoniker_IsSystemMoniker(pmkRight,&mkSys);
if(mkSys==MKSYS_GENERICCOMPOSITE){ if(mkSys==MKSYS_GENERICCOMPOSITE){
res=IMoniker_Enum(pmkRight,TRUE,&penumMk); res=IMoniker_Enum(pmkRight,TRUE,&penumMk);
......
...@@ -2414,16 +2414,12 @@ todo_wine ...@@ -2414,16 +2414,12 @@ todo_wine
anti = create_antimoniker(2); anti = create_antimoniker(2);
hr = IMoniker_ComposeWith(moniker, anti, TRUE, &moniker2); hr = IMoniker_ComposeWith(moniker, anti, TRUE, &moniker2);
ok(hr == S_OK, "Failed to compose, hr %#x.\n", hr); 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); TEST_MONIKER_TYPE(moniker2, MKSYS_ANTIMONIKER);
hr = IMoniker_Hash(moniker2, &hash); hr = IMoniker_Hash(moniker2, &hash);
ok(hr == S_OK, "Failed to get hash, hr %#x.\n", hr); ok(hr == S_OK, "Failed to get hash, hr %#x.\n", hr);
ok(hash == 0x80000001, "Unexpected hash.\n"); ok(hash == 0x80000001, "Unexpected hash.\n");
IMoniker_Release(moniker2); IMoniker_Release(moniker2);
}
IMoniker_Release(anti); IMoniker_Release(anti);
IMoniker_Release(moniker); IMoniker_Release(moniker);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment