Rob Shearman : oleaut32: Avoid unnecessary allocations in TLB_MultiByteToBSTR and SLTG_ReadString.

Alexandre Julliard julliard at winehq.org
Mon Aug 18 10:46:28 CDT 2008


Module: wine
Branch: master
Commit: 2fab79955fca7cf6b5a3672d19477425b4ace2f8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2fab79955fca7cf6b5a3672d19477425b4ace2f8

Author: Rob Shearman <robertshearman at 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;
 }
 




More information about the wine-cvs mailing list