wine/dlls/oleaut32 typelib.c
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Dec 1 05:59:07 CST 2005
ChangeSet ID: 21586
CVSROOT: /opt/cvs-commit
Module name: wine
Changes by: julliard at winehq.org 2005/12/01 05:59:07
Modified files:
dlls/oleaut32 : typelib.c
Log message:
Robert Shearman <rob at codeweavers.com>
The pparamdescex of an ELEMDESC should only be copied if wParamFlags &
PARAMFLAG_DHASDEFAULT.
Make ITypeInfo_ReleaseVarDesc use TLB_FreeElemDesc.
Patch: http://cvs.winehq.org/patch.py?id=21586
Old revision New revision Changes Path
1.179 1.180 +9 -9 wine/dlls/oleaut32/typelib.c
Index: wine/dlls/oleaut32/typelib.c
diff -u -p wine/dlls/oleaut32/typelib.c:1.179 wine/dlls/oleaut32/typelib.c:1.180
--- wine/dlls/oleaut32/typelib.c:1.179 1 Dec 2005 11:59: 7 -0000
+++ wine/dlls/oleaut32/typelib.c 1 Dec 2005 11:59: 7 -0000
@@ -4333,7 +4333,7 @@ static ULONG WINAPI ITypeInfo_fnRelease(
static HRESULT WINAPI ITypeInfo_fnGetTypeAttr( ITypeInfo2 *iface,
LPTYPEATTR *ppTypeAttr)
{
- ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
+ const ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
SIZE_T size;
TRACE("(%p)\n",This);
@@ -4382,7 +4382,7 @@ static HRESULT WINAPI ITypeInfo_fnGetTyp
static SIZE_T TLB_SizeElemDesc( const ELEMDESC *elemdesc )
{
SIZE_T size = TLB_SizeTypeDesc(&elemdesc->tdesc, FALSE);
- if (elemdesc->u.paramdesc.pparamdescex)
+ if (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
size += sizeof(*elemdesc->u.paramdesc.pparamdescex);
return size;
}
@@ -4391,23 +4391,24 @@ static HRESULT TLB_CopyElemDesc( const E
{
memcpy(dest, src, sizeof(ELEMDESC));
*buffer = TLB_CopyTypeDesc(&dest->tdesc, &src->tdesc, *buffer);
- if (src->u.paramdesc.pparamdescex)
+ if (src->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
{
const PARAMDESCEX *pparamdescex_src = src->u.paramdesc.pparamdescex;
PARAMDESCEX *pparamdescex_dest = dest->u.paramdesc.pparamdescex = (PARAMDESCEX *)*buffer;
*buffer += sizeof(PARAMDESCEX);
memcpy(pparamdescex_dest, pparamdescex_src, sizeof(PARAMDESCEX));
VariantInit(&pparamdescex_dest->varDefaultValue);
- if (src->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
- return VariantCopy(&pparamdescex_dest->varDefaultValue,
- (VARIANTARG *)&pparamdescex_src->varDefaultValue);
+ return VariantCopy(&pparamdescex_dest->varDefaultValue,
+ (VARIANTARG *)&pparamdescex_src->varDefaultValue);
}
+ else
+ dest->u.paramdesc.pparamdescex = NULL;
return S_OK;
}
static void TLB_FreeElemDesc( ELEMDESC *elemdesc )
{
- if (elemdesc->u.paramdesc.pparamdescex)
+ if (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
VariantClear(&elemdesc->u.paramdesc.pparamdescex->varDefaultValue);
}
@@ -5717,8 +5718,7 @@ static void WINAPI ITypeInfo_fnReleaseVa
ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
TRACE("(%p)->(%p)\n", This, pVarDesc);
- if (pVarDesc->elemdescVar.u.paramdesc.pparamdescex)
- VariantClear(&pVarDesc->elemdescVar.u.paramdesc.pparamdescex->varDefaultValue);
+ TLB_FreeElemDesc(&pVarDesc->elemdescVar);
if (pVarDesc->varkind == VAR_CONST)
VariantClear(pVarDesc->u.lpvarValue);
SysFreeString((BSTR)pVarDesc);
More information about the wine-cvs
mailing list