mshtml: COM cleanup for the nsIFactory iface.

Michael Stefaniuc mstefani at redhat.de
Mon Jan 3 18:46:39 CST 2011


---
 dlls/mshtml/nsservice.c |   29 ++++++++++++++---------------
 1 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/dlls/mshtml/nsservice.c b/dlls/mshtml/nsservice.c
index b280020..a2b6cab 100644
--- a/dlls/mshtml/nsservice.c
+++ b/dlls/mshtml/nsservice.c
@@ -377,27 +377,28 @@ static const nsITooltipTextProviderVtbl nsTooltipTextProviderVtbl = {
 static nsITooltipTextProvider nsTooltipTextProvider = { &nsTooltipTextProviderVtbl };
 
 typedef struct {
-    const nsIFactoryVtbl *lpFactoryVtbl;
+    nsIFactory nsIFactory_iface;
     nsISupports *service;
 } nsServiceFactory;
 
-#define NSFACTORY(x)  ((nsIFactory*)  &(x)->lpFactoryVtbl)
-
-#define NSFACTORY_THIS(iface) DEFINE_THIS(nsServiceFactory, Factory, iface)
+static inline nsServiceFactory *impl_from_nsIFactory(nsIFactory *iface)
+{
+    return CONTAINING_RECORD(iface, nsServiceFactory, nsIFactory_iface);
+}
 
 static nsresult NSAPI nsServiceFactory_QueryInterface(nsIFactory *iface, nsIIDRef riid,
         void **result)
 {
-    nsServiceFactory *This = NSFACTORY_THIS(iface);
+    nsServiceFactory *This = impl_from_nsIFactory(iface);
 
     *result = NULL;
 
     if(IsEqualGUID(&IID_nsISupports, riid)) {
         TRACE("(%p)->(IID_nsISupports %p)\n", This, result);
-        *result = NSFACTORY(This);
+        *result = &This->nsIFactory_iface;
     }else if(IsEqualGUID(&IID_nsIFactory, riid)) {
         TRACE("(%p)->(IID_nsIFactory %p)\n", This, result);
-        *result = NSFACTORY(This);
+        *result = &This->nsIFactory_iface;
     }
 
     if(*result)
@@ -420,7 +421,7 @@ static nsrefcnt NSAPI nsServiceFactory_Release(nsIFactory *iface)
 static nsresult NSAPI nsServiceFactory_CreateInstance(nsIFactory *iface,
         nsISupports *aOuter, const nsIID *iid, void **result)
 {
-    nsServiceFactory *This = NSFACTORY_THIS(iface);
+    nsServiceFactory *This = impl_from_nsIFactory(iface);
 
     TRACE("(%p)->(%p %s %p)\n", This, aOuter, debugstr_guid(iid), result);
 
@@ -429,13 +430,11 @@ static nsresult NSAPI nsServiceFactory_CreateInstance(nsIFactory *iface,
 
 static nsresult NSAPI nsServiceFactory_LockFactory(nsIFactory *iface, PRBool lock)
 {
-    nsServiceFactory *This = NSFACTORY_THIS(iface);
+    nsServiceFactory *This = impl_from_nsIFactory(iface);
     WARN("(%p)->(%x)\n", This, lock);
     return NS_OK;
 }
 
-#undef NSFACTORY_THIS
-
 static const nsIFactoryVtbl nsServiceFactoryVtbl = {
     nsServiceFactory_QueryInterface,
     nsServiceFactory_AddRef,
@@ -445,12 +444,12 @@ static const nsIFactoryVtbl nsServiceFactoryVtbl = {
 };
 
 static nsServiceFactory nsPromptServiceFactory = {
-    &nsServiceFactoryVtbl,
+    { &nsServiceFactoryVtbl },
     (nsISupports*)&nsPromptService
 };
 
 static nsServiceFactory nsTooltipTextFactory = {
-    &nsServiceFactoryVtbl,
+    { &nsServiceFactoryVtbl },
     (nsISupports*)&nsTooltipTextProvider
 };
 
@@ -460,7 +459,7 @@ void register_nsservice(nsIComponentRegistrar *registrar, nsIServiceManager *ser
     nsresult nsres;
 
     nsres = nsIComponentRegistrar_RegisterFactory(registrar, &NS_PROMPTSERVICE_CID,
-            "Prompt Service", NS_PROMPTSERVICE_CONTRACTID, NSFACTORY(&nsPromptServiceFactory));
+            "Prompt Service", NS_PROMPTSERVICE_CONTRACTID, &nsPromptServiceFactory.nsIFactory_iface);
     if(NS_FAILED(nsres))
         ERR("RegisterFactory failed: %08x\n", nsres);
 
@@ -478,7 +477,7 @@ void register_nsservice(nsIComponentRegistrar *registrar, nsIServiceManager *ser
 
     nsres = nsIComponentRegistrar_RegisterFactory(registrar, &NS_TOOLTIPTEXTPROVIDER_CID,
             NS_TOOLTIPTEXTPROVIDER_CLASSNAME, NS_TOOLTIPTEXTPROVIDER_CONTRACTID,
-            NSFACTORY(&nsTooltipTextFactory));
+            &nsTooltipTextFactory.nsIFactory_iface);
     if(NS_FAILED(nsres))
         ERR("RegisterFactory failed: %08x\n", nsres);
 }
-- 
1.7.3.4



More information about the wine-patches mailing list