Michael Stefaniuc : msxml3: COM cleanup for factory.c.
Alexandre Julliard
julliard at winehq.org
Thu May 19 13:32:09 CDT 2011
Module: wine
Branch: master
Commit: 2706e4dbafa333f3d86a112c0e93021dd8106fc7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2706e4dbafa333f3d86a112c0e93021dd8106fc7
Author: Michael Stefaniuc <mstefani at redhat.de>
Date: Wed May 18 23:42:33 2011 +0200
msxml3: COM cleanup for factory.c.
---
dlls/msxml3/factory.c | 46 ++++++++++++++++++++++++++++------------------
1 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/dlls/msxml3/factory.c b/dlls/msxml3/factory.c
index ee72fcf..7c39b39 100644
--- a/dlls/msxml3/factory.c
+++ b/dlls/msxml3/factory.c
@@ -54,18 +54,23 @@ typedef HRESULT (*DOMFactoryCreateInstanceFunc)(const GUID *clsid, IUnknown *pUn
*/
typedef struct
{
- const struct IClassFactoryVtbl *lpVtbl;
+ IClassFactory IClassFactory_iface;
ClassFactoryCreateInstanceFunc pCreateInstance;
} ClassFactory;
typedef struct
{
- const struct IClassFactoryVtbl *lpVtbl;
+ IClassFactory IClassFactory_iface;
LONG ref;
DOMFactoryCreateInstanceFunc pCreateInstance;
GUID clsid;
} DOMFactory;
+static inline ClassFactory *ClassFactory_from_IClassFactory(IClassFactory *iface)
+{
+ return CONTAINING_RECORD(iface, ClassFactory, IClassFactory_iface);
+}
+
static HRESULT WINAPI ClassFactory_QueryInterface(
IClassFactory *iface,
REFIID riid,
@@ -100,7 +105,7 @@ static HRESULT WINAPI ClassFactory_CreateInstance(
REFIID riid,
void **ppobj )
{
- ClassFactory *This = (ClassFactory*)iface;
+ ClassFactory *This = ClassFactory_from_IClassFactory(iface);
IUnknown *punk;
HRESULT r;
@@ -128,9 +133,14 @@ static HRESULT WINAPI ClassFactory_LockServer(
return S_OK;
}
+static inline DOMFactory *DOMFactory_from_IClassFactory(IClassFactory *iface)
+{
+ return CONTAINING_RECORD(iface, DOMFactory, IClassFactory_iface);
+}
+
static ULONG WINAPI DOMClassFactory_AddRef(IClassFactory *iface )
{
- DOMFactory *This = (DOMFactory*)iface;
+ DOMFactory *This = DOMFactory_from_IClassFactory(iface);
ULONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref = %u\n", This, ref);
return ref;
@@ -138,7 +148,7 @@ static ULONG WINAPI DOMClassFactory_AddRef(IClassFactory *iface )
static ULONG WINAPI DOMClassFactory_Release(IClassFactory *iface )
{
- DOMFactory *This = (DOMFactory*)iface;
+ DOMFactory *This = DOMFactory_from_IClassFactory(iface);
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref = %u\n", This, ref);
if(!ref) {
@@ -153,7 +163,7 @@ static HRESULT WINAPI DOMClassFactory_CreateInstance(
REFIID riid,
void **ppobj )
{
- DOMFactory *This = (DOMFactory*)iface;
+ DOMFactory *This = DOMFactory_from_IClassFactory(iface);
IUnknown *punk;
HRESULT r;
@@ -196,12 +206,12 @@ static HRESULT DOMClassFactory_Create(const GUID *clsid, REFIID riid, void **ppv
DOMFactory *ret = heap_alloc(sizeof(DOMFactory));
HRESULT hres;
- ret->lpVtbl = &DOMClassFactoryVtbl;
+ ret->IClassFactory_iface.lpVtbl = &DOMClassFactoryVtbl;
ret->ref = 0;
ret->clsid = *clsid;
ret->pCreateInstance = fnCreateInstance;
- hres = IClassFactory_QueryInterface((IClassFactory*)ret, riid, ppv);
+ hres = IClassFactory_QueryInterface(&ret->IClassFactory_iface, riid, ppv);
if(FAILED(hres)) {
heap_free(ret);
*ppv = NULL;
@@ -209,11 +219,11 @@ static HRESULT DOMClassFactory_Create(const GUID *clsid, REFIID riid, void **ppv
return hres;
}
-static ClassFactory xmldoccf = { &ClassFactoryVtbl, XMLDocument_create };
-static ClassFactory saxreadcf = { &ClassFactoryVtbl, SAXXMLReader_create };
-static ClassFactory httpreqcf = { &ClassFactoryVtbl, XMLHTTPRequest_create };
-static ClassFactory xsltemplatecf = { &ClassFactoryVtbl, XSLTemplate_create };
-static ClassFactory mxwritercf = { &ClassFactoryVtbl, MXWriter_create };
+static ClassFactory xmldoccf = { { &ClassFactoryVtbl }, XMLDocument_create };
+static ClassFactory saxreadcf = { { &ClassFactoryVtbl }, SAXXMLReader_create };
+static ClassFactory httpreqcf = { { &ClassFactoryVtbl }, XMLHTTPRequest_create };
+static ClassFactory xsltemplatecf = { { &ClassFactoryVtbl }, XSLTemplate_create };
+static ClassFactory mxwritercf = { { &ClassFactoryVtbl }, MXWriter_create };
/******************************************************************
* DllGetClassObject (MSXML3.@)
@@ -243,7 +253,7 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
}
else if( IsEqualCLSID( rclsid, &CLSID_XMLDocument ) )
{
- cf = (IClassFactory*) &xmldoccf.lpVtbl;
+ cf = &xmldoccf.IClassFactory_iface;
}
else if( IsEqualCLSID( rclsid, &CLSID_DOMFreeThreadedDocument ) || /* Version indep. v 2.x */
IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument ) ||
@@ -259,7 +269,7 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
IsEqualCLSID( rclsid, &CLSID_SAXXMLReader40 ) ||
IsEqualCLSID( rclsid, &CLSID_SAXXMLReader60 ))
{
- cf = (IClassFactory*) &saxreadcf.lpVtbl;
+ cf = &saxreadcf.IClassFactory_iface;
}
else if( IsEqualCLSID( rclsid, &CLSID_XMLHTTPRequest ) ||
IsEqualCLSID( rclsid, &CLSID_XMLHTTP26 ) ||
@@ -267,7 +277,7 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
IsEqualCLSID( rclsid, &CLSID_XMLHTTP40 ) ||
IsEqualCLSID( rclsid, &CLSID_XMLHTTP60 ))
{
- cf = (IClassFactory*) &httpreqcf.lpVtbl;
+ cf = &httpreqcf.IClassFactory_iface;
}
else if( IsEqualCLSID( rclsid, &CLSID_XSLTemplate ) ||
IsEqualCLSID( rclsid, &CLSID_XSLTemplate26 ) ||
@@ -275,14 +285,14 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
IsEqualCLSID( rclsid, &CLSID_XSLTemplate40 ) ||
IsEqualCLSID( rclsid, &CLSID_XSLTemplate60 ))
{
- cf = (IClassFactory*) &xsltemplatecf.lpVtbl;
+ cf = &xsltemplatecf.IClassFactory_iface;
}
else if( IsEqualCLSID( rclsid, &CLSID_MXXMLWriter ) ||
IsEqualCLSID( rclsid, &CLSID_MXXMLWriter30 ) ||
IsEqualCLSID( rclsid, &CLSID_MXXMLWriter40 ) ||
IsEqualCLSID( rclsid, &CLSID_MXXMLWriter60 ) )
{
- cf = (IClassFactory*) &mxwritercf.lpVtbl;
+ cf = &mxwritercf.IClassFactory_iface;
}
if ( !cf )
More information about the wine-cvs
mailing list