ole32: Fix IsEqual() for antimoniker.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
b9ce037abb
commit
9a4959de4a
|
@ -53,6 +53,7 @@ static inline AntiMonikerImpl *impl_from_IROTData(IROTData *iface)
|
|||
return CONTAINING_RECORD(iface, AntiMonikerImpl, IROTData_iface);
|
||||
}
|
||||
|
||||
static AntiMonikerImpl *unsafe_impl_from_IMoniker(IMoniker *iface);
|
||||
|
||||
/*******************************************************************************
|
||||
* AntiMoniker_QueryInterface
|
||||
|
@ -308,22 +309,20 @@ AntiMonikerImpl_Enum(IMoniker* iface,BOOL fForward, IEnumMoniker** ppenumMoniker
|
|||
/******************************************************************************
|
||||
* AntiMoniker_IsEqual
|
||||
******************************************************************************/
|
||||
static HRESULT WINAPI
|
||||
AntiMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
|
||||
static HRESULT WINAPI AntiMonikerImpl_IsEqual(IMoniker *iface, IMoniker *other)
|
||||
{
|
||||
DWORD mkSys;
|
||||
AntiMonikerImpl *moniker = impl_from_IMoniker(iface), *other_moniker;
|
||||
|
||||
TRACE("(%p,%p)\n",iface,pmkOtherMoniker);
|
||||
TRACE("%p, %p.\n", iface, other);
|
||||
|
||||
if (pmkOtherMoniker==NULL)
|
||||
if (!other)
|
||||
return E_INVALIDARG;
|
||||
|
||||
other_moniker = unsafe_impl_from_IMoniker(other);
|
||||
if (!other_moniker)
|
||||
return S_FALSE;
|
||||
|
||||
IMoniker_IsSystemMoniker(pmkOtherMoniker,&mkSys);
|
||||
|
||||
if (mkSys==MKSYS_ANTIMONIKER)
|
||||
return S_OK;
|
||||
else
|
||||
return S_FALSE;
|
||||
return moniker->count == other_moniker->count ? S_OK : S_FALSE;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
|
@ -588,6 +587,13 @@ static const IMonikerVtbl VT_AntiMonikerImpl =
|
|||
AntiMonikerImpl_IsSystemMoniker
|
||||
};
|
||||
|
||||
static AntiMonikerImpl *unsafe_impl_from_IMoniker(IMoniker *iface)
|
||||
{
|
||||
if (iface->lpVtbl != &VT_AntiMonikerImpl)
|
||||
return NULL;
|
||||
return CONTAINING_RECORD(iface, AntiMonikerImpl, IMoniker_iface);
|
||||
}
|
||||
|
||||
/********************************************************************************/
|
||||
/* Virtual function table for the IROTData class. */
|
||||
static const IROTDataVtbl VT_ROTDataImpl =
|
||||
|
|
|
@ -2331,11 +2331,9 @@ todo_wine
|
|||
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IMoniker_IsEqual(moniker, moniker2);
|
||||
todo_wine
|
||||
ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IMoniker_IsEqual(moniker2, moniker);
|
||||
todo_wine
|
||||
ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IMoniker_Hash(moniker, &hash);
|
||||
|
@ -2374,11 +2372,9 @@ todo_wine
|
|||
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IMoniker_IsEqual(moniker, moniker2);
|
||||
todo_wine
|
||||
ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IMoniker_IsEqual(moniker2, moniker);
|
||||
todo_wine
|
||||
ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IMoniker_Hash(moniker, &hash);
|
||||
|
@ -2403,7 +2399,6 @@ todo_wine
|
|||
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IMoniker_IsEqual(moniker, NULL);
|
||||
todo_wine
|
||||
ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
|
||||
|
||||
IStream_Release(stream);
|
||||
|
|
Loading…
Reference in New Issue