From 72eaeb14a6021aacf88d7189bdb2a4177e8c5ba9 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Thu, 7 May 2015 10:39:11 +0300 Subject: [PATCH] oleaut32: Simplify connection point creation. --- dlls/oleaut32/connpt.c | 46 +++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 30 deletions(-) diff --git a/dlls/oleaut32/connpt.c b/dlls/oleaut32/connpt.c index 1d7b05ce5bf..5e15e08e54e 100644 --- a/dlls/oleaut32/connpt.c +++ b/dlls/oleaut32/connpt.c @@ -66,9 +66,6 @@ typedef struct ConnectionPointImpl { DWORD nSinks; } ConnectionPointImpl; -static const IConnectionPointVtbl ConnectionPointImpl_VTable; - - /************************************************************************ * Implementation of IEnumConnections */ @@ -104,26 +101,6 @@ static inline EnumConnectionsImpl *impl_from_IEnumConnections(IEnumConnections * return CONTAINING_RECORD(iface, EnumConnectionsImpl, IEnumConnections_iface); } -/************************************************************************ - * ConnectionPointImpl_Construct - */ -static ConnectionPointImpl *ConnectionPointImpl_Construct(IUnknown *pUnk, - REFIID riid) -{ - ConnectionPointImpl *Obj; - - Obj = HeapAlloc(GetProcessHeap(), 0, sizeof(*Obj)); - Obj->IConnectionPoint_iface.lpVtbl = &ConnectionPointImpl_VTable; - Obj->Obj = pUnk; - Obj->ref = 1; - Obj->iid = *riid; - Obj->maxSinks = MAXSINKS; - Obj->sinks = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, - sizeof(IUnknown*) * MAXSINKS); - Obj->nSinks = 0; - return Obj; -} - /************************************************************************ * ConnectionPointImpl_Destroy */ @@ -615,13 +592,22 @@ HRESULT CreateConnectionPoint(IUnknown *pUnk, REFIID riid, IConnectionPoint **pCP) { ConnectionPointImpl *Obj; - HRESULT hr; - Obj = ConnectionPointImpl_Construct(pUnk, riid); - if(!Obj) return E_OUTOFMEMORY; + TRACE("(%p %s %p)\n", pUnk, debugstr_guid(riid), pCP); - hr = IConnectionPoint_QueryInterface(&Obj->IConnectionPoint_iface, - &IID_IConnectionPoint, (void**)pCP); - IConnectionPoint_Release(&Obj->IConnectionPoint_iface); - return hr; + *pCP = NULL; + Obj = HeapAlloc(GetProcessHeap(), 0, sizeof(*Obj)); + if (!Obj) + return E_OUTOFMEMORY; + + Obj->IConnectionPoint_iface.lpVtbl = &ConnectionPointImpl_VTable; + Obj->Obj = pUnk; + Obj->ref = 1; + Obj->iid = *riid; + Obj->maxSinks = MAXSINKS; + Obj->sinks = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IUnknown*) * MAXSINKS); + Obj->nSinks = 0; + + *pCP = &Obj->IConnectionPoint_iface; + return S_OK; }