mirror of
https://github.com/reactos/wine.git
synced 2024-11-25 20:59:54 +00:00
oleaut32: Rewrite MSFT_ReadName and MSFT_ReadString to need one less allocation and to fix a memory leak.
This commit is contained in:
parent
b3d024a7bb
commit
b5c78d0dff
@ -1511,7 +1511,6 @@ static BSTR MSFT_ReadName( TLBContext *pcx, int offset)
|
||||
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 *pcx, int offset)
|
||||
/* 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 *pcx, int offset)
|
||||
/* 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;
|
||||
|
Loading…
Reference in New Issue
Block a user