comsvcs: Add IROTData stub for "new" moniker.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
015ad98f54
commit
2485f2d035
|
@ -54,6 +54,7 @@ typedef struct holder
|
||||||
struct new_moniker
|
struct new_moniker
|
||||||
{
|
{
|
||||||
IMoniker IMoniker_iface;
|
IMoniker IMoniker_iface;
|
||||||
|
IROTData IROTData_iface;
|
||||||
LONG refcount;
|
LONG refcount;
|
||||||
CLSID clsid;
|
CLSID clsid;
|
||||||
};
|
};
|
||||||
|
@ -75,6 +76,11 @@ static struct new_moniker *impl_from_IMoniker(IMoniker *iface)
|
||||||
return CONTAINING_RECORD(iface, struct new_moniker, IMoniker_iface);
|
return CONTAINING_RECORD(iface, struct new_moniker, IMoniker_iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct new_moniker *impl_from_IROTData(IROTData *iface)
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD(iface, struct new_moniker, IROTData_iface);
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI holder_QueryInterface(IHolder *iface, REFIID riid, void **object)
|
static HRESULT WINAPI holder_QueryInterface(IHolder *iface, REFIID riid, void **object)
|
||||||
{
|
{
|
||||||
holder *This = impl_from_IHolder(iface);
|
holder *This = impl_from_IHolder(iface);
|
||||||
|
@ -429,6 +435,8 @@ static const IClassFactoryVtbl comsvcscf_vtbl =
|
||||||
|
|
||||||
static HRESULT WINAPI new_moniker_QueryInterface(IMoniker* iface, REFIID riid, void **obj)
|
static HRESULT WINAPI new_moniker_QueryInterface(IMoniker* iface, REFIID riid, void **obj)
|
||||||
{
|
{
|
||||||
|
struct new_moniker *moniker = impl_from_IMoniker(iface);
|
||||||
|
|
||||||
TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
|
TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
|
||||||
|
|
||||||
*obj = NULL;
|
*obj = NULL;
|
||||||
|
@ -440,6 +448,10 @@ static HRESULT WINAPI new_moniker_QueryInterface(IMoniker* iface, REFIID riid, v
|
||||||
{
|
{
|
||||||
*obj = iface;
|
*obj = iface;
|
||||||
}
|
}
|
||||||
|
else if (IsEqualIID(&IID_IROTData, riid))
|
||||||
|
{
|
||||||
|
*obj = &moniker->IROTData_iface;
|
||||||
|
}
|
||||||
|
|
||||||
if (*obj)
|
if (*obj)
|
||||||
{
|
{
|
||||||
|
@ -738,6 +750,39 @@ static const IMonikerVtbl new_moniker_vtbl =
|
||||||
new_moniker_IsSystemMoniker
|
new_moniker_IsSystemMoniker
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static HRESULT WINAPI new_moniker_rotdata_QueryInterface(IROTData *iface, REFIID riid, void **obj)
|
||||||
|
{
|
||||||
|
struct new_moniker *moniker = impl_from_IROTData(iface);
|
||||||
|
return IMoniker_QueryInterface(&moniker->IMoniker_iface, riid, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI new_moniker_rotdata_AddRef(IROTData *iface)
|
||||||
|
{
|
||||||
|
struct new_moniker *moniker = impl_from_IROTData(iface);
|
||||||
|
return IMoniker_AddRef(&moniker->IMoniker_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI new_moniker_rotdata_Release(IROTData *iface)
|
||||||
|
{
|
||||||
|
struct new_moniker *moniker = impl_from_IROTData(iface);
|
||||||
|
return IMoniker_Release(&moniker->IMoniker_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI new_moniker_rotdata_GetComparisonData(IROTData *iface, byte *data, ULONG data_len, ULONG *length)
|
||||||
|
{
|
||||||
|
FIXME("%p, %p, %u, %p.\n", iface, data, data_len, length);
|
||||||
|
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IROTDataVtbl new_moniker_rotdata_vtbl =
|
||||||
|
{
|
||||||
|
new_moniker_rotdata_QueryInterface,
|
||||||
|
new_moniker_rotdata_AddRef,
|
||||||
|
new_moniker_rotdata_Release,
|
||||||
|
new_moniker_rotdata_GetComparisonData,
|
||||||
|
};
|
||||||
|
|
||||||
static const BYTE guid_conv_table[256] =
|
static const BYTE guid_conv_table[256] =
|
||||||
{
|
{
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
|
||||||
|
@ -837,6 +882,7 @@ static HRESULT new_moniker_parse_displayname(IBindCtx *pbc, LPOLESTR name, ULONG
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
moniker->IMoniker_iface.lpVtbl = &new_moniker_vtbl;
|
moniker->IMoniker_iface.lpVtbl = &new_moniker_vtbl;
|
||||||
|
moniker->IROTData_iface.lpVtbl = &new_moniker_rotdata_vtbl;
|
||||||
moniker->refcount = 1;
|
moniker->refcount = 1;
|
||||||
moniker->clsid = guid;
|
moniker->clsid = guid;
|
||||||
|
|
||||||
|
|
|
@ -301,6 +301,7 @@ static void test_new_moniker(void)
|
||||||
BIND_OPTS2 bind_opts;
|
BIND_OPTS2 bind_opts;
|
||||||
ULARGE_INTEGER size;
|
ULARGE_INTEGER size;
|
||||||
DWORD moniker_type;
|
DWORD moniker_type;
|
||||||
|
IROTData *rot_data;
|
||||||
IBindCtx *bindctx;
|
IBindCtx *bindctx;
|
||||||
FILETIME filetime;
|
FILETIME filetime;
|
||||||
DWORD hash, eaten;
|
DWORD hash, eaten;
|
||||||
|
@ -318,6 +319,10 @@ static void test_new_moniker(void)
|
||||||
ok(hr == S_OK, "Failed to parse display name, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to parse display name, hr %#x.\n", hr);
|
||||||
ok(eaten == 40, "Unexpected eaten length %u.\n", eaten);
|
ok(eaten == 40, "Unexpected eaten length %u.\n", eaten);
|
||||||
|
|
||||||
|
hr = IMoniker_QueryInterface(moniker, &IID_IROTData, (void **)&rot_data);
|
||||||
|
ok(hr == S_OK, "Failed to get IROTData, hr %#x.\n", hr);
|
||||||
|
IROTData_Release(rot_data);
|
||||||
|
|
||||||
eaten = 0;
|
eaten = 0;
|
||||||
hr = IMoniker_ParseDisplayName(moniker, bindctx, NULL, (WCHAR *)L"new:20d04fe0-3aea-1069-a2d8-08002b30309d",
|
hr = IMoniker_ParseDisplayName(moniker, bindctx, NULL, (WCHAR *)L"new:20d04fe0-3aea-1069-a2d8-08002b30309d",
|
||||||
&eaten, &moniker2);
|
&eaten, &moniker2);
|
||||||
|
|
Loading…
Reference in New Issue