Module: wine Branch: master Commit: 2fab79955fca7cf6b5a3672d19477425b4ace2f8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2fab79955fca7cf6b5a3672d19...
Author: Rob Shearman robertshearman@gmail.com Date: Thu Aug 14 18:50:49 2008 +0100
oleaut32: Avoid unnecessary allocations in TLB_MultiByteToBSTR and SLTG_ReadString.
---
dlls/oleaut32/typelib.c | 16 ++++++---------- 1 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index 45c5e13..b058dc5 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -2753,14 +2753,12 @@ static ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength) static BSTR TLB_MultiByteToBSTR(const char *ptr) { DWORD len; - WCHAR *nameW; BSTR ret;
len = MultiByteToWideChar(CP_ACP, 0, ptr, -1, NULL, 0); - nameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, ptr, -1, nameW, len); - ret = SysAllocString(nameW); - HeapFree(GetProcessHeap(), 0, nameW); + ret = SysAllocStringLen(NULL, len - 1); + if (!ret) return ret; + MultiByteToWideChar(CP_ACP, 0, ptr, -1, ret, len); return ret; }
@@ -2790,16 +2788,14 @@ static WORD SLTG_ReadString(const char *ptr, BSTR *pBstr) { WORD bytelen; DWORD len; - WCHAR *nameW;
*pBstr = NULL; bytelen = *(const WORD*)ptr; if(bytelen == 0xffff) return 2; len = MultiByteToWideChar(CP_ACP, 0, ptr + 2, bytelen, NULL, 0); - nameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - len = MultiByteToWideChar(CP_ACP, 0, ptr + 2, bytelen, nameW, len); - *pBstr = SysAllocStringLen(nameW, len); - HeapFree(GetProcessHeap(), 0, nameW); + *pBstr = SysAllocStringLen(NULL, len - 1); + if (*pBstr) + len = MultiByteToWideChar(CP_ACP, 0, ptr + 2, bytelen, *pBstr, len); return bytelen + 2; }