mscoree: COM cleanup for the ICLRRuntimeInfo iface. (2nd try)
Michael Stefaniuc
mstefani at redhat.de
Thu Aug 18 17:43:17 CDT 2011
---
Fix test failure spotted by Dan Kegel.
dlls/mscoree/metahost.c | 28 +++++++++++++++++-----------
dlls/mscoree/mscoree_private.h | 2 +-
2 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/dlls/mscoree/metahost.c b/dlls/mscoree/metahost.c
index 8fb846c..895d7f3 100644
--- a/dlls/mscoree/metahost.c
+++ b/dlls/mscoree/metahost.c
@@ -51,9 +51,9 @@ static const struct ICLRRuntimeInfoVtbl CLRRuntimeInfoVtbl;
#define NUM_RUNTIMES 3
static struct CLRRuntimeInfo runtimes[NUM_RUNTIMES] = {
- {&CLRRuntimeInfoVtbl, net_11_subdir, 1, 1, 4322, 0},
- {&CLRRuntimeInfoVtbl, net_20_subdir, 2, 0, 50727, 0},
- {&CLRRuntimeInfoVtbl, net_40_subdir, 4, 0, 30319, 0}
+ {{&CLRRuntimeInfoVtbl}, net_11_subdir, 1, 1, 4322, 0},
+ {{&CLRRuntimeInfoVtbl}, net_20_subdir, 2, 0, 50727, 0},
+ {{&CLRRuntimeInfoVtbl}, net_40_subdir, 4, 0, 30319, 0}
};
static int runtimes_initialized;
@@ -311,6 +311,11 @@ void expect_no_runtimes(void)
}
}
+static inline CLRRuntimeInfo *impl_from_ICLRRuntimeInfo(ICLRRuntimeInfo *iface)
+{
+ return CONTAINING_RECORD(iface, CLRRuntimeInfo, ICLRRuntimeInfo_iface);
+}
+
static HRESULT WINAPI CLRRuntimeInfo_QueryInterface(ICLRRuntimeInfo* iface,
REFIID riid,
void **ppvObject)
@@ -346,7 +351,7 @@ static ULONG WINAPI CLRRuntimeInfo_Release(ICLRRuntimeInfo* iface)
static HRESULT WINAPI CLRRuntimeInfo_GetVersionString(ICLRRuntimeInfo* iface,
LPWSTR pwzBuffer, DWORD *pcchBuffer)
{
- struct CLRRuntimeInfo *This = (struct CLRRuntimeInfo*)iface;
+ struct CLRRuntimeInfo *This = impl_from_ICLRRuntimeInfo(iface);
DWORD buffer_size = *pcchBuffer;
HRESULT hr = S_OK;
char version[11];
@@ -475,7 +480,7 @@ static HRESULT WINAPI CLRRuntimeInfo_GetProcAddress(ICLRRuntimeInfo* iface,
static HRESULT WINAPI CLRRuntimeInfo_GetInterface(ICLRRuntimeInfo* iface,
REFCLSID rclsid, REFIID riid, LPVOID *ppUnk)
{
- struct CLRRuntimeInfo *This = (struct CLRRuntimeInfo*)iface;
+ struct CLRRuntimeInfo *This = impl_from_ICLRRuntimeInfo(iface);
RuntimeHost *host;
HRESULT hr;
@@ -548,9 +553,9 @@ static const struct ICLRRuntimeInfoVtbl CLRRuntimeInfoVtbl = {
HRESULT ICLRRuntimeInfo_GetRuntimeHost(ICLRRuntimeInfo *iface, RuntimeHost **result)
{
- struct CLRRuntimeInfo *This = (struct CLRRuntimeInfo*)iface;
+ struct CLRRuntimeInfo *This = impl_from_ICLRRuntimeInfo(iface);
- assert(This->ICLRRuntimeInfo_vtbl == &CLRRuntimeInfoVtbl);
+ assert(This->ICLRRuntimeInfo_iface.lpVtbl == &CLRRuntimeInfoVtbl);
return CLRRuntimeInfo_GetRuntimeHost(This, result);
}
@@ -839,7 +844,7 @@ static HRESULT WINAPI InstalledRuntimeEnum_Next(IEnumUnknown *iface, ULONG celt,
}
if (runtimes[This->pos].mono_abi_version)
{
- item = (IUnknown*)&runtimes[This->pos];
+ item = (IUnknown*)&runtimes[This->pos].ICLRRuntimeInfo_iface;
IUnknown_AddRef(item);
rgelt[num_fetched] = item;
num_fetched++;
@@ -1022,7 +1027,8 @@ static HRESULT WINAPI CLRMetaHost_GetRuntime(ICLRMetaHost* iface,
runtimes[i].build == build)
{
if (runtimes[i].mono_abi_version)
- return IUnknown_QueryInterface((IUnknown*)&runtimes[i], iid, ppRuntime);
+ return ICLRRuntimeInfo_QueryInterface(&runtimes[i].ICLRRuntimeInfo_iface, iid,
+ ppRuntime);
else
{
missing_runtime_message(&runtimes[i]);
@@ -1315,8 +1321,8 @@ HRESULT get_runtime_info(LPCWSTR exefile, LPCWSTR version, LPCWSTR config_file,
while (i--)
{
if (runtimes[i].mono_abi_version)
- return IUnknown_QueryInterface((IUnknown*)&runtimes[i],
- &IID_ICLRRuntimeInfo, (void**)result);
+ return ICLRRuntimeInfo_QueryInterface(&runtimes[i].ICLRRuntimeInfo_iface,
+ &IID_ICLRRuntimeInfo, (void **)result);
}
if (legacy)
diff --git a/dlls/mscoree/mscoree_private.h b/dlls/mscoree/mscoree_private.h
index 1b583c6..5cbf8df 100644
--- a/dlls/mscoree/mscoree_private.h
+++ b/dlls/mscoree/mscoree_private.h
@@ -37,7 +37,7 @@ typedef struct RuntimeHost RuntimeHost;
typedef struct CLRRuntimeInfo
{
- const struct ICLRRuntimeInfoVtbl *ICLRRuntimeInfo_vtbl;
+ ICLRRuntimeInfo ICLRRuntimeInfo_iface;
LPCWSTR mono_libdir;
DWORD major;
DWORD minor;
--
1.7.6
More information about the wine-patches
mailing list