Nikolay Sivov : ole32: Remove unnecessary helpers to create/destroy bind context.
Alexandre Julliard
julliard at winehq.org
Mon Sep 20 16:26:20 CDT 2021
Module: wine
Branch: master
Commit: 1a6659e8e40dcb779a540bc8a6bbbc4beb2cfb5d
URL: https://source.winehq.org/git/wine.git/?a=commit;h=1a6659e8e40dcb779a540bc8a6bbbc4beb2cfb5d
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Sep 20 13:08:45 2021 +0300
ole32: Remove unnecessary helpers to create/destroy bind context.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ole32/bindctx.c | 111 +++++++++++++--------------------------------------
1 file changed, 27 insertions(+), 84 deletions(-)
diff --git a/dlls/ole32/bindctx.c b/dlls/ole32/bindctx.c
index 24229568f18..261c6b01c67 100644
--- a/dlls/ole32/bindctx.c
+++ b/dlls/ole32/bindctx.c
@@ -30,6 +30,7 @@
#include "objbase.h"
#include "wine/debug.h"
+#include "wine/heap.h"
WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -112,41 +113,21 @@ static ULONG WINAPI BindCtxImpl_AddRef(IBindCtx* iface)
return InterlockedIncrement(&This->ref);
}
-/******************************************************************************
- * BindCtx_Destroy (local function)
- *******************************************************************************/
-static HRESULT BindCtxImpl_Destroy(BindCtxImpl* This)
-{
- TRACE("(%p)\n",This);
-
- /* free the table space memory */
- HeapFree(GetProcessHeap(),0,This->bindCtxTable);
-
- /* free the bindctx structure */
- HeapFree(GetProcessHeap(),0,This);
-
- return S_OK;
-}
-
-/******************************************************************************
- * BindCtx_Release
- ******************************************************************************/
static ULONG WINAPI BindCtxImpl_Release(IBindCtx* iface)
{
- BindCtxImpl *This = impl_from_IBindCtx(iface);
- ULONG ref;
+ BindCtxImpl *context = impl_from_IBindCtx(iface);
+ ULONG refcount = InterlockedDecrement(&context->ref);
- TRACE("(%p)\n",This);
+ TRACE("%p refcount %d.\n", iface, refcount);
- ref = InterlockedDecrement(&This->ref);
- if (ref == 0)
+ if (!refcount)
{
- /* release all registered objects */
- BindCtxImpl_ReleaseBoundObjects(&This->IBindCtx_iface);
-
- BindCtxImpl_Destroy(This);
+ BindCtxImpl_ReleaseBoundObjects(&context->IBindCtx_iface);
+ heap_free(context->bindCtxTable);
+ heap_free(context);
}
- return ref;
+
+ return refcount;
}
@@ -487,8 +468,6 @@ static HRESULT BindCtxImpl_ExpandTable(BindCtxImpl *This)
return S_OK;
}
-
-/* Virtual function table for the BindCtx class. */
static const IBindCtxVtbl VT_BindCtxImpl =
{
BindCtxImpl_QueryInterface,
@@ -506,74 +485,38 @@ static const IBindCtxVtbl VT_BindCtxImpl =
BindCtxImpl_RevokeObjectParam
};
-/******************************************************************************
- * BindCtx_Construct (local function)
- *******************************************************************************/
-static HRESULT BindCtxImpl_Construct(BindCtxImpl* This)
-{
- TRACE("(%p)\n",This);
-
- /* Initialize the virtual function table.*/
- This->IBindCtx_iface.lpVtbl = &VT_BindCtxImpl;
- This->ref = 0;
-
- memset(&This->options, 0, sizeof(This->options));
- This->options.cbStruct = sizeof(This->options);
- This->options.grfMode = STGM_READWRITE;
- This->options.dwClassContext = CLSCTX_SERVER;
- This->options.locale = GetThreadLocale();
-
- /* Initialize the bindctx table */
- This->bindCtxTableSize=0;
- This->bindCtxTableLastIndex=0;
- This->bindCtxTable = NULL;
-
- return S_OK;
-}
-
/******************************************************************************
* CreateBindCtx (OLE32.@)
- *
- * Creates a bind context. A bind context encompasses information and options
- * used when binding to a moniker.
- *
- * PARAMS
- * reserved [I] Reserved. Set to 0.
- * ppbc [O] Address that receives the bind context object.
- *
- * RETURNS
- * Success: S_OK.
- * Failure: Any HRESULT code.
*/
-HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC * ppbc)
+HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
{
- BindCtxImpl* newBindCtx;
- HRESULT hr;
+ BindCtxImpl *object;
- TRACE("(%d,%p)\n",reserved,ppbc);
+ TRACE("%#x, %p\n", reserved, bind_context);
- if (!ppbc) return E_INVALIDARG;
+ if (!bind_context) return E_INVALIDARG;
- *ppbc = NULL;
+ *bind_context = NULL;
- if (reserved != 0)
+ if (reserved)
{
- ERR("reserved should be 0, not 0x%x\n", reserved);
+ WARN("reserved should be 0, not 0x%x\n", reserved);
return E_INVALIDARG;
}
- newBindCtx = HeapAlloc(GetProcessHeap(), 0, sizeof(BindCtxImpl));
- if (newBindCtx == 0)
+ if (!(object = heap_alloc_zero(sizeof(*object))))
return E_OUTOFMEMORY;
- hr = BindCtxImpl_Construct(newBindCtx);
- if (FAILED(hr))
- {
- HeapFree(GetProcessHeap(),0,newBindCtx);
- return hr;
- }
+ object->IBindCtx_iface.lpVtbl = &VT_BindCtxImpl;
+ object->ref = 1;
+ object->options.cbStruct = sizeof(object->options);
+ object->options.grfMode = STGM_READWRITE;
+ object->options.dwClassContext = CLSCTX_SERVER;
+ object->options.locale = GetThreadLocale();
- return BindCtxImpl_QueryInterface(&newBindCtx->IBindCtx_iface,&IID_IBindCtx,(void**)ppbc);
+ *bind_context = &object->IBindCtx_iface;
+
+ return S_OK;
}
/******************************************************************************
More information about the wine-cvs
mailing list