Module: wine Branch: refs/heads/master Commit: d8d1693def4dea73b60d9ce0786bf938a0a6f7cc URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=d8d1693def4dea73b60d9ce0...
Author: Robert Shearman rob@codeweavers.com Date: Sat Dec 3 18:20:03 2005 +0100
OLE: fix function name loading Correctly get the name of the second function of a propget/propput pair in MSFT typelibs when the name offset is set to -1.
---
dlls/oleaut32/typelib.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index 07fa031..3e4b83b 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -1685,6 +1685,7 @@ MSFT_DoFuncs(TLBContext* pcx,
char recbuf[512]; MSFT_FuncRecord * pFuncRec=(MSFT_FuncRecord *) recbuf; + TLBFuncDesc *ptfd_prev = NULL;
TRACE_(typelib)("\n");
@@ -1698,7 +1699,12 @@ MSFT_DoFuncs(TLBContext* pcx, MSFT_ReadLEDWords(&nameoffset, sizeof(INT), pcx, offset + infolen + (cFuncs + cVars + i + 1) * sizeof(INT));
- (*pptfd)->Name = MSFT_ReadName(pcx, nameoffset); + /* nameoffset is sometimes -1 on the second half of a propget/propput + * pair of functions */ + if ((nameoffset == -1) && (i > 0)) + (*pptfd)->Name = SysAllocString(ptfd_prev->Name); + else + (*pptfd)->Name = MSFT_ReadName(pcx, nameoffset);
/* read the function information record */ MSFT_ReadLEDWords(&reclength, sizeof(INT), pcx, recoffset); @@ -1844,6 +1850,8 @@ MSFT_DoFuncs(TLBContext* pcx, MSFT_ReadValue(&(pParamDesc->pparamdescex->varDefaultValue), pInt[j], pcx); } + else + elemdesc->u.paramdesc.pparamdescex = NULL; /* custom info */ if ( nrattributes > 7 + j && pFuncRec->FKCCIC & 0x80 ) { @@ -1867,6 +1875,7 @@ MSFT_DoFuncs(TLBContext* pcx, (*pptfd)->funcdesc.cScodes = 0 ; (*pptfd)->funcdesc.lprgscode = NULL ;
+ ptfd_prev = *pptfd; pptfd = & ((*pptfd)->next); recoffset += reclength; }