From: Nikolay Sivov Subject: [PATCH] atl: Simplify error handling in AtlAxAttachControl() Message-Id: <1397822972.1267.0.camel@laptop> Date: Fri, 18 Apr 2014 16:09:32 +0400 --- dlls/atl/atl_ax.c | 28 +++++++++++----------------- dlls/atl/tests/atl_ax.c | 10 +++------- 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/dlls/atl/atl_ax.c b/dlls/atl/atl_ax.c index 0a16010..764c46e 100644 --- a/dlls/atl/atl_ax.c +++ b/dlls/atl/atl_ax.c @@ -949,12 +949,15 @@ static HRESULT IOCS_Init( IOCS *This ) /********************************************************************** * Create new instance of Atl host component and attach it to window * */ -static HRESULT IOCS_Create( HWND hWnd, IUnknown *pUnkControl, IOCS **ppSite ) +static HRESULT IOCS_Create( HWND hWnd, IUnknown *pUnkControl, IUnknown **container ) { HRESULT hr; IOCS *This; - *ppSite = NULL; + if (!container) + return S_OK; + + *container = NULL; This = HeapAlloc(GetProcessHeap(), 0, sizeof(IOCS)); if (!This) @@ -975,7 +978,7 @@ static HRESULT IOCS_Create( HWND hWnd, IUnknown *pUnkControl, IOCS **ppSite ) if ( SUCCEEDED( hr ) ) hr = IOCS_Init( This ); if ( SUCCEEDED( hr ) ) - *ppSite = This; + *container = (IUnknown*)&This->IOleClientSite_iface; else IOCS_Release( This ); @@ -1102,26 +1105,17 @@ HRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR lpszName, HWND hWnd, /*********************************************************************** * AtlAxAttachControl [atl100.@] */ -HRESULT WINAPI AtlAxAttachControl(IUnknown* pControl, HWND hWnd, IUnknown** ppUnkContainer) +HRESULT WINAPI AtlAxAttachControl(IUnknown *control, HWND hWnd, IUnknown **container) { - IOCS *pUnkContainer; HRESULT hr; - TRACE( "%p %p %p\n", pControl, hWnd, ppUnkContainer ); + TRACE("(%p %p %p)\n", control, hWnd, container); - if (!pControl) + if (!control) return E_INVALIDARG; - hr = IOCS_Create( hWnd, pControl, &pUnkContainer ); - if ( SUCCEEDED( hr ) && ppUnkContainer) - { - *ppUnkContainer = (IUnknown*) pUnkContainer; - } - - if(!hWnd) - return S_FALSE; - - return hr; + hr = IOCS_Create( hWnd, control, container ); + return hWnd ? hr : S_FALSE; } /********************************************************************** diff --git a/dlls/atl/tests/atl_ax.c b/dlls/atl/tests/atl_ax.c index f2dad74..6b944d1 100644 --- a/dlls/atl/tests/atl_ax.c +++ b/dlls/atl/tests/atl_ax.c @@ -97,15 +97,11 @@ static void test_AtlAxAttachControl(void) hr = pAtlAxAttachControl(pObj, NULL, NULL); ok(hr == S_FALSE, "Expected AtlAxAttachControl to return S_FALSE, got 0x%08x\n", hr); - pContainer = (IUnknown *)0xdeadbeef; + pContainer = NULL; hr = pAtlAxAttachControl(pObj, NULL, &pContainer); ok(hr == S_FALSE, "Expected AtlAxAttachControl to return S_FALSE, got 0x%08x\n", hr); - ok(pContainer != (IUnknown *)0xdeadbeef && - pContainer != NULL, - "Expected the output container pointer to be initialized to non-NULL, got %p\n", pContainer); - - if (pContainer != (IUnknown *)0xdeadbeef && pContainer != NULL) - IUnknown_Release(pContainer); + ok(pContainer != NULL, "got %p\n", pContainer); + IUnknown_Release(pContainer); hr = pAtlAxAttachControl(pObj, hwnd, NULL); ok(hr == S_OK, "Expected AtlAxAttachControl to return S_OK, got 0x%08x\n", hr);