Module: wine Branch: master Commit: b5c78d0dffaf9212dfa1db35404501a127e57bf7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b5c78d0dffaf9212dfa1db3540...
Author: Rob Shearman rob@codeweavers.com Date: Mon Oct 23 11:39:43 2006 +0100
oleaut32: Rewrite MSFT_ReadName and MSFT_ReadString to need one less allocation and to fix a memory leak.
---
dlls/oleaut32/typelib.c | 19 ++++++------------- 1 files changed, 6 insertions(+), 13 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index cdf2fe1..e09a5d5 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -1511,7 +1511,6 @@ static BSTR MSFT_ReadName( TLBContext *p char * name; MSFT_NameIntro niName; int lengthInChars; - WCHAR* pwstring = NULL; BSTR bstrName = NULL;
if (offset < 0) @@ -1532,15 +1531,12 @@ static BSTR MSFT_ReadName( TLBContext *p /* no invalid characters in string */ if (lengthInChars) { - pwstring = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR)*lengthInChars); + bstrName = SysAllocStringByteLen(NULL, lengthInChars * sizeof(WCHAR));
/* don't check for invalid character since this has been done previously */ - MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, pwstring, lengthInChars); - - bstrName = SysAllocStringLen(pwstring, lengthInChars); - lengthInChars = SysStringLen(bstrName); - HeapFree(GetProcessHeap(), 0, pwstring); + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, bstrName, lengthInChars); } + TLB_Free(name);
TRACE_(typelib)("%s %d\n", debugstr_w(bstrName), lengthInChars); return bstrName; @@ -1566,15 +1562,12 @@ static BSTR MSFT_ReadString( TLBContext /* no invalid characters in string */ if (lengthInChars) { - WCHAR* pwstring = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR)*lengthInChars); + bstr = SysAllocStringByteLen(NULL, lengthInChars * sizeof(WCHAR));
/* don't check for invalid character since this has been done previously */ - MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, string, -1, pwstring, lengthInChars); - - bstr = SysAllocStringLen(pwstring, lengthInChars); - lengthInChars = SysStringLen(bstr); - HeapFree(GetProcessHeap(), 0, pwstring); + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, string, -1, bstr, lengthInChars); } + TLB_Free(string);
TRACE_(typelib)("%s %d\n", debugstr_w(bstr), lengthInChars); return bstr;