Andrew Eikum : oleaut32: Implement ITypeInfo2::ReleaseFuncDesc.
Alexandre Julliard
julliard at winehq.org
Mon Aug 23 10:50:13 CDT 2010
Module: wine
Branch: master
Commit: 3f13a07b47fedeec0190adfcacdf8c502c9ed461
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3f13a07b47fedeec0190adfcacdf8c502c9ed461
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Fri Aug 20 14:58:53 2010 -0500
oleaut32: Implement ITypeInfo2::ReleaseFuncDesc.
---
dlls/oleaut32/typelib2.c | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/dlls/oleaut32/typelib2.c b/dlls/oleaut32/typelib2.c
index d1b48ff..71fd434 100644
--- a/dlls/oleaut32/typelib2.c
+++ b/dlls/oleaut32/typelib2.c
@@ -3540,6 +3540,19 @@ static HRESULT WINAPI ITypeInfo2_fnGetContainingTypeLib(
return S_OK;
}
+static void release_typedesc(TYPEDESC *tdesc)
+{
+ while (tdesc) {
+ TYPEDESC *next;
+ if (tdesc->vt == VT_USERDEFINED)
+ next = NULL;
+ else
+ next = tdesc->u.lptdesc;
+ HeapFree(GetProcessHeap(), 0, tdesc);
+ tdesc = next;
+ }
+}
+
/******************************************************************************
* ITypeInfo2_ReleaseTypeAttr {OLEAUT32}
*
@@ -3563,7 +3576,28 @@ static void WINAPI ITypeInfo2_fnReleaseFuncDesc(
ITypeInfo2* iface,
FUNCDESC* pFuncDesc)
{
- FIXME("(%p,%p), stub!\n", iface, pFuncDesc);
+ int i;
+
+ TRACE("(%p,%p)\n", iface, pFuncDesc);
+
+ HeapFree(GetProcessHeap(), 0, pFuncDesc->lprgscode);
+
+ if (pFuncDesc->lprgelemdescParam) {
+ for (i = 0; i < pFuncDesc->cParams; ++i) {
+ if (pFuncDesc->lprgelemdescParam[i].tdesc.vt != VT_USERDEFINED)
+ release_typedesc(pFuncDesc->lprgelemdescParam[i].tdesc.u.lptdesc);
+
+ HeapFree(GetProcessHeap(), 0, pFuncDesc->lprgelemdescParam[i].u.paramdesc.pparamdescex);
+ }
+ HeapFree(GetProcessHeap(), 0, pFuncDesc->lprgelemdescParam);
+ }
+
+ HeapFree(GetProcessHeap(), 0, pFuncDesc->elemdescFunc.u.paramdesc.pparamdescex);
+
+ if (pFuncDesc->elemdescFunc.tdesc.vt != VT_USERDEFINED)
+ release_typedesc(pFuncDesc->elemdescFunc.tdesc.u.lptdesc);
+
+ HeapFree(GetProcessHeap(), 0, pFuncDesc);
}
/******************************************************************************
More information about the wine-cvs
mailing list