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;
|
char * name;
|
||||||
MSFT_NameIntro niName;
|
MSFT_NameIntro niName;
|
||||||
int lengthInChars;
|
int lengthInChars;
|
||||||
WCHAR* pwstring = NULL;
|
|
||||||
BSTR bstrName = NULL;
|
BSTR bstrName = NULL;
|
||||||
|
|
||||||
if (offset < 0)
|
if (offset < 0)
|
||||||
@ -1532,15 +1531,12 @@ static BSTR MSFT_ReadName( TLBContext *pcx, int offset)
|
|||||||
/* no invalid characters in string */
|
/* no invalid characters in string */
|
||||||
if (lengthInChars)
|
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 */
|
/* don't check for invalid character since this has been done previously */
|
||||||
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, pwstring, lengthInChars);
|
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, bstrName, lengthInChars);
|
||||||
|
|
||||||
bstrName = SysAllocStringLen(pwstring, lengthInChars);
|
|
||||||
lengthInChars = SysStringLen(bstrName);
|
|
||||||
HeapFree(GetProcessHeap(), 0, pwstring);
|
|
||||||
}
|
}
|
||||||
|
TLB_Free(name);
|
||||||
|
|
||||||
TRACE_(typelib)("%s %d\n", debugstr_w(bstrName), lengthInChars);
|
TRACE_(typelib)("%s %d\n", debugstr_w(bstrName), lengthInChars);
|
||||||
return bstrName;
|
return bstrName;
|
||||||
@ -1566,15 +1562,12 @@ static BSTR MSFT_ReadString( TLBContext *pcx, int offset)
|
|||||||
/* no invalid characters in string */
|
/* no invalid characters in string */
|
||||||
if (lengthInChars)
|
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 */
|
/* don't check for invalid character since this has been done previously */
|
||||||
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, string, -1, pwstring, lengthInChars);
|
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, string, -1, bstr, lengthInChars);
|
||||||
|
|
||||||
bstr = SysAllocStringLen(pwstring, lengthInChars);
|
|
||||||
lengthInChars = SysStringLen(bstr);
|
|
||||||
HeapFree(GetProcessHeap(), 0, pwstring);
|
|
||||||
}
|
}
|
||||||
|
TLB_Free(string);
|
||||||
|
|
||||||
TRACE_(typelib)("%s %d\n", debugstr_w(bstr), lengthInChars);
|
TRACE_(typelib)("%s %d\n", debugstr_w(bstr), lengthInChars);
|
||||||
return bstr;
|
return bstr;
|
||||||
|
Loading…
Reference in New Issue
Block a user